diff --git a/.changeset/spotty-buckets-hang.md b/.changeset/spotty-buckets-hang.md
new file mode 100644
index 000000000000..07b7af8e439d
--- /dev/null
+++ b/.changeset/spotty-buckets-hang.md
@@ -0,0 +1,32 @@
+---
+"@biomejs/biome": major
+---
+
+Reworked some recommended rules recommended to be less pedantic and blocking. This is a **breaking change** if your project relied on those rules to block the CI in case of violations, you should raise their diagnostic to **error**.
+
+Some rules aren't recommended anymore, and some others return a different severity:
+
+The following rules return a **warning** diagnostic:
+- `noDelete`
+- `noForEach`
+- `noSuspiciousSemicolonInJsx`
+- `noThisInStatic`
+- `noUnusedLabels`
+
+The following rules return an **information** diagnostic:
+- `noUselessCatch`
+- `noUselessConstructor`
+- `noUselessEmptyExport`
+- `noUselessFragments`
+- `noUselessLabel`
+- `noUselessLoneBlockStatements`
+- `noUselessSwitchCase`
+- `noUselessTernary`
+- `noUselessThisAlias`
+- `noUselessTypeConstraint`
+
+The following rules aren't recommended anymore:
+- `noDelete`
+- `noForEach`
+
+The rule `noRenderReturnValue` is only recommended when the `react` domain is enabled.
diff --git a/crates/biome_analyze/src/rule.rs b/crates/biome_analyze/src/rule.rs
index acc1a8f0f282..c7b9f267b85e 100644
--- a/crates/biome_analyze/src/rule.rs
+++ b/crates/biome_analyze/src/rule.rs
@@ -414,7 +414,7 @@ impl RuleSource {
pub fn to_rule_url(&self) -> String {
match self {
- Self::Clippy(rule_name) => format!("https://rust-lang.github.io/rust-clippy/master/#/{rule_name}"),
+ Self::Clippy(rule_name) => format!("https://rust-lang.github.io/rust-clippy/master/#{rule_name}"),
Self::Eslint(rule_name) => format!("https://eslint.org/docs/latest/rules/{rule_name}"),
Self::EslintGraphql(rule_name) => format!("https://the-guild.dev/graphql/eslint/rules/{rule_name}"),
Self::EslintGraphqlSchemaLinter(rule_name) => format!("https://github.com/cjoudrey/graphql-schema-linter?tab=readme-ov-file#{rule_name}"),
diff --git a/crates/biome_css_analyze/tests/plugin/useLowercaseColors.grit.snap b/crates/biome_css_analyze/tests/plugin/useLowercaseColors.grit.snap
index e761b93a799c..9c92c944d84f 100644
--- a/crates/biome_css_analyze/tests/plugin/useLowercaseColors.grit.snap
+++ b/crates/biome_css_analyze/tests/plugin/useLowercaseColors.grit.snap
@@ -1,6 +1,7 @@
---
source: crates/biome_css_analyze/tests/spec_tests.rs
expression: useLowercaseColors.grit
+snapshot_kind: text
---
# Input
```css
@@ -16,7 +17,7 @@ div {
```
useLowercaseColors.grit:3:12 plugin ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Prefer lowercase colors
+ i Prefer lowercase colors
1 │ div {
2 │ color: red;
diff --git a/crates/biome_css_analyze/tests/spec_tests.rs b/crates/biome_css_analyze/tests/spec_tests.rs
index 41f4d2d6e946..9b873185951f 100644
--- a/crates/biome_css_analyze/tests/spec_tests.rs
+++ b/crates/biome_css_analyze/tests/spec_tests.rs
@@ -4,7 +4,6 @@ use biome_analyze::{
use biome_css_parser::{parse_css, CssParserOptions};
use biome_css_syntax::{CssFileSource, CssLanguage};
use biome_diagnostics::advice::CodeSuggestionAdvice;
-use biome_diagnostics::{DiagnosticExt, Severity};
use biome_fs::OsFileSystem;
use biome_plugin_loader::AnalyzerGritPlugin;
use biome_rowan::AstNode;
@@ -146,8 +145,7 @@ pub(crate) fn analyze_and_snap(
}
}
- let error = diag.with_severity(Severity::Warning);
- diagnostics.push(diagnostic_to_string(file_name, input_code, error));
+ diagnostics.push(diagnostic_to_string(file_name, input_code, diag.into()));
return ControlFlow::Continue(());
}
diff --git a/crates/biome_css_analyze/tests/specs/a11y/useGenericFontNames/invalid.css.snap b/crates/biome_css_analyze/tests/specs/a11y/useGenericFontNames/invalid.css.snap
index e8761f203d4f..d69b8d5e7611 100644
--- a/crates/biome_css_analyze/tests/specs/a11y/useGenericFontNames/invalid.css.snap
+++ b/crates/biome_css_analyze/tests/specs/a11y/useGenericFontNames/invalid.css.snap
@@ -1,6 +1,7 @@
---
source: crates/biome_css_analyze/tests/spec_tests.rs
expression: invalid.css
+snapshot_kind: text
---
# Input
```css
@@ -17,7 +18,7 @@ a { font: 1em Lucida Grande, Arial, "sans-serif" }
```
invalid.css:1:18 lint/a11y/useGenericFontNames ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Generic font family missing.
+ × Generic font family missing.
> 1 │ a { font-family: Arial; }
│ ^^^^^
@@ -39,7 +40,7 @@ invalid.css:1:18 lint/a11y/useGenericFontNames ━━━━━━━━━━━
```
invalid.css:2:44 lint/a11y/useGenericFontNames ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Generic font family missing.
+ × Generic font family missing.
1 │ a { font-family: Arial; }
> 2 │ a { font-family: 'Arial', "Lucida Grande", Arial; }
@@ -62,7 +63,7 @@ invalid.css:2:44 lint/a11y/useGenericFontNames ━━━━━━━━━━━
```
invalid.css:3:18 lint/a11y/useGenericFontNames ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Generic font family missing.
+ × Generic font family missing.
1 │ a { font-family: Arial; }
2 │ a { font-family: 'Arial', "Lucida Grande", Arial; }
@@ -86,7 +87,7 @@ invalid.css:3:18 lint/a11y/useGenericFontNames ━━━━━━━━━━━
```
invalid.css:4:18 lint/a11y/useGenericFontNames ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Generic font family missing.
+ × Generic font family missing.
2 │ a { font-family: 'Arial', "Lucida Grande", Arial; }
3 │ a { fOnT-fAmIlY: ' Lucida Grande '; }
@@ -110,7 +111,7 @@ invalid.css:4:18 lint/a11y/useGenericFontNames ━━━━━━━━━━━
```
invalid.css:5:39 lint/a11y/useGenericFontNames ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Generic font family missing.
+ × Generic font family missing.
3 │ a { fOnT-fAmIlY: ' Lucida Grande '; }
4 │ a { font-family: Times; }
@@ -134,7 +135,7 @@ invalid.css:5:39 lint/a11y/useGenericFontNames ━━━━━━━━━━━
```
invalid.css:6:43 lint/a11y/useGenericFontNames ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Generic font family missing.
+ × Generic font family missing.
4 │ a { font-family: Times; }
5 │ a { FONT: italic 300 16px/30px Arial, " Arial"; }
@@ -157,7 +158,7 @@ invalid.css:6:43 lint/a11y/useGenericFontNames ━━━━━━━━━━━
```
invalid.css:7:37 lint/a11y/useGenericFontNames ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Generic font family missing.
+ × Generic font family missing.
5 │ a { FONT: italic 300 16px/30px Arial, " Arial"; }
6 │ a { font: normal 14px/32px -apple-system, BlinkMacSystemFont; }
diff --git a/crates/biome_css_analyze/tests/specs/correctness/noInvalidDirectionInLinearGradient/invalid.css.snap b/crates/biome_css_analyze/tests/specs/correctness/noInvalidDirectionInLinearGradient/invalid.css.snap
index cdaf1abae2a7..73d1b5edf861 100644
--- a/crates/biome_css_analyze/tests/specs/correctness/noInvalidDirectionInLinearGradient/invalid.css.snap
+++ b/crates/biome_css_analyze/tests/specs/correctness/noInvalidDirectionInLinearGradient/invalid.css.snap
@@ -1,6 +1,7 @@
---
source: crates/biome_css_analyze/tests/spec_tests.rs
expression: invalid.css
+snapshot_kind: text
---
# Input
```css
@@ -94,7 +95,7 @@ expression: invalid.css
```
invalid.css:2:30 lint/correctness/noInvalidDirectionInLinearGradient ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Unexpected nonstandard direction
+ × Unexpected nonstandard direction
1 │ .foo {
> 2 │ background: linear-gradient(bottom, #fff, #000);
@@ -112,7 +113,7 @@ invalid.css:2:30 lint/correctness/noInvalidDirectionInLinearGradient ━━━
```
invalid.css:5:30 lint/correctness/noInvalidDirectionInLinearGradient ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Unexpected nonstandard direction
+ × Unexpected nonstandard direction
3 │ }
4 │ .foo {
@@ -131,7 +132,7 @@ invalid.css:5:30 lint/correctness/noInvalidDirectionInLinearGradient ━━━
```
invalid.css:8:30 lint/correctness/noInvalidDirectionInLinearGradient ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Unexpected nonstandard direction
+ × Unexpected nonstandard direction
6 │ }
7 │ .foo {
@@ -150,7 +151,7 @@ invalid.css:8:30 lint/correctness/noInvalidDirectionInLinearGradient ━━━
```
invalid.css:11:30 lint/correctness/noInvalidDirectionInLinearGradient ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Unexpected nonstandard direction
+ × Unexpected nonstandard direction
9 │ }
10 │ .foo {
@@ -169,7 +170,7 @@ invalid.css:11:30 lint/correctness/noInvalidDirectionInLinearGradient ━━━
```
invalid.css:14:30 lint/correctness/noInvalidDirectionInLinearGradient ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Unexpected nonstandard direction
+ × Unexpected nonstandard direction
12 │ }
13 │ .foo {
@@ -188,7 +189,7 @@ invalid.css:14:30 lint/correctness/noInvalidDirectionInLinearGradient ━━━
```
invalid.css:17:30 lint/correctness/noInvalidDirectionInLinearGradient ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Unexpected nonstandard direction
+ × Unexpected nonstandard direction
15 │ }
16 │ .foo {
@@ -207,7 +208,7 @@ invalid.css:17:30 lint/correctness/noInvalidDirectionInLinearGradient ━━━
```
invalid.css:20:30 lint/correctness/noInvalidDirectionInLinearGradient ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Unexpected nonstandard direction
+ × Unexpected nonstandard direction
18 │ }
19 │ .foo {
@@ -226,7 +227,7 @@ invalid.css:20:30 lint/correctness/noInvalidDirectionInLinearGradient ━━━
```
invalid.css:23:30 lint/correctness/noInvalidDirectionInLinearGradient ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Unexpected nonstandard direction
+ × Unexpected nonstandard direction
21 │ }
22 │ .foo {
@@ -245,7 +246,7 @@ invalid.css:23:30 lint/correctness/noInvalidDirectionInLinearGradient ━━━
```
invalid.css:26:30 lint/correctness/noInvalidDirectionInLinearGradient ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Unexpected nonstandard direction
+ × Unexpected nonstandard direction
24 │ }
25 │ .foo {
@@ -264,7 +265,7 @@ invalid.css:26:30 lint/correctness/noInvalidDirectionInLinearGradient ━━━
```
invalid.css:29:30 lint/correctness/noInvalidDirectionInLinearGradient ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Unexpected nonstandard direction
+ × Unexpected nonstandard direction
27 │ }
28 │ .foo {
@@ -283,7 +284,7 @@ invalid.css:29:30 lint/correctness/noInvalidDirectionInLinearGradient ━━━
```
invalid.css:32:30 lint/correctness/noInvalidDirectionInLinearGradient ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Unexpected nonstandard direction
+ × Unexpected nonstandard direction
30 │ }
31 │ .foo {
@@ -302,7 +303,7 @@ invalid.css:32:30 lint/correctness/noInvalidDirectionInLinearGradient ━━━
```
invalid.css:35:30 lint/correctness/noInvalidDirectionInLinearGradient ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Unexpected nonstandard direction
+ × Unexpected nonstandard direction
33 │ }
34 │ .foo {
@@ -321,7 +322,7 @@ invalid.css:35:30 lint/correctness/noInvalidDirectionInLinearGradient ━━━
```
invalid.css:38:30 lint/correctness/noInvalidDirectionInLinearGradient ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Unexpected nonstandard direction
+ × Unexpected nonstandard direction
36 │ }
37 │ .foo {
@@ -340,7 +341,7 @@ invalid.css:38:30 lint/correctness/noInvalidDirectionInLinearGradient ━━━
```
invalid.css:41:38 lint/correctness/noInvalidDirectionInLinearGradient ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Unexpected nonstandard direction
+ × Unexpected nonstandard direction
39 │ }
40 │ .foo {
@@ -359,7 +360,7 @@ invalid.css:41:38 lint/correctness/noInvalidDirectionInLinearGradient ━━━
```
invalid.css:44:35 lint/correctness/noInvalidDirectionInLinearGradient ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Unexpected nonstandard direction
+ × Unexpected nonstandard direction
42 │ }
43 │ .foo {
@@ -378,7 +379,7 @@ invalid.css:44:35 lint/correctness/noInvalidDirectionInLinearGradient ━━━
```
invalid.css:47:33 lint/correctness/noInvalidDirectionInLinearGradient ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Unexpected nonstandard direction
+ × Unexpected nonstandard direction
45 │ }
46 │ .foo {
@@ -397,7 +398,7 @@ invalid.css:47:33 lint/correctness/noInvalidDirectionInLinearGradient ━━━
```
invalid.css:50:52 lint/correctness/noInvalidDirectionInLinearGradient ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Unexpected nonstandard direction
+ × Unexpected nonstandard direction
48 │ }
49 │ .foo {
@@ -416,7 +417,7 @@ invalid.css:50:52 lint/correctness/noInvalidDirectionInLinearGradient ━━━
```
invalid.css:53:49 lint/correctness/noInvalidDirectionInLinearGradient ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Unexpected nonstandard direction
+ × Unexpected nonstandard direction
51 │ }
52 │ .foo {
@@ -435,7 +436,7 @@ invalid.css:53:49 lint/correctness/noInvalidDirectionInLinearGradient ━━━
```
invalid.css:56:47 lint/correctness/noInvalidDirectionInLinearGradient ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Unexpected nonstandard direction
+ × Unexpected nonstandard direction
54 │ }
55 │ .foo {
@@ -454,7 +455,7 @@ invalid.css:56:47 lint/correctness/noInvalidDirectionInLinearGradient ━━━
```
invalid.css:59:38 lint/correctness/noInvalidDirectionInLinearGradient ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Unexpected nonstandard direction
+ × Unexpected nonstandard direction
57 │ }
58 │ .foo {
@@ -473,7 +474,7 @@ invalid.css:59:38 lint/correctness/noInvalidDirectionInLinearGradient ━━━
```
invalid.css:62:49 lint/correctness/noInvalidDirectionInLinearGradient ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Unexpected nonstandard direction
+ × Unexpected nonstandard direction
60 │ }
61 │ .foo {
@@ -492,7 +493,7 @@ invalid.css:62:49 lint/correctness/noInvalidDirectionInLinearGradient ━━━
```
invalid.css:66:33 lint/correctness/noInvalidDirectionInLinearGradient ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Unexpected nonstandard direction
+ × Unexpected nonstandard direction
64 │ }
65 │ .foo {
@@ -511,7 +512,7 @@ invalid.css:66:33 lint/correctness/noInvalidDirectionInLinearGradient ━━━
```
invalid.css:69:52 lint/correctness/noInvalidDirectionInLinearGradient ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Unexpected nonstandard direction
+ × Unexpected nonstandard direction
67 │ }
68 │ .foo {
@@ -530,7 +531,7 @@ invalid.css:69:52 lint/correctness/noInvalidDirectionInLinearGradient ━━━
```
invalid.css:73:49 lint/correctness/noInvalidDirectionInLinearGradient ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Unexpected nonstandard direction
+ × Unexpected nonstandard direction
71 │ }
72 │ .foo {
@@ -549,7 +550,7 @@ invalid.css:73:49 lint/correctness/noInvalidDirectionInLinearGradient ━━━
```
invalid.css:77:47 lint/correctness/noInvalidDirectionInLinearGradient ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Unexpected nonstandard direction
+ × Unexpected nonstandard direction
75 │ }
76 │ .foo {
@@ -568,7 +569,7 @@ invalid.css:77:47 lint/correctness/noInvalidDirectionInLinearGradient ━━━
```
invalid.css:81:48 lint/correctness/noInvalidDirectionInLinearGradient ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Unexpected nonstandard direction
+ × Unexpected nonstandard direction
79 │ }
80 │ .foo {
diff --git a/crates/biome_css_analyze/tests/specs/correctness/noInvalidGridAreas/invalid.css.snap b/crates/biome_css_analyze/tests/specs/correctness/noInvalidGridAreas/invalid.css.snap
index c438f9931320..f91251ba7da8 100644
--- a/crates/biome_css_analyze/tests/specs/correctness/noInvalidGridAreas/invalid.css.snap
+++ b/crates/biome_css_analyze/tests/specs/correctness/noInvalidGridAreas/invalid.css.snap
@@ -1,6 +1,7 @@
---
source: crates/biome_css_analyze/tests/spec_tests.rs
expression: invalid.css
+snapshot_kind: text
---
# Input
```css
@@ -39,7 +40,7 @@ a { grid-template-areas: "a a a"
```
invalid.css:1:26 lint/correctness/noInvalidGridAreas ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Empty grid areas are not allowed.
+ × Empty grid areas are not allowed.
> 1 │ a { grid-template-areas: "" }
│ ^^^
@@ -54,7 +55,7 @@ invalid.css:1:26 lint/correctness/noInvalidGridAreas ━━━━━━━━━
```
invalid.css:2:26 lint/correctness/noInvalidGridAreas ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Inconsistent cell count in grid areas are not allowed.
+ × Inconsistent cell count in grid areas are not allowed.
1 │ a { grid-template-areas: "" }
> 2 │ a { grid-template-areas: "a a"
@@ -70,7 +71,7 @@ invalid.css:2:26 lint/correctness/noInvalidGridAreas ━━━━━━━━━
```
invalid.css:4:33 lint/correctness/noInvalidGridAreas ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Empty grid areas are not allowed.
+ × Empty grid areas are not allowed.
2 │ a { grid-template-areas: "a a"
3 │ "b b b"; }
@@ -89,7 +90,7 @@ invalid.css:4:33 lint/correctness/noInvalidGridAreas ━━━━━━━━━
```
invalid.css:6:33 lint/correctness/noInvalidGridAreas ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Duplicate filled in rectangle are not allowed.
+ × Duplicate filled in rectangle are not allowed.
4 │ a { grid-template-areas: "b b b"
5 │ ""; }
@@ -108,7 +109,7 @@ invalid.css:6:33 lint/correctness/noInvalidGridAreas ━━━━━━━━━
```
invalid.css:11:33 lint/correctness/noInvalidGridAreas ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Duplicate filled in rectangle are not allowed.
+ × Duplicate filled in rectangle are not allowed.
9 │ "b b b"
10 │ "c c c"
@@ -127,7 +128,7 @@ invalid.css:11:33 lint/correctness/noInvalidGridAreas ━━━━━━━━
```
invalid.css:15:33 lint/correctness/noInvalidGridAreas ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Duplicate filled in rectangle are not allowed.
+ × Duplicate filled in rectangle are not allowed.
13 │ a { grid-template-areas: "a a a"
14 │ "b b b"; }
@@ -146,7 +147,7 @@ invalid.css:15:33 lint/correctness/noInvalidGridAreas ━━━━━━━━
```
invalid.css:17:35 lint/correctness/noInvalidGridAreas ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Duplicate filled in rectangle are not allowed.
+ × Duplicate filled in rectangle are not allowed.
15 │ a { grid-template-areas: "a a a"
16 │ "a . a"; }
@@ -165,7 +166,7 @@ invalid.css:17:35 lint/correctness/noInvalidGridAreas ━━━━━━━━
```
invalid.css:21:35 lint/correctness/noInvalidGridAreas ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Inconsistent cell count in grid areas are not allowed.
+ × Inconsistent cell count in grid areas are not allowed.
19 │ "q q , q"; }
20 │ a { grid-template-areas: "s s t t"
@@ -184,7 +185,7 @@ invalid.css:21:35 lint/correctness/noInvalidGridAreas ━━━━━━━━
```
invalid.css:24:33 lint/correctness/noInvalidGridAreas ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Duplicate filled in rectangle are not allowed.
+ × Duplicate filled in rectangle are not allowed.
22 │ "u v v"
23 │ "u u v v"; }
@@ -203,7 +204,7 @@ invalid.css:24:33 lint/correctness/noInvalidGridAreas ━━━━━━━━
```
invalid.css:27:33 lint/correctness/noInvalidGridAreas ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Duplicate filled in rectangle are not allowed.
+ × Duplicate filled in rectangle are not allowed.
25 │ "b z a"; }
26 │ a { grid-template-areas: "a a a"
diff --git a/crates/biome_css_analyze/tests/specs/correctness/noInvalidPositionAtImportRule/invalid.css.snap b/crates/biome_css_analyze/tests/specs/correctness/noInvalidPositionAtImportRule/invalid.css.snap
index be5b162f21bb..700ae53c9fb4 100644
--- a/crates/biome_css_analyze/tests/specs/correctness/noInvalidPositionAtImportRule/invalid.css.snap
+++ b/crates/biome_css_analyze/tests/specs/correctness/noInvalidPositionAtImportRule/invalid.css.snap
@@ -1,6 +1,7 @@
---
source: crates/biome_css_analyze/tests/spec_tests.rs
expression: invalid.css
+snapshot_kind: text
---
# Input
```css
@@ -14,7 +15,7 @@ a {}
```
invalid.css:2:2 lint/correctness/noInvalidPositionAtImportRule ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! This @import is in the wrong position.
+ × This @import is in the wrong position.
1 │ a {}
> 2 │ @import 'foo.css';
@@ -32,7 +33,7 @@ invalid.css:2:2 lint/correctness/noInvalidPositionAtImportRule ━━━━━
```
invalid.css:3:2 lint/correctness/noInvalidPositionAtImportRule ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! This @import is in the wrong position.
+ × This @import is in the wrong position.
1 │ a {}
2 │ @import 'foo.css';
diff --git a/crates/biome_css_analyze/tests/specs/correctness/noInvalidPositionAtImportRule/invalidBetweenImport.css.snap b/crates/biome_css_analyze/tests/specs/correctness/noInvalidPositionAtImportRule/invalidBetweenImport.css.snap
index 5c9fa97586c1..358caf4473f3 100644
--- a/crates/biome_css_analyze/tests/specs/correctness/noInvalidPositionAtImportRule/invalidBetweenImport.css.snap
+++ b/crates/biome_css_analyze/tests/specs/correctness/noInvalidPositionAtImportRule/invalidBetweenImport.css.snap
@@ -1,6 +1,7 @@
---
source: crates/biome_css_analyze/tests/spec_tests.rs
expression: invalidBetweenImport.css
+snapshot_kind: text
---
# Input
```css
@@ -18,7 +19,7 @@ a {}
```
invalidBetweenImport.css:3:2 lint/correctness/noInvalidPositionAtImportRule ━━━━━━━━━━━━━━━━━━━━━━━━
- ! This @import is in the wrong position.
+ × This @import is in the wrong position.
1 │ @import 'foo.css';
2 │ a {}
@@ -37,7 +38,7 @@ invalidBetweenImport.css:3:2 lint/correctness/noInvalidPositionAtImportRule ━
```
invalidBetweenImport.css:4:2 lint/correctness/noInvalidPositionAtImportRule ━━━━━━━━━━━━━━━━━━━━━━━━
- ! This @import is in the wrong position.
+ × This @import is in the wrong position.
2 │ a {}
3 │ @import 'bar1.css';
@@ -56,7 +57,7 @@ invalidBetweenImport.css:4:2 lint/correctness/noInvalidPositionAtImportRule ━
```
invalidBetweenImport.css:6:2 lint/correctness/noInvalidPositionAtImportRule ━━━━━━━━━━━━━━━━━━━━━━━━
- ! This @import is in the wrong position.
+ × This @import is in the wrong position.
4 │ @import 'bar2.css';
5 │ a {}
@@ -75,7 +76,7 @@ invalidBetweenImport.css:6:2 lint/correctness/noInvalidPositionAtImportRule ━
```
invalidBetweenImport.css:7:2 lint/correctness/noInvalidPositionAtImportRule ━━━━━━━━━━━━━━━━━━━━━━━━
- ! This @import is in the wrong position.
+ × This @import is in the wrong position.
5 │ a {}
6 │ @import 'bar3.css';
diff --git a/crates/biome_css_analyze/tests/specs/correctness/noInvalidPositionAtImportRule/invalidMediaImport.css.snap b/crates/biome_css_analyze/tests/specs/correctness/noInvalidPositionAtImportRule/invalidMediaImport.css.snap
index ba3533f93b23..0148771d6aed 100644
--- a/crates/biome_css_analyze/tests/specs/correctness/noInvalidPositionAtImportRule/invalidMediaImport.css.snap
+++ b/crates/biome_css_analyze/tests/specs/correctness/noInvalidPositionAtImportRule/invalidMediaImport.css.snap
@@ -1,6 +1,7 @@
---
source: crates/biome_css_analyze/tests/spec_tests.rs
expression: invalidMediaImport.css
+snapshot_kind: text
---
# Input
```css
@@ -13,7 +14,7 @@ expression: invalidMediaImport.css
```
invalidMediaImport.css:2:2 lint/correctness/noInvalidPositionAtImportRule ━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! This @import is in the wrong position.
+ × This @import is in the wrong position.
1 │ @media print {}
> 2 │ @import url('foo.css');
diff --git a/crates/biome_css_analyze/tests/specs/correctness/noInvalidPositionAtImportRule/invalidMediaImportUpperCase.css.snap b/crates/biome_css_analyze/tests/specs/correctness/noInvalidPositionAtImportRule/invalidMediaImportUpperCase.css.snap
index 7f10260094f9..9d9cf1155ce2 100644
--- a/crates/biome_css_analyze/tests/specs/correctness/noInvalidPositionAtImportRule/invalidMediaImportUpperCase.css.snap
+++ b/crates/biome_css_analyze/tests/specs/correctness/noInvalidPositionAtImportRule/invalidMediaImportUpperCase.css.snap
@@ -1,6 +1,7 @@
---
source: crates/biome_css_analyze/tests/spec_tests.rs
expression: invalidMediaImportUpperCase.css
+snapshot_kind: text
---
# Input
```css
@@ -13,7 +14,7 @@ expression: invalidMediaImportUpperCase.css
```
invalidMediaImportUpperCase.css:2:2 lint/correctness/noInvalidPositionAtImportRule ━━━━━━━━━━━━━━━━━
- ! This @import is in the wrong position.
+ × This @import is in the wrong position.
1 │ @media print {}
> 2 │ @imPort URl('foo.css');
diff --git a/crates/biome_css_analyze/tests/specs/correctness/noUnknownFunction/invalid.css.snap b/crates/biome_css_analyze/tests/specs/correctness/noUnknownFunction/invalid.css.snap
index 77f09cf8dbbf..6603d3d3549c 100644
--- a/crates/biome_css_analyze/tests/specs/correctness/noUnknownFunction/invalid.css.snap
+++ b/crates/biome_css_analyze/tests/specs/correctness/noUnknownFunction/invalid.css.snap
@@ -1,6 +1,7 @@
---
source: crates/biome_css_analyze/tests/spec_tests.rs
expression: invalid.css
+snapshot_kind: text
---
# Input
```css
@@ -13,7 +14,7 @@ a { width: calc(10% * unknown(1)); }
```
invalid.css:1:16 lint/correctness/noUnknownFunction ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Unexpected unknown function: unknown
+ × Unexpected unknown function: unknown
> 1 │ a { transform: unknown(4); }
│ ^^^^^^^
@@ -30,7 +31,7 @@ invalid.css:1:16 lint/correctness/noUnknownFunction ━━━━━━━━━
```
invalid.css:2:16 lint/correctness/noUnknownFunction ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Unexpected unknown function: UNKNOWN
+ × Unexpected unknown function: UNKNOWN
1 │ a { transform: unknown(4); }
> 2 │ a { transform: UNKNOWN(4); }
@@ -47,7 +48,7 @@ invalid.css:2:16 lint/correctness/noUnknownFunction ━━━━━━━━━
```
invalid.css:3:23 lint/correctness/noUnknownFunction ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Unexpected unknown function: unknown
+ × Unexpected unknown function: unknown
1 │ a { transform: unknown(4); }
2 │ a { transform: UNKNOWN(4); }
diff --git a/crates/biome_css_analyze/tests/specs/correctness/noUnknownMediaFeatureName/invalid.css.snap b/crates/biome_css_analyze/tests/specs/correctness/noUnknownMediaFeatureName/invalid.css.snap
index 74ab858b6747..7c9bd8871d68 100644
--- a/crates/biome_css_analyze/tests/specs/correctness/noUnknownMediaFeatureName/invalid.css.snap
+++ b/crates/biome_css_analyze/tests/specs/correctness/noUnknownMediaFeatureName/invalid.css.snap
@@ -1,6 +1,7 @@
---
source: crates/biome_css_analyze/tests/spec_tests.rs
expression: invalid.css
+snapshot_kind: text
---
# Input
```css
@@ -28,7 +29,7 @@ expression: invalid.css
```
invalid.css:1:8 lint/correctness/noUnknownMediaFeatureName ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Don't use unknown media feature names.
+ × Don't use unknown media feature names.
> 1 │ @media screen and (unknown) {
│ ^^^^^^^^^^^^^^^^^^^^
@@ -45,7 +46,7 @@ invalid.css:1:8 lint/correctness/noUnknownMediaFeatureName ━━━━━━━
```
invalid.css:4:8 lint/correctness/noUnknownMediaFeatureName ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Don't use unknown media feature names.
+ × Don't use unknown media feature names.
2 │ }
3 │
@@ -64,7 +65,7 @@ invalid.css:4:8 lint/correctness/noUnknownMediaFeatureName ━━━━━━━
```
invalid.css:7:8 lint/correctness/noUnknownMediaFeatureName ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Don't use unknown media feature names.
+ × Don't use unknown media feature names.
5 │ }
6 │
@@ -83,7 +84,7 @@ invalid.css:7:8 lint/correctness/noUnknownMediaFeatureName ━━━━━━━
```
invalid.css:10:8 lint/correctness/noUnknownMediaFeatureName ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Don't use unknown media feature names.
+ × Don't use unknown media feature names.
8 │ }
9 │
@@ -102,7 +103,7 @@ invalid.css:10:8 lint/correctness/noUnknownMediaFeatureName ━━━━━━
```
invalid.css:13:8 lint/correctness/noUnknownMediaFeatureName ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Don't use unknown media feature names.
+ × Don't use unknown media feature names.
11 │ }
12 │
@@ -121,7 +122,7 @@ invalid.css:13:8 lint/correctness/noUnknownMediaFeatureName ━━━━━━
```
invalid.css:16:8 lint/correctness/noUnknownMediaFeatureName ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Don't use unknown media feature names.
+ × Don't use unknown media feature names.
14 │ }
15 │
diff --git a/crates/biome_css_analyze/tests/specs/correctness/noUnknownProperty/invalid.css.snap b/crates/biome_css_analyze/tests/specs/correctness/noUnknownProperty/invalid.css.snap
index da1be6eab6e0..3c05c0510026 100644
--- a/crates/biome_css_analyze/tests/specs/correctness/noUnknownProperty/invalid.css.snap
+++ b/crates/biome_css_analyze/tests/specs/correctness/noUnknownProperty/invalid.css.snap
@@ -1,6 +1,7 @@
---
source: crates/biome_css_analyze/tests/spec_tests.rs
expression: invalid.css
+snapshot_kind: text
---
# Input
```css
@@ -18,7 +19,7 @@ a {
```
invalid.css:2:3 lint/correctness/noUnknownProperty ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Unknown property is not allowed.
+ × Unknown property is not allowed.
1 │ a {
> 2 │ colr: blue;
@@ -36,7 +37,7 @@ invalid.css:2:3 lint/correctness/noUnknownProperty ━━━━━━━━━
```
invalid.css:6:3 lint/correctness/noUnknownProperty ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Unknown property is not allowed.
+ × Unknown property is not allowed.
5 │ a {
> 6 │ my-property: 1;
diff --git a/crates/biome_css_analyze/tests/specs/correctness/noUnknownUnit/invalid.css.snap b/crates/biome_css_analyze/tests/specs/correctness/noUnknownUnit/invalid.css.snap
index 123c449c2753..7d6ae4b40c99 100644
--- a/crates/biome_css_analyze/tests/specs/correctness/noUnknownUnit/invalid.css.snap
+++ b/crates/biome_css_analyze/tests/specs/correctness/noUnknownUnit/invalid.css.snap
@@ -1,6 +1,7 @@
---
source: crates/biome_css_analyze/tests/spec_tests.rs
expression: invalid.css
+snapshot_kind: text
---
# Input
```css
@@ -38,7 +39,7 @@ a { unicode-range: U+0100-024F; }
```
invalid.css:1:18 lint/correctness/noUnknownUnit ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Unexpected unknown unit: pp
+ × Unexpected unknown unit: pp
> 1 │ a { font-size: 13pp; }
│ ^^
@@ -60,7 +61,7 @@ invalid.css:1:18 lint/correctness/noUnknownUnit ━━━━━━━━━━
```
invalid.css:2:15 lint/correctness/noUnknownUnit ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Unexpected unknown unit: xpx
+ × Unexpected unknown unit: xpx
1 │ a { font-size: 13pp; }
> 2 │ a { margin: 13xpx; }
@@ -83,7 +84,7 @@ invalid.css:2:15 lint/correctness/noUnknownUnit ━━━━━━━━━━
```
invalid.css:3:18 lint/correctness/noUnknownUnit ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Unexpected unknown unit: remm
+ × Unexpected unknown unit: remm
1 │ a { font-size: 13pp; }
2 │ a { margin: 13xpx; }
@@ -107,7 +108,7 @@ invalid.css:3:18 lint/correctness/noUnknownUnit ━━━━━━━━━━
```
invalid.css:4:19 lint/correctness/noUnknownUnit ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Unexpected unknown unit: remm
+ × Unexpected unknown unit: remm
2 │ a { margin: 13xpx; }
3 │ a { font-size: .5remm; }
@@ -131,7 +132,7 @@ invalid.css:4:19 lint/correctness/noUnknownUnit ━━━━━━━━━━
```
invalid.css:5:19 lint/correctness/noUnknownUnit ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Unexpected unknown unit: pix
+ × Unexpected unknown unit: pix
3 │ a { font-size: .5remm; }
4 │ a { font-size: 0.5remm; }
@@ -155,7 +156,7 @@ invalid.css:5:19 lint/correctness/noUnknownUnit ━━━━━━━━━━
```
invalid.css:6:19 lint/correctness/noUnknownUnit ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Unexpected unknown unit: pix
+ × Unexpected unknown unit: pix
4 │ a { font-size: 0.5remm; }
5 │ a { color: rgb(255pix, 0, 51); }
@@ -179,7 +180,7 @@ invalid.css:6:19 lint/correctness/noUnknownUnit ━━━━━━━━━━
```
invalid.css:7:20 lint/correctness/noUnknownUnit ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Unexpected unknown unit: pix
+ × Unexpected unknown unit: pix
5 │ a { color: rgb(255pix, 0, 51); }
6 │ a { color: hsl(255pix, 0, 51); }
@@ -203,7 +204,7 @@ invalid.css:7:20 lint/correctness/noUnknownUnit ━━━━━━━━━━
```
invalid.css:8:20 lint/correctness/noUnknownUnit ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Unexpected unknown unit: pix
+ × Unexpected unknown unit: pix
6 │ a { color: hsl(255pix, 0, 51); }
7 │ a { color: rgba(255pix, 0, 51, 1); }
@@ -227,7 +228,7 @@ invalid.css:8:20 lint/correctness/noUnknownUnit ━━━━━━━━━━
```
invalid.css:9:20 lint/correctness/noUnknownUnit ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Unexpected unknown unit: pix
+ × Unexpected unknown unit: pix
7 │ a { color: rgba(255pix, 0, 51, 1); }
8 │ a { color: hsla(255pix, 0, 51, 1); }
@@ -251,7 +252,7 @@ invalid.css:9:20 lint/correctness/noUnknownUnit ━━━━━━━━━━
```
invalid.css:10:20 lint/correctness/noUnknownUnit ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Unexpected unknown unit: pix
+ × Unexpected unknown unit: pix
8 │ a { color: hsla(255pix, 0, 51, 1); }
9 │ a { margin: calc(13pix + 10px); }
@@ -275,7 +276,7 @@ invalid.css:10:20 lint/correctness/noUnknownUnit ━━━━━━━━━━
```
invalid.css:11:22 lint/correctness/noUnknownUnit ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Unexpected unknown unit: pix
+ × Unexpected unknown unit: pix
9 │ a { margin: calc(13pix + 10px); }
10 │ a { margin: calc(10pix*2); }
@@ -299,7 +300,7 @@ invalid.css:11:22 lint/correctness/noUnknownUnit ━━━━━━━━━━
```
invalid.css:12:33 lint/correctness/noUnknownUnit ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Unexpected unknown unit: pix
+ × Unexpected unknown unit: pix
10 │ a { margin: calc(10pix*2); }
11 │ a { margin: calc(2*10pix); }
@@ -323,7 +324,7 @@ invalid.css:12:33 lint/correctness/noUnknownUnit ━━━━━━━━━━
```
invalid.css:13:28 lint/correctness/noUnknownUnit ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Unexpected unknown unit: pix
+ × Unexpected unknown unit: pix
11 │ a { margin: calc(2*10pix); }
12 │ a { -webkit-transition-delay: 10pix; }
@@ -347,7 +348,7 @@ invalid.css:13:28 lint/correctness/noUnknownUnit ━━━━━━━━━━
```
invalid.css:14:29 lint/correctness/noUnknownUnit ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Unexpected unknown unit: pix
+ × Unexpected unknown unit: pix
12 │ a { -webkit-transition-delay: 10pix; }
13 │ a { margin: -webkit-calc(13pix + 10px); }
@@ -371,7 +372,7 @@ invalid.css:14:29 lint/correctness/noUnknownUnit ━━━━━━━━━━
```
invalid.css:15:20 lint/correctness/noUnknownUnit ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Unexpected unknown unit: pix
+ × Unexpected unknown unit: pix
13 │ a { margin: -webkit-calc(13pix + 10px); }
14 │ a { margin: some-function(13pix + 10px); }
@@ -395,7 +396,7 @@ invalid.css:15:20 lint/correctness/noUnknownUnit ━━━━━━━━━━
```
invalid.css:16:22 lint/correctness/noUnknownUnit ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Unexpected unknown unit: pix
+ × Unexpected unknown unit: pix
14 │ a { margin: some-function(13pix + 10px); }
15 │ root { --margin: 10pix; }
@@ -419,7 +420,7 @@ invalid.css:16:22 lint/correctness/noUnknownUnit ━━━━━━━━━━
```
invalid.css:17:47 lint/correctness/noUnknownUnit ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Unexpected unknown unit: PIX
+ × Unexpected unknown unit: PIX
15 │ root { --margin: 10pix; }
16 │ @media (min-width: 13pix) {}
@@ -443,7 +444,7 @@ invalid.css:17:47 lint/correctness/noUnknownUnit ━━━━━━━━━━
```
invalid.css:18:22 lint/correctness/noUnknownUnit ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Unexpected unknown unit: REMS
+ × Unexpected unknown unit: REMS
16 │ @media (min-width: 13pix) {}
17 │ @media (min-width: 10px)\n and (max-width: 20PIX) {}
@@ -467,7 +468,7 @@ invalid.css:18:22 lint/correctness/noUnknownUnit ━━━━━━━━━━
```
invalid.css:19:15 lint/correctness/noUnknownUnit ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Unexpected unknown unit: pz
+ × Unexpected unknown unit: pz
17 │ @media (min-width: 10px)\n and (max-width: 20PIX) {}
18 │ @media (width < 10.01REMS) {}
@@ -491,7 +492,7 @@ invalid.css:19:15 lint/correctness/noUnknownUnit ━━━━━━━━━━
```
invalid.css:20:14 lint/correctness/noUnknownUnit ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Unexpected unknown unit: r9
+ × Unexpected unknown unit: r9
18 │ @media (width < 10.01REMS) {}
19 │ a { width: 1e4pz; }
@@ -515,7 +516,7 @@ invalid.css:20:14 lint/correctness/noUnknownUnit ━━━━━━━━━━
```
invalid.css:21:15 lint/correctness/noUnknownUnit ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Unexpected unknown unit: x
+ × Unexpected unknown unit: x
19 │ a { width: 1e4pz; }
20 │ a { flex: 0 9r9 auto; }
@@ -539,7 +540,7 @@ invalid.css:21:15 lint/correctness/noUnknownUnit ━━━━━━━━━━
```
invalid.css:22:44 lint/correctness/noUnknownUnit ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Unexpected unknown unit: x
+ × Unexpected unknown unit: x
20 │ a { flex: 0 9r9 auto; }
21 │ a { width: 400x; }
@@ -563,7 +564,7 @@ invalid.css:22:44 lint/correctness/noUnknownUnit ━━━━━━━━━━
```
invalid.css:23:60 lint/correctness/noUnknownUnit ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Unexpected unknown unit: x
+ × Unexpected unknown unit: x
21 │ a { width: 400x; }
22 │ @media (resolution: 2x) and (min-width: 200x) {}
@@ -587,7 +588,7 @@ invalid.css:23:60 lint/correctness/noUnknownUnit ━━━━━━━━━━
```
invalid.css:24:66 lint/correctness/noUnknownUnit ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Unexpected unknown unit: x
+ × Unexpected unknown unit: x
22 │ @media (resolution: 2x) and (min-width: 200x) {}
23 │ @media ( resolution: /* comment */ 2x ) and (min-width: 200x) {}
@@ -611,7 +612,7 @@ invalid.css:24:66 lint/correctness/noUnknownUnit ━━━━━━━━━━
```
invalid.css:25:80 lint/correctness/noUnknownUnit ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Unexpected unknown unit: x
+ × Unexpected unknown unit: x
23 │ @media ( resolution: /* comment */ 2x ) and (min-width: 200x) {}
24 │ a { background: image-set('img1x.png' 1x, 'img2x.png' 2x) left 20x / 15% 60% repeat-x; }
@@ -635,7 +636,7 @@ invalid.css:25:80 lint/correctness/noUnknownUnit ━━━━━━━━━━
```
invalid.css:26:46 lint/correctness/noUnknownUnit ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Unexpected unknown unit: pix
+ × Unexpected unknown unit: pix
24 │ a { background: image-set('img1x.png' 1x, 'img2x.png' 2x) left 20x / 15% 60% repeat-x; }
25 │ a { background: /* comment */ image-set('img1x.png' 1x, 'img2x.png' 2x) left 20x / 15% 60% repeat-x; }
diff --git a/crates/biome_css_analyze/tests/specs/correctness/noUnmatchableAnbSelector/invalid.css.snap b/crates/biome_css_analyze/tests/specs/correctness/noUnmatchableAnbSelector/invalid.css.snap
index 80881ffccaba..c4473ca5f992 100644
--- a/crates/biome_css_analyze/tests/specs/correctness/noUnmatchableAnbSelector/invalid.css.snap
+++ b/crates/biome_css_analyze/tests/specs/correctness/noUnmatchableAnbSelector/invalid.css.snap
@@ -1,6 +1,7 @@
---
source: crates/biome_css_analyze/tests/spec_tests.rs
expression: invalid.css
+snapshot_kind: text
---
# Input
```css
@@ -25,7 +26,7 @@ a:nth-last-child(0),a:nth-last-child(n+5) ~ li {}
```
invalid.css:1:13 lint/correctness/noUnmatchableAnbSelector ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! This selector will never match any elements.
+ × This selector will never match any elements.
> 1 │ a:nth-child(0) {}
│ ^
@@ -42,7 +43,7 @@ invalid.css:1:13 lint/correctness/noUnmatchableAnbSelector ━━━━━━━
```
invalid.css:2:13 lint/correctness/noUnmatchableAnbSelector ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! This selector will never match any elements.
+ × This selector will never match any elements.
1 │ a:nth-child(0) {}
> 2 │ a:nth-child(0n) {}
@@ -60,7 +61,7 @@ invalid.css:2:13 lint/correctness/noUnmatchableAnbSelector ━━━━━━━
```
invalid.css:3:13 lint/correctness/noUnmatchableAnbSelector ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! This selector will never match any elements.
+ × This selector will never match any elements.
1 │ a:nth-child(0) {}
2 │ a:nth-child(0n) {}
@@ -79,7 +80,7 @@ invalid.css:3:13 lint/correctness/noUnmatchableAnbSelector ━━━━━━━
```
invalid.css:4:13 lint/correctness/noUnmatchableAnbSelector ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! This selector will never match any elements.
+ × This selector will never match any elements.
2 │ a:nth-child(0n) {}
3 │ a:nth-child(+0n) {}
@@ -98,7 +99,7 @@ invalid.css:4:13 lint/correctness/noUnmatchableAnbSelector ━━━━━━━
```
invalid.css:5:13 lint/correctness/noUnmatchableAnbSelector ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! This selector will never match any elements.
+ × This selector will never match any elements.
3 │ a:nth-child(+0n) {}
4 │ a:nth-child(-0n) {}
@@ -117,7 +118,7 @@ invalid.css:5:13 lint/correctness/noUnmatchableAnbSelector ━━━━━━━
```
invalid.css:6:13 lint/correctness/noUnmatchableAnbSelector ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! This selector will never match any elements.
+ × This selector will never match any elements.
4 │ a:nth-child(-0n) {}
5 │ a:nth-child(0n+0) {}
@@ -136,7 +137,7 @@ invalid.css:6:13 lint/correctness/noUnmatchableAnbSelector ━━━━━━━
```
invalid.css:7:13 lint/correctness/noUnmatchableAnbSelector ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! This selector will never match any elements.
+ × This selector will never match any elements.
5 │ a:nth-child(0n+0) {}
6 │ a:nth-child(0n-0) {}
@@ -155,7 +156,7 @@ invalid.css:7:13 lint/correctness/noUnmatchableAnbSelector ━━━━━━━
```
invalid.css:8:13 lint/correctness/noUnmatchableAnbSelector ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! This selector will never match any elements.
+ × This selector will never match any elements.
6 │ a:nth-child(0n-0) {}
7 │ a:nth-child(-0n-0) {}
@@ -174,7 +175,7 @@ invalid.css:8:13 lint/correctness/noUnmatchableAnbSelector ━━━━━━━
```
invalid.css:9:13 lint/correctness/noUnmatchableAnbSelector ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! This selector will never match any elements.
+ × This selector will never match any elements.
7 │ a:nth-child(-0n-0) {}
8 │ a:nth-child(0 of a) {}
@@ -193,7 +194,7 @@ invalid.css:9:13 lint/correctness/noUnmatchableAnbSelector ━━━━━━━
```
invalid.css:10:18 lint/correctness/noUnmatchableAnbSelector ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! This selector will never match any elements.
+ × This selector will never match any elements.
8 │ a:nth-child(0 of a) {}
9 │ a:nth-child(0), a:nth-child(1) {}
@@ -212,7 +213,7 @@ invalid.css:10:18 lint/correctness/noUnmatchableAnbSelector ━━━━━━
```
invalid.css:11:15 lint/correctness/noUnmatchableAnbSelector ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! This selector will never match any elements.
+ × This selector will never match any elements.
9 │ a:nth-child(0), a:nth-child(1) {}
10 │ a:nth-last-child(0) {}
@@ -231,7 +232,7 @@ invalid.css:11:15 lint/correctness/noUnmatchableAnbSelector ━━━━━━
```
invalid.css:12:20 lint/correctness/noUnmatchableAnbSelector ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! This selector will never match any elements.
+ × This selector will never match any elements.
10 │ a:nth-last-child(0) {}
11 │ a:nth-of-type(0) {}
@@ -250,7 +251,7 @@ invalid.css:12:20 lint/correctness/noUnmatchableAnbSelector ━━━━━━
```
invalid.css:13:13 lint/correctness/noUnmatchableAnbSelector ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! This selector will never match any elements.
+ × This selector will never match any elements.
11 │ a:nth-of-type(0) {}
12 │ a:nth-last-of-type(0) {}
@@ -269,7 +270,7 @@ invalid.css:13:13 lint/correctness/noUnmatchableAnbSelector ━━━━━━
```
invalid.css:14:18 lint/correctness/noUnmatchableAnbSelector ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! This selector will never match any elements.
+ × This selector will never match any elements.
12 │ a:nth-last-of-type(0) {}
13 │ a:nth-child(0n):nth-child(-n+5) {}
diff --git a/crates/biome_css_analyze/tests/specs/nursery/noDescendingSpecificity/complex_selector.invalid.css.snap b/crates/biome_css_analyze/tests/specs/nursery/noDescendingSpecificity/complex_selector.invalid.css.snap
index e860dea23937..cb3ee881c295 100644
--- a/crates/biome_css_analyze/tests/specs/nursery/noDescendingSpecificity/complex_selector.invalid.css.snap
+++ b/crates/biome_css_analyze/tests/specs/nursery/noDescendingSpecificity/complex_selector.invalid.css.snap
@@ -1,6 +1,7 @@
---
source: crates/biome_css_analyze/tests/spec_tests.rs
expression: complex_selector.invalid.css
+snapshot_kind: text
---
# Input
```css
@@ -18,7 +19,7 @@ a {
```
complex_selector.invalid.css:5:1 lint/nursery/noDescendingSpecificity ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Descending specificity selector found. This selector specificity is (0, 0, 1)
+ × Descending specificity selector found. This selector specificity is (0, 0, 1)
3 │ }
4 │
diff --git a/crates/biome_css_analyze/tests/specs/nursery/noDescendingSpecificity/function_pseudo_selector.invalid.css.snap b/crates/biome_css_analyze/tests/specs/nursery/noDescendingSpecificity/function_pseudo_selector.invalid.css.snap
index 03b6d35bb478..b72f4a596390 100644
--- a/crates/biome_css_analyze/tests/specs/nursery/noDescendingSpecificity/function_pseudo_selector.invalid.css.snap
+++ b/crates/biome_css_analyze/tests/specs/nursery/noDescendingSpecificity/function_pseudo_selector.invalid.css.snap
@@ -1,6 +1,7 @@
---
source: crates/biome_css_analyze/tests/spec_tests.rs
expression: function_pseudo_selector.invalid.css
+snapshot_kind: text
---
# Input
```css
@@ -25,7 +26,7 @@ expression: function_pseudo_selector.invalid.css
```
function_pseudo_selector.invalid.css:5:1 lint/nursery/noDescendingSpecificity ━━━━━━━━━━━━━━━━━━━━━━
- ! Descending specificity selector found. This selector specificity is (0, 0, 2)
+ × Descending specificity selector found. This selector specificity is (0, 0, 2)
3 │ }
4 │
@@ -49,7 +50,7 @@ function_pseudo_selector.invalid.css:5:1 lint/nursery/noDescendingSpecificity
```
function_pseudo_selector.invalid.css:13:1 lint/nursery/noDescendingSpecificity ━━━━━━━━━━━━━━━━━━━━━
- ! Descending specificity selector found. This selector specificity is (0, 0, 1)
+ × Descending specificity selector found. This selector specificity is (0, 0, 1)
11 │ }
12 │
diff --git a/crates/biome_css_analyze/tests/specs/nursery/noDescendingSpecificity/nested.invalid.css.snap b/crates/biome_css_analyze/tests/specs/nursery/noDescendingSpecificity/nested.invalid.css.snap
index 8cadc52ec585..bf49e7ba52be 100644
--- a/crates/biome_css_analyze/tests/specs/nursery/noDescendingSpecificity/nested.invalid.css.snap
+++ b/crates/biome_css_analyze/tests/specs/nursery/noDescendingSpecificity/nested.invalid.css.snap
@@ -1,6 +1,7 @@
---
source: crates/biome_css_analyze/tests/spec_tests.rs
expression: nested.invalid.css
+snapshot_kind: text
---
# Input
```css
@@ -19,7 +20,7 @@ b {
```
nested.invalid.css:7:1 lint/nursery/noDescendingSpecificity ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Descending specificity selector found. This selector specificity is (0, 0, 1)
+ × Descending specificity selector found. This selector specificity is (0, 0, 1)
5 │ }
6 │
diff --git a/crates/biome_css_analyze/tests/specs/nursery/noDescendingSpecificity/simple_pseudo_selector.invalid.css.snap b/crates/biome_css_analyze/tests/specs/nursery/noDescendingSpecificity/simple_pseudo_selector.invalid.css.snap
index d33be5459b12..aae3ec78b731 100644
--- a/crates/biome_css_analyze/tests/specs/nursery/noDescendingSpecificity/simple_pseudo_selector.invalid.css.snap
+++ b/crates/biome_css_analyze/tests/specs/nursery/noDescendingSpecificity/simple_pseudo_selector.invalid.css.snap
@@ -1,6 +1,7 @@
---
source: crates/biome_css_analyze/tests/spec_tests.rs
expression: simple_pseudo_selector.invalid.css
+snapshot_kind: text
---
# Input
```css
@@ -18,7 +19,7 @@ a #b {
```
simple_pseudo_selector.invalid.css:5:1 lint/nursery/noDescendingSpecificity ━━━━━━━━━━━━━━━━━━━━━━━━
- ! Descending specificity selector found. This selector specificity is (1, 0, 1)
+ × Descending specificity selector found. This selector specificity is (1, 0, 1)
3 │ }
4 │
diff --git a/crates/biome_css_analyze/tests/specs/nursery/noDuplicateCustomProperties/invalid.css.snap b/crates/biome_css_analyze/tests/specs/nursery/noDuplicateCustomProperties/invalid.css.snap
index b1ea1dbd07b9..5208ec979ac1 100644
--- a/crates/biome_css_analyze/tests/specs/nursery/noDuplicateCustomProperties/invalid.css.snap
+++ b/crates/biome_css_analyze/tests/specs/nursery/noDuplicateCustomProperties/invalid.css.snap
@@ -1,6 +1,7 @@
---
source: crates/biome_css_analyze/tests/spec_tests.rs
expression: invalid.css
+snapshot_kind: text
---
# Input
```css
@@ -19,7 +20,7 @@ a { --custom-property: pink; @media { --custom-property: orange; .foo { --custom
```
invalid.css:1:27 lint/nursery/noDuplicateCustomProperties ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Duplicate custom properties can lead to unexpected behavior and may override previous declarations unintentionally.
+ × Duplicate custom properties can lead to unexpected behavior and may override previous declarations unintentionally.
> 1 │ a { --custom-property: 1; --custom-property: 2; }
│ ^^^^^^^^^^^^^^^^^
@@ -41,7 +42,7 @@ invalid.css:1:27 lint/nursery/noDuplicateCustomProperties ━━━━━━━
```
invalid.css:2:40 lint/nursery/noDuplicateCustomProperties ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Duplicate custom properties can lead to unexpected behavior and may override previous declarations unintentionally.
+ × Duplicate custom properties can lead to unexpected behavior and may override previous declarations unintentionally.
1 │ a { --custom-property: 1; --custom-property: 2; }
> 2 │ a { --custom-property: 1; color: pink; --custom-property: 1; }
@@ -65,7 +66,7 @@ invalid.css:2:40 lint/nursery/noDuplicateCustomProperties ━━━━━━━
```
invalid.css:3:62 lint/nursery/noDuplicateCustomProperties ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Duplicate custom properties can lead to unexpected behavior and may override previous declarations unintentionally.
+ × Duplicate custom properties can lead to unexpected behavior and may override previous declarations unintentionally.
1 │ a { --custom-property: 1; --custom-property: 2; }
2 │ a { --custom-property: 1; color: pink; --custom-property: 1; }
@@ -91,7 +92,7 @@ invalid.css:3:62 lint/nursery/noDuplicateCustomProperties ━━━━━━━
```
invalid.css:4:69 lint/nursery/noDuplicateCustomProperties ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Duplicate custom properties can lead to unexpected behavior and may override previous declarations unintentionally.
+ × Duplicate custom properties can lead to unexpected behavior and may override previous declarations unintentionally.
2 │ a { --custom-property: 1; color: pink; --custom-property: 1; }
3 │ a { --custom-property: 1; --cUstOm-prOpErtY: 1; color: pink; --cUstOm-prOpErtY: 1; }
@@ -117,7 +118,7 @@ invalid.css:4:69 lint/nursery/noDuplicateCustomProperties ━━━━━━━
```
invalid.css:5:66 lint/nursery/noDuplicateCustomProperties ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Duplicate custom properties can lead to unexpected behavior and may override previous declarations unintentionally.
+ × Duplicate custom properties can lead to unexpected behavior and may override previous declarations unintentionally.
3 │ a { --custom-property: 1; --cUstOm-prOpErtY: 1; color: pink; --cUstOm-prOpErtY: 1; }
4 │ a { --custom-property: pink; { &:hover { --custom-property: orange; --custom-property: black; } } }
@@ -143,7 +144,7 @@ invalid.css:5:66 lint/nursery/noDuplicateCustomProperties ━━━━━━━
```
invalid.css:6:70 lint/nursery/noDuplicateCustomProperties ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Duplicate custom properties can lead to unexpected behavior and may override previous declarations unintentionally.
+ × Duplicate custom properties can lead to unexpected behavior and may override previous declarations unintentionally.
4 │ a { --custom-property: pink; { &:hover { --custom-property: orange; --custom-property: black; } } }
5 │ a { --custom-property: pink; @media { --custom-property: orange; --custom-property: black; } }
@@ -169,7 +170,7 @@ invalid.css:6:70 lint/nursery/noDuplicateCustomProperties ━━━━━━━
```
invalid.css:7:104 lint/nursery/noDuplicateCustomProperties ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Duplicate custom properties can lead to unexpected behavior and may override previous declarations unintentionally.
+ × Duplicate custom properties can lead to unexpected behavior and may override previous declarations unintentionally.
5 │ a { --custom-property: pink; @media { --custom-property: orange; --custom-property: black; } }
6 │ @media { --custom-property: orange; .foo { --custom-property: black; --custom-property: white; } }
@@ -195,7 +196,7 @@ invalid.css:7:104 lint/nursery/noDuplicateCustomProperties ━━━━━━━
```
invalid.css:8:99 lint/nursery/noDuplicateCustomProperties ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Duplicate custom properties can lead to unexpected behavior and may override previous declarations unintentionally.
+ × Duplicate custom properties can lead to unexpected behavior and may override previous declarations unintentionally.
6 │ @media { --custom-property: orange; .foo { --custom-property: black; --custom-property: white; } }
7 │ a { --custom-property: pink; @media { --custom-property: orange; &::before { --custom-property: black; --custom-property: white; } } }
diff --git a/crates/biome_css_analyze/tests/specs/nursery/noDuplicateProperties/invalid.css.snap b/crates/biome_css_analyze/tests/specs/nursery/noDuplicateProperties/invalid.css.snap
index 060af68b3b48..71d08b0d9ca2 100644
--- a/crates/biome_css_analyze/tests/specs/nursery/noDuplicateProperties/invalid.css.snap
+++ b/crates/biome_css_analyze/tests/specs/nursery/noDuplicateProperties/invalid.css.snap
@@ -1,6 +1,7 @@
---
source: crates/biome_css_analyze/tests/spec_tests.rs
expression: invalid.css
+snapshot_kind: text
---
# Input
```css
@@ -72,7 +73,7 @@ a {
```
invalid.css:3:5 lint/nursery/noDuplicateProperties ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Duplicate properties can lead to unexpected behavior and may override previous declarations unintentionally.
+ × Duplicate properties can lead to unexpected behavior and may override previous declarations unintentionally.
1 │ a {
2 │ color: pink;
@@ -97,7 +98,7 @@ invalid.css:3:5 lint/nursery/noDuplicateProperties ━━━━━━━━━
```
invalid.css:8:5 lint/nursery/noDuplicateProperties ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Duplicate properties can lead to unexpected behavior and may override previous declarations unintentionally.
+ × Duplicate properties can lead to unexpected behavior and may override previous declarations unintentionally.
6 │ a {
7 │ color: pink;
@@ -122,7 +123,7 @@ invalid.css:8:5 lint/nursery/noDuplicateProperties ━━━━━━━━━
```
invalid.css:14:5 lint/nursery/noDuplicateProperties ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Duplicate properties can lead to unexpected behavior and may override previous declarations unintentionally.
+ × Duplicate properties can lead to unexpected behavior and may override previous declarations unintentionally.
12 │ a {
13 │ color: pink;
@@ -147,7 +148,7 @@ invalid.css:14:5 lint/nursery/noDuplicateProperties ━━━━━━━━━
```
invalid.css:21:5 lint/nursery/noDuplicateProperties ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Duplicate properties can lead to unexpected behavior and may override previous declarations unintentionally.
+ × Duplicate properties can lead to unexpected behavior and may override previous declarations unintentionally.
19 │ color: pink;
20 │ background: orange;
@@ -172,7 +173,7 @@ invalid.css:21:5 lint/nursery/noDuplicateProperties ━━━━━━━━━
```
invalid.css:27:5 lint/nursery/noDuplicateProperties ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Duplicate properties can lead to unexpected behavior and may override previous declarations unintentionally.
+ × Duplicate properties can lead to unexpected behavior and may override previous declarations unintentionally.
25 │ color: pink;
26 │ background: orange;
@@ -198,7 +199,7 @@ invalid.css:27:5 lint/nursery/noDuplicateProperties ━━━━━━━━━
```
invalid.css:30:45 lint/nursery/noDuplicateProperties ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Duplicate properties can lead to unexpected behavior and may override previous declarations unintentionally.
+ × Duplicate properties can lead to unexpected behavior and may override previous declarations unintentionally.
28 │ }
29 │
@@ -224,7 +225,7 @@ invalid.css:30:45 lint/nursery/noDuplicateProperties ━━━━━━━━━
```
invalid.css:32:42 lint/nursery/noDuplicateProperties ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Duplicate properties can lead to unexpected behavior and may override previous declarations unintentionally.
+ × Duplicate properties can lead to unexpected behavior and may override previous declarations unintentionally.
30 │ a { color: pink; { &:hover { color: orange; color: black; } } }
31 │
@@ -250,7 +251,7 @@ invalid.css:32:42 lint/nursery/noDuplicateProperties ━━━━━━━━━
```
invalid.css:34:46 lint/nursery/noDuplicateProperties ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Duplicate properties can lead to unexpected behavior and may override previous declarations unintentionally.
+ × Duplicate properties can lead to unexpected behavior and may override previous declarations unintentionally.
32 │ a { color: pink; @media { color: orange; color: black; } }
33 │
@@ -276,7 +277,7 @@ invalid.css:34:46 lint/nursery/noDuplicateProperties ━━━━━━━━━
```
invalid.css:36:68 lint/nursery/noDuplicateProperties ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Duplicate properties can lead to unexpected behavior and may override previous declarations unintentionally.
+ × Duplicate properties can lead to unexpected behavior and may override previous declarations unintentionally.
34 │ @media { color: orange; .foo { color: black; color: white; } }
35 │
@@ -302,7 +303,7 @@ invalid.css:36:68 lint/nursery/noDuplicateProperties ━━━━━━━━━
```
invalid.css:38:63 lint/nursery/noDuplicateProperties ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Duplicate properties can lead to unexpected behavior and may override previous declarations unintentionally.
+ × Duplicate properties can lead to unexpected behavior and may override previous declarations unintentionally.
36 │ a { color: pink; @media { color: orange; &::before { color: black; color: white; } } }
37 │
@@ -328,7 +329,7 @@ invalid.css:38:63 lint/nursery/noDuplicateProperties ━━━━━━━━━
```
invalid.css:40:34 lint/nursery/noDuplicateProperties ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Duplicate properties can lead to unexpected behavior and may override previous declarations unintentionally.
+ × Duplicate properties can lead to unexpected behavior and may override previous declarations unintentionally.
38 │ a { color: pink; @media { color: orange; .foo { color: black; color: white; } } }
39 │
@@ -354,7 +355,7 @@ invalid.css:40:34 lint/nursery/noDuplicateProperties ━━━━━━━━━
```
invalid.css:42:28 lint/nursery/noDuplicateProperties ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Duplicate properties can lead to unexpected behavior and may override previous declarations unintentionally.
+ × Duplicate properties can lead to unexpected behavior and may override previous declarations unintentionally.
40 │ a { -webkit-border-radius: 12px; -webkit-border-radius: 10px; }
41 │
@@ -380,7 +381,7 @@ invalid.css:42:28 lint/nursery/noDuplicateProperties ━━━━━━━━━
```
invalid.css:44:28 lint/nursery/noDuplicateProperties ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Duplicate properties can lead to unexpected behavior and may override previous declarations unintentionally.
+ × Duplicate properties can lead to unexpected behavior and may override previous declarations unintentionally.
42 │ a { color: red !important; color: blue; }
43 │
@@ -406,7 +407,7 @@ invalid.css:44:28 lint/nursery/noDuplicateProperties ━━━━━━━━━
```
invalid.css:49:9 lint/nursery/noDuplicateProperties ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Duplicate properties can lead to unexpected behavior and may override previous declarations unintentionally.
+ × Duplicate properties can lead to unexpected behavior and may override previous declarations unintentionally.
47 │ @supports (color: pink) {
48 │ color: pink;
@@ -432,7 +433,7 @@ invalid.css:49:9 lint/nursery/noDuplicateProperties ━━━━━━━━━
```
invalid.css:58:13 lint/nursery/noDuplicateProperties ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Duplicate properties can lead to unexpected behavior and may override previous declarations unintentionally.
+ × Duplicate properties can lead to unexpected behavior and may override previous declarations unintentionally.
56 │ &:hover {
57 │ color: orange;
diff --git a/crates/biome_css_analyze/tests/specs/nursery/noIrregularWhitespace/invalid.css.snap b/crates/biome_css_analyze/tests/specs/nursery/noIrregularWhitespace/invalid.css.snap
index 77f568bd3877..8b5bec611325 100644
--- a/crates/biome_css_analyze/tests/specs/nursery/noIrregularWhitespace/invalid.css.snap
+++ b/crates/biome_css_analyze/tests/specs/nursery/noIrregularWhitespace/invalid.css.snap
@@ -1,6 +1,7 @@
---
source: crates/biome_css_analyze/tests/spec_tests.rs
expression: invalid.css
+snapshot_kind: text
---
# Input
```css
@@ -108,7 +109,7 @@ expression: invalid.css
```
invalid.css:2:2 lint/nursery/noIrregularWhitespace ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Irregular whitespace found.
+ i Irregular whitespace found.
1 │ /* \u{b} */
> 2 │ @import␋ 'a.css';
@@ -124,7 +125,7 @@ invalid.css:2:2 lint/nursery/noIrregularWhitespace ━━━━━━━━━
```
invalid.css:4:2 lint/nursery/noIrregularWhitespace ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Irregular whitespace found.
+ i Irregular whitespace found.
2 │ @import␋ 'a.css';
3 │ /* \u{c} */
@@ -141,7 +142,7 @@ invalid.css:4:2 lint/nursery/noIrregularWhitespace ━━━━━━━━━
```
invalid.css:6:2 lint/nursery/noIrregularWhitespace ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Irregular whitespace found.
+ i Irregular whitespace found.
4 │ @layer↡module, state;
5 │ /* \u{feff} */
@@ -158,7 +159,7 @@ invalid.css:6:2 lint/nursery/noIrregularWhitespace ━━━━━━━━━
```
invalid.css:18:12 lint/nursery/noIrregularWhitespace ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Irregular whitespace found.
+ i Irregular whitespace found.
16 │ }
17 │ /* \u{2000} */
@@ -175,7 +176,7 @@ invalid.css:18:12 lint/nursery/noIrregularWhitespace ━━━━━━━━━
```
invalid.css:23:9 lint/nursery/noIrregularWhitespace ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Irregular whitespace found.
+ i Irregular whitespace found.
21 │ /* \u{2001} */
22 │ .firstClass .secondClass {
@@ -192,7 +193,7 @@ invalid.css:23:9 lint/nursery/noIrregularWhitespace ━━━━━━━━━
```
invalid.css:30:25 lint/nursery/noIrregularWhitespace ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Irregular whitespace found.
+ i Irregular whitespace found.
28 │ }
29 │ /* \u{2003} */
@@ -209,7 +210,7 @@ invalid.css:30:25 lint/nursery/noIrregularWhitespace ━━━━━━━━━
```
invalid.css:34:12 lint/nursery/noIrregularWhitespace ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Irregular whitespace found.
+ i Irregular whitespace found.
32 │ }
33 │ /* \u{2004} */
@@ -226,7 +227,7 @@ invalid.css:34:12 lint/nursery/noIrregularWhitespace ━━━━━━━━━
```
invalid.css:38:12 lint/nursery/noIrregularWhitespace ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Irregular whitespace found.
+ i Irregular whitespace found.
36 │ }
37 │ /* \u{2005} */
@@ -243,7 +244,7 @@ invalid.css:38:12 lint/nursery/noIrregularWhitespace ━━━━━━━━━
```
invalid.css:42:12 lint/nursery/noIrregularWhitespace ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Irregular whitespace found.
+ i Irregular whitespace found.
40 │ }
41 │ /* \u{2006} */
@@ -260,7 +261,7 @@ invalid.css:42:12 lint/nursery/noIrregularWhitespace ━━━━━━━━━
```
invalid.css:46:12 lint/nursery/noIrregularWhitespace ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Irregular whitespace found.
+ i Irregular whitespace found.
44 │ }
45 │ /* \u{2007} */
@@ -277,7 +278,7 @@ invalid.css:46:12 lint/nursery/noIrregularWhitespace ━━━━━━━━━
```
invalid.css:51:14 lint/nursery/noIrregularWhitespace ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Irregular whitespace found.
+ i Irregular whitespace found.
49 │ /* \u{2008} */
50 │ @view-transition {
@@ -294,7 +295,7 @@ invalid.css:51:14 lint/nursery/noIrregularWhitespace ━━━━━━━━━
```
invalid.css:56:11 lint/nursery/noIrregularWhitespace ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Irregular whitespace found.
+ i Irregular whitespace found.
54 │ @layer state {
55 │ body {
@@ -311,7 +312,7 @@ invalid.css:56:11 lint/nursery/noIrregularWhitespace ━━━━━━━━━
```
invalid.css:56:11 lint/nursery/noIrregularWhitespace ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Irregular whitespace found.
+ i Irregular whitespace found.
54 │ @layer state {
55 │ body {
@@ -328,7 +329,7 @@ invalid.css:56:11 lint/nursery/noIrregularWhitespace ━━━━━━━━━
```
invalid.css:60:7 lint/nursery/noIrregularWhitespace ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Irregular whitespace found.
+ i Irregular whitespace found.
58 │ }
59 │ /* \u{200a} */
@@ -345,7 +346,7 @@ invalid.css:60:7 lint/nursery/noIrregularWhitespace ━━━━━━━━━
```
invalid.css:67:6 lint/nursery/noIrregularWhitespace ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Irregular whitespace found.
+ i Irregular whitespace found.
65 │ /* \u{200b} */
66 │ @keyframes slidein {
@@ -362,7 +363,7 @@ invalid.css:67:6 lint/nursery/noIrregularWhitespace ━━━━━━━━━
```
invalid.css:76:11 lint/nursery/noIrregularWhitespace ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Irregular whitespace found.
+ i Irregular whitespace found.
74 │ }
75 │ /* \u{202f} */
@@ -379,7 +380,7 @@ invalid.css:76:11 lint/nursery/noIrregularWhitespace ━━━━━━━━━
```
invalid.css:85:11 lint/nursery/noIrregularWhitespace ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Irregular whitespace found.
+ i Irregular whitespace found.
83 │ }
84 │ /* \u{205f} */
@@ -396,7 +397,7 @@ invalid.css:85:11 lint/nursery/noIrregularWhitespace ━━━━━━━━━
```
invalid.css:95:11 lint/nursery/noIrregularWhitespace ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Irregular whitespace found.
+ i Irregular whitespace found.
93 │ }
94 │ /* \u{3000} */
diff --git a/crates/biome_css_analyze/tests/specs/nursery/noMissingVarFunction/invalid.css.snap b/crates/biome_css_analyze/tests/specs/nursery/noMissingVarFunction/invalid.css.snap
index c9dddb017ca4..9ff514f77ce8 100644
--- a/crates/biome_css_analyze/tests/specs/nursery/noMissingVarFunction/invalid.css.snap
+++ b/crates/biome_css_analyze/tests/specs/nursery/noMissingVarFunction/invalid.css.snap
@@ -1,6 +1,7 @@
---
source: crates/biome_css_analyze/tests/spec_tests.rs
expression: invalid.css
+snapshot_kind: text
---
# Input
```css
@@ -80,7 +81,7 @@ a {
```
invalid.css:4:12 lint/nursery/noMissingVarFunction ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! CSS variables '--foo' is used without the 'var()' function
+ × CSS variables '--foo' is used without the 'var()' function
2 │ a {
3 │ --foo: red;
@@ -97,7 +98,7 @@ invalid.css:4:12 lint/nursery/noMissingVarFunction ━━━━━━━━━
```
invalid.css:10:12 lint/nursery/noMissingVarFunction ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! CSS variables '--bar' is used without the 'var()' function
+ × CSS variables '--bar' is used without the 'var()' function
8 │ @property --bar {}
9 │ a {
@@ -114,7 +115,7 @@ invalid.css:10:12 lint/nursery/noMissingVarFunction ━━━━━━━━━
```
invalid.css:18:12 lint/nursery/noMissingVarFunction ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! CSS variables '--baz' is used without the 'var()' function
+ × CSS variables '--baz' is used without the 'var()' function
16 │ }
17 │ a {
@@ -131,7 +132,7 @@ invalid.css:18:12 lint/nursery/noMissingVarFunction ━━━━━━━━━
```
invalid.css:26:30 lint/nursery/noMissingVarFunction ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! CSS variables '--aaaa' is used without the 'var()' function
+ × CSS variables '--aaaa' is used without the 'var()' function
24 │ }
25 │ a {
@@ -148,7 +149,7 @@ invalid.css:26:30 lint/nursery/noMissingVarFunction ━━━━━━━━━
```
invalid.css:34:12 lint/nursery/noMissingVarFunction ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! CSS variables '--bbbb' is used without the 'var()' function
+ × CSS variables '--bbbb' is used without the 'var()' function
32 │ }
33 │ a {
@@ -165,7 +166,7 @@ invalid.css:34:12 lint/nursery/noMissingVarFunction ━━━━━━━━━
```
invalid.css:42:18 lint/nursery/noMissingVarFunction ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! CSS variables '--cccc' is used without the 'var()' function
+ × CSS variables '--cccc' is used without the 'var()' function
40 │ }
41 │ a {
@@ -182,7 +183,7 @@ invalid.css:42:18 lint/nursery/noMissingVarFunction ━━━━━━━━━
```
invalid.css:51:12 lint/nursery/noMissingVarFunction ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! CSS variables '--dddd' is used without the 'var()' function
+ × CSS variables '--dddd' is used without the 'var()' function
49 │ }
50 │ a {
@@ -199,7 +200,7 @@ invalid.css:51:12 lint/nursery/noMissingVarFunction ━━━━━━━━━
```
invalid.css:52:12 lint/nursery/noMissingVarFunction ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! CSS variables '--eeee' is used without the 'var()' function
+ × CSS variables '--eeee' is used without the 'var()' function
50 │ a {
51 │ --foo: --dddd;
@@ -216,7 +217,7 @@ invalid.css:52:12 lint/nursery/noMissingVarFunction ━━━━━━━━━
```
invalid.css:59:12 lint/nursery/noMissingVarFunction ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! CSS variables '--ffff' is used without the 'var()' function
+ × CSS variables '--ffff' is used without the 'var()' function
57 │ @property --gggg {}
58 │ a {
@@ -233,7 +234,7 @@ invalid.css:59:12 lint/nursery/noMissingVarFunction ━━━━━━━━━
```
invalid.css:60:12 lint/nursery/noMissingVarFunction ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! CSS variables '--gggg' is used without the 'var()' function
+ × CSS variables '--gggg' is used without the 'var()' function
58 │ a {
59 │ --foo: --ffff;
@@ -250,7 +251,7 @@ invalid.css:60:12 lint/nursery/noMissingVarFunction ━━━━━━━━━
```
invalid.css:67:14 lint/nursery/noMissingVarFunction ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! CSS variables '--foo' is used without the 'var()' function
+ × CSS variables '--foo' is used without the 'var()' function
65 │ --foo: red;
66 │ .child {
diff --git a/crates/biome_css_analyze/tests/specs/nursery/noUnknownAtRule/invalid.css.snap b/crates/biome_css_analyze/tests/specs/nursery/noUnknownAtRule/invalid.css.snap
index fd79f5aad0be..e68f1afe9271 100644
--- a/crates/biome_css_analyze/tests/specs/nursery/noUnknownAtRule/invalid.css.snap
+++ b/crates/biome_css_analyze/tests/specs/nursery/noUnknownAtRule/invalid.css.snap
@@ -1,6 +1,7 @@
---
source: crates/biome_css_analyze/tests/spec_tests.rs
expression: invalid.css
+snapshot_kind: text
---
# Input
```css
@@ -17,7 +18,7 @@ expression: invalid.css
```
invalid.css:1:2 lint/nursery/noUnknownAtRule ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Unexpected unknown at-rule: unknown-rule
+ i Unexpected unknown at-rule: unknown-rule
> 1 │ @unknown-rule 'UTF-8';
│ ^^^^^^^^^^^^
@@ -36,7 +37,7 @@ invalid.css:1:2 lint/nursery/noUnknownAtRule ━━━━━━━━━━━
```
invalid.css:2:2 lint/nursery/noUnknownAtRule ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Unexpected unknown at-rule: uNkNoWn
+ i Unexpected unknown at-rule: uNkNoWn
1 │ @unknown-rule 'UTF-8';
> 2 │ @uNkNoWn {}
@@ -56,7 +57,7 @@ invalid.css:2:2 lint/nursery/noUnknownAtRule ━━━━━━━━━━━
```
invalid.css:3:2 lint/nursery/noUnknownAtRule ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Unexpected unknown at-rule: UNKNOWN
+ i Unexpected unknown at-rule: UNKNOWN
1 │ @unknown-rule 'UTF-8';
2 │ @uNkNoWn {}
@@ -77,7 +78,7 @@ invalid.css:3:2 lint/nursery/noUnknownAtRule ━━━━━━━━━━━
```
invalid.css:4:2 lint/nursery/noUnknownAtRule ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Unexpected unknown at-rule: unknown-at-rule
+ i Unexpected unknown at-rule: unknown-at-rule
2 │ @uNkNoWn {}
3 │ @UNKNOWN {}
@@ -98,7 +99,7 @@ invalid.css:4:2 lint/nursery/noUnknownAtRule ━━━━━━━━━━━
```
invalid.css:5:2 lint/nursery/noUnknownAtRule ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Unexpected unknown at-rule: unknown
+ i Unexpected unknown at-rule: unknown
3 │ @UNKNOWN {}
4 │ @unknown-at-rule {}
@@ -119,7 +120,7 @@ invalid.css:5:2 lint/nursery/noUnknownAtRule ━━━━━━━━━━━
```
invalid.css:5:13 lint/nursery/noUnknownAtRule ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Unexpected unknown at-rule: unknown-at-rule
+ i Unexpected unknown at-rule: unknown-at-rule
3 │ @UNKNOWN {}
4 │ @unknown-at-rule {}
@@ -140,7 +141,7 @@ invalid.css:5:13 lint/nursery/noUnknownAtRule ━━━━━━━━━━━
```
invalid.css:6:2 lint/nursery/noUnknownAtRule ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Unexpected unknown at-rule: MY-other-at-rule
+ i Unexpected unknown at-rule: MY-other-at-rule
4 │ @unknown-at-rule {}
5 │ @unknown { @unknown-at-rule { font-size: 14px; } }
@@ -160,7 +161,7 @@ invalid.css:6:2 lint/nursery/noUnknownAtRule ━━━━━━━━━━━
```
invalid.css:7:2 lint/nursery/noUnknownAtRule ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Unexpected unknown at-rule: not-my-at-rule
+ i Unexpected unknown at-rule: not-my-at-rule
5 │ @unknown { @unknown-at-rule { font-size: 14px; } }
6 │ @MY-other-at-rule {}
diff --git a/crates/biome_css_analyze/tests/specs/nursery/noUnknownPseudoClass/invalid.css.snap b/crates/biome_css_analyze/tests/specs/nursery/noUnknownPseudoClass/invalid.css.snap
index 5bb7c790d47b..9b4398313ac9 100644
--- a/crates/biome_css_analyze/tests/specs/nursery/noUnknownPseudoClass/invalid.css.snap
+++ b/crates/biome_css_analyze/tests/specs/nursery/noUnknownPseudoClass/invalid.css.snap
@@ -1,6 +1,7 @@
---
source: crates/biome_css_analyze/tests/spec_tests.rs
expression: invalid.css
+snapshot_kind: text
---
# Input
```css
@@ -26,7 +27,7 @@ b > .foo:error { }
```
invalid.css:1:3 lint/nursery/noUnknownPseudoClass ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Unexpected unknown pseudo-class unknown
+ × Unexpected unknown pseudo-class unknown
> 1 │ a:unknown { }
│ ^^^^^^^
@@ -41,7 +42,7 @@ invalid.css:1:3 lint/nursery/noUnknownPseudoClass ━━━━━━━━━━
```
invalid.css:2:3 lint/nursery/noUnknownPseudoClass ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Unexpected unknown pseudo-class Unknown
+ × Unexpected unknown pseudo-class Unknown
1 │ a:unknown { }
> 2 │ a:Unknown { }
@@ -57,7 +58,7 @@ invalid.css:2:3 lint/nursery/noUnknownPseudoClass ━━━━━━━━━━
```
invalid.css:3:3 lint/nursery/noUnknownPseudoClass ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Unexpected unknown pseudo-class uNkNoWn
+ × Unexpected unknown pseudo-class uNkNoWn
1 │ a:unknown { }
2 │ a:Unknown { }
@@ -74,7 +75,7 @@ invalid.css:3:3 lint/nursery/noUnknownPseudoClass ━━━━━━━━━━
```
invalid.css:4:3 lint/nursery/noUnknownPseudoClass ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Unexpected unknown pseudo-class UNKNOWN
+ × Unexpected unknown pseudo-class UNKNOWN
2 │ a:Unknown { }
3 │ a:uNkNoWn { }
@@ -91,7 +92,7 @@ invalid.css:4:3 lint/nursery/noUnknownPseudoClass ━━━━━━━━━━
```
invalid.css:5:3 lint/nursery/noUnknownPseudoClass ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Unexpected unknown pseudo-class pseudo-class
+ × Unexpected unknown pseudo-class pseudo-class
3 │ a:uNkNoWn { }
4 │ a:UNKNOWN { }
@@ -108,7 +109,7 @@ invalid.css:5:3 lint/nursery/noUnknownPseudoClass ━━━━━━━━━━
```
invalid.css:6:15 lint/nursery/noUnknownPseudoClass ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Unexpected unknown pseudo-class noot
+ × Unexpected unknown pseudo-class noot
4 │ a:UNKNOWN { }
5 │ a:pseudo-class { }
@@ -125,7 +126,7 @@ invalid.css:6:15 lint/nursery/noUnknownPseudoClass ━━━━━━━━━
```
invalid.css:7:3 lint/nursery/noUnknownPseudoClass ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Unexpected unknown pseudo-class unknown
+ × Unexpected unknown pseudo-class unknown
5 │ a:pseudo-class { }
6 │ body:not(div):noot(span) {}
@@ -142,7 +143,7 @@ invalid.css:7:3 lint/nursery/noUnknownPseudoClass ━━━━━━━━━━
```
invalid.css:9:10 lint/nursery/noUnknownPseudoClass ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Unexpected unknown pseudo-class error
+ × Unexpected unknown pseudo-class error
7 │ a:unknown::before { }
8 │ a,
@@ -159,7 +160,7 @@ invalid.css:9:10 lint/nursery/noUnknownPseudoClass ━━━━━━━━━
```
invalid.css:10:39 lint/nursery/noUnknownPseudoClass ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Unexpected unknown pseudo-class unknown
+ × Unexpected unknown pseudo-class unknown
8 │ a,
9 │ b > .foo:error { }
@@ -176,7 +177,7 @@ invalid.css:10:39 lint/nursery/noUnknownPseudoClass ━━━━━━━━━
```
invalid.css:11:2 lint/nursery/noUnknownPseudoClass ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Unexpected unknown pseudo-class first
+ × Unexpected unknown pseudo-class first
9 │ b > .foo:error { }
10 │ ::-webkit-scrollbar-button:horizontal:unknown {}
@@ -193,7 +194,7 @@ invalid.css:11:2 lint/nursery/noUnknownPseudoClass ━━━━━━━━━
```
invalid.css:12:2 lint/nursery/noUnknownPseudoClass ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Unexpected unknown pseudo-class slotted
+ × Unexpected unknown pseudo-class slotted
10 │ ::-webkit-scrollbar-button:horizontal:unknown {}
11 │ :first { }
@@ -210,7 +211,7 @@ invalid.css:12:2 lint/nursery/noUnknownPseudoClass ━━━━━━━━━
```
invalid.css:13:2 lint/nursery/noUnknownPseudoClass ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Unexpected unknown pseudo-class placeholder
+ × Unexpected unknown pseudo-class placeholder
11 │ :first { }
12 │ :slotted {}
@@ -227,7 +228,7 @@ invalid.css:13:2 lint/nursery/noUnknownPseudoClass ━━━━━━━━━
```
invalid.css:14:14 lint/nursery/noUnknownPseudoClass ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Unexpected unknown pseudo-class unknown
+ × Unexpected unknown pseudo-class unknown
12 │ :slotted {}
13 │ :placeholder {}
@@ -244,7 +245,7 @@ invalid.css:14:14 lint/nursery/noUnknownPseudoClass ━━━━━━━━━
```
invalid.css:15:11 lint/nursery/noUnknownPseudoClass ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Unexpected unknown pseudo-class unknown
+ × Unexpected unknown pseudo-class unknown
13 │ :placeholder {}
14 │ @page :blank:unknown { }
@@ -260,7 +261,7 @@ invalid.css:15:11 lint/nursery/noUnknownPseudoClass ━━━━━━━━━
```
invalid.css:16:2 lint/nursery/noUnknownPseudoClass ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Unexpected unknown pseudo-class horizontal
+ × Unexpected unknown pseudo-class horizontal
14 │ @page :blank:unknown { }
15 │ @page foo:unknown { }
@@ -275,7 +276,7 @@ invalid.css:16:2 lint/nursery/noUnknownPseudoClass ━━━━━━━━━
```
invalid.css:16:13 lint/nursery/noUnknownPseudoClass ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Unexpected unknown pseudo-class decrement
+ × Unexpected unknown pseudo-class decrement
14 │ @page :blank:unknown { }
15 │ @page foo:unknown { }
diff --git a/crates/biome_css_analyze/tests/specs/nursery/noUnknownPseudoElement/invalid.css.snap b/crates/biome_css_analyze/tests/specs/nursery/noUnknownPseudoElement/invalid.css.snap
index 5cb24cf12b84..7033e082b9b5 100644
--- a/crates/biome_css_analyze/tests/specs/nursery/noUnknownPseudoElement/invalid.css.snap
+++ b/crates/biome_css_analyze/tests/specs/nursery/noUnknownPseudoElement/invalid.css.snap
@@ -1,6 +1,7 @@
---
source: crates/biome_css_analyze/tests/spec_tests.rs
expression: invalid.css
+snapshot_kind: text
---
# Input
```css
@@ -19,7 +20,7 @@ b > .foo::error { }
```
invalid.css:1:4 lint/nursery/noUnknownPseudoElement ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Unexpected unknown pseudo-elements: pseudo
+ × Unexpected unknown pseudo-elements: pseudo
> 1 │ a::pseudo { }
│ ^^^^^^
@@ -41,7 +42,7 @@ invalid.css:1:4 lint/nursery/noUnknownPseudoElement ━━━━━━━━━
```
invalid.css:2:4 lint/nursery/noUnknownPseudoElement ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Unexpected unknown pseudo-elements: Pseudo
+ × Unexpected unknown pseudo-elements: Pseudo
1 │ a::pseudo { }
> 2 │ a::Pseudo { }
@@ -64,7 +65,7 @@ invalid.css:2:4 lint/nursery/noUnknownPseudoElement ━━━━━━━━━
```
invalid.css:3:4 lint/nursery/noUnknownPseudoElement ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Unexpected unknown pseudo-elements: pSeUdO
+ × Unexpected unknown pseudo-elements: pSeUdO
1 │ a::pseudo { }
2 │ a::Pseudo { }
@@ -88,7 +89,7 @@ invalid.css:3:4 lint/nursery/noUnknownPseudoElement ━━━━━━━━━
```
invalid.css:4:4 lint/nursery/noUnknownPseudoElement ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Unexpected unknown pseudo-elements: PSEUDO
+ × Unexpected unknown pseudo-elements: PSEUDO
2 │ a::Pseudo { }
3 │ a::pSeUdO { }
@@ -112,7 +113,7 @@ invalid.css:4:4 lint/nursery/noUnknownPseudoElement ━━━━━━━━━
```
invalid.css:5:4 lint/nursery/noUnknownPseudoElement ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Unexpected unknown pseudo-elements: element
+ × Unexpected unknown pseudo-elements: element
3 │ a::pSeUdO { }
4 │ a::PSEUDO { }
@@ -136,7 +137,7 @@ invalid.css:5:4 lint/nursery/noUnknownPseudoElement ━━━━━━━━━
```
invalid.css:6:10 lint/nursery/noUnknownPseudoElement ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Unexpected unknown pseudo-elements: element
+ × Unexpected unknown pseudo-elements: element
4 │ a::PSEUDO { }
5 │ a::element { }
@@ -160,7 +161,7 @@ invalid.css:6:10 lint/nursery/noUnknownPseudoElement ━━━━━━━━━
```
invalid.css:8:11 lint/nursery/noUnknownPseudoElement ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Unexpected unknown pseudo-elements: error
+ × Unexpected unknown pseudo-elements: error
6 │ a:hover::element { }
7 │ a,
diff --git a/crates/biome_css_analyze/tests/specs/nursery/noUnknownTypeSelector/invalid.css.snap b/crates/biome_css_analyze/tests/specs/nursery/noUnknownTypeSelector/invalid.css.snap
index ec89dee08aef..1f5609b95052 100644
--- a/crates/biome_css_analyze/tests/specs/nursery/noUnknownTypeSelector/invalid.css.snap
+++ b/crates/biome_css_analyze/tests/specs/nursery/noUnknownTypeSelector/invalid.css.snap
@@ -1,6 +1,7 @@
---
source: crates/biome_css_analyze/tests/spec_tests.rs
expression: invalid.css
+snapshot_kind: text
---
# Input
```css
@@ -36,7 +37,7 @@ x-Foo {
```
invalid.css:1:1 lint/nursery/noUnknownTypeSelector ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Unknown type selector is not allowed.
+ × Unknown type selector is not allowed.
> 1 │ unknown {
│ ^^^^^^^
@@ -53,7 +54,7 @@ invalid.css:1:1 lint/nursery/noUnknownTypeSelector ━━━━━━━━━
```
invalid.css:4:4 lint/nursery/noUnknownTypeSelector ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Unknown type selector is not allowed.
+ × Unknown type selector is not allowed.
2 │ }
3 │
@@ -72,7 +73,7 @@ invalid.css:4:4 lint/nursery/noUnknownTypeSelector ━━━━━━━━━
```
invalid.css:7:1 lint/nursery/noUnknownTypeSelector ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Unknown type selector is not allowed.
+ × Unknown type selector is not allowed.
5 │ }
6 │
@@ -91,7 +92,7 @@ invalid.css:7:1 lint/nursery/noUnknownTypeSelector ━━━━━━━━━
```
invalid.css:10:6 lint/nursery/noUnknownTypeSelector ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Unknown type selector is not allowed.
+ × Unknown type selector is not allowed.
8 │ }
9 │
@@ -110,7 +111,7 @@ invalid.css:10:6 lint/nursery/noUnknownTypeSelector ━━━━━━━━━
```
invalid.css:13:1 lint/nursery/noUnknownTypeSelector ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Unknown type selector is not allowed.
+ × Unknown type selector is not allowed.
11 │ }
12 │
@@ -129,7 +130,7 @@ invalid.css:13:1 lint/nursery/noUnknownTypeSelector ━━━━━━━━━
```
invalid.css:17:1 lint/nursery/noUnknownTypeSelector ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Unknown type selector is not allowed.
+ × Unknown type selector is not allowed.
16 │ table,
> 17 │ unknown {
@@ -147,7 +148,7 @@ invalid.css:17:1 lint/nursery/noUnknownTypeSelector ━━━━━━━━━
```
invalid.css:20:1 lint/nursery/noUnknownTypeSelector ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Unknown type selector is not allowed.
+ × Unknown type selector is not allowed.
18 │ }
19 │
@@ -166,7 +167,7 @@ invalid.css:20:1 lint/nursery/noUnknownTypeSelector ━━━━━━━━━
```
invalid.css:24:1 lint/nursery/noUnknownTypeSelector ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Unknown type selector is not allowed.
+ × Unknown type selector is not allowed.
22 │ }
23 │
diff --git a/crates/biome_css_analyze/tests/specs/nursery/noValueAtRule/invalid.module.css.snap b/crates/biome_css_analyze/tests/specs/nursery/noValueAtRule/invalid.module.css.snap
index 998bf787f5fa..594ec18e88a8 100644
--- a/crates/biome_css_analyze/tests/specs/nursery/noValueAtRule/invalid.module.css.snap
+++ b/crates/biome_css_analyze/tests/specs/nursery/noValueAtRule/invalid.module.css.snap
@@ -1,6 +1,7 @@
---
source: crates/biome_css_analyze/tests/spec_tests.rs
expression: invalid.module.css
+snapshot_kind: text
---
# Input
```css
@@ -28,7 +29,7 @@ expression: invalid.module.css
```
invalid.module.css:2:1 lint/nursery/noValueAtRule ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Use of @value rule is disallowed
+ i Use of @value rule is disallowed
1 │ /* css variables */
> 2 │ @value primary: #BF4040;
@@ -46,7 +47,7 @@ invalid.module.css:2:1 lint/nursery/noValueAtRule ━━━━━━━━━━
```
invalid.module.css:3:1 lint/nursery/noValueAtRule ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Use of @value rule is disallowed
+ i Use of @value rule is disallowed
1 │ /* css variables */
2 │ @value primary: #BF4040;
@@ -65,7 +66,7 @@ invalid.module.css:3:1 lint/nursery/noValueAtRule ━━━━━━━━━━
```
invalid.module.css:6:1 lint/nursery/noValueAtRule ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Use of @value rule is disallowed
+ i Use of @value rule is disallowed
5 │ /* breakpoints */
> 6 │ @value small: (max-width: 599px);
@@ -83,7 +84,7 @@ invalid.module.css:6:1 lint/nursery/noValueAtRule ━━━━━━━━━━
```
invalid.module.css:7:1 lint/nursery/noValueAtRule ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Use of @value rule is disallowed
+ i Use of @value rule is disallowed
5 │ /* breakpoints */
6 │ @value small: (max-width: 599px);
@@ -102,7 +103,7 @@ invalid.module.css:7:1 lint/nursery/noValueAtRule ━━━━━━━━━━
```
invalid.module.css:8:1 lint/nursery/noValueAtRule ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Use of @value rule is disallowed
+ i Use of @value rule is disallowed
6 │ @value small: (max-width: 599px);
7 │ @value medium: (min-width: 600px) and (max-width: 959px);
@@ -121,7 +122,7 @@ invalid.module.css:8:1 lint/nursery/noValueAtRule ━━━━━━━━━━
```
invalid.module.css:11:1 lint/nursery/noValueAtRule ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Use of @value rule is disallowed
+ i Use of @value rule is disallowed
10 │ /* alias paths for other values or composition */
> 11 │ @value colors: "./colors.css";
@@ -139,7 +140,7 @@ invalid.module.css:11:1 lint/nursery/noValueAtRule ━━━━━━━━━
```
invalid.module.css:13:1 lint/nursery/noValueAtRule ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Use of @value rule is disallowed
+ i Use of @value rule is disallowed
11 │ @value colors: "./colors.css";
12 │ /* import multiple from a single file */
@@ -158,7 +159,7 @@ invalid.module.css:13:1 lint/nursery/noValueAtRule ━━━━━━━━━
```
invalid.module.css:15:1 lint/nursery/noValueAtRule ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Use of @value rule is disallowed
+ i Use of @value rule is disallowed
13 │ @value primary, secondary from colors;
14 │ /* make local aliases to imported values */
@@ -177,7 +178,7 @@ invalid.module.css:15:1 lint/nursery/noValueAtRule ━━━━━━━━━
```
invalid.module.css:17:1 lint/nursery/noValueAtRule ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Use of @value rule is disallowed
+ i Use of @value rule is disallowed
15 │ @value small as bp-small, large as bp-large from "./breakpoints.css";
16 │ /* value as selector name */
diff --git a/crates/biome_css_analyze/tests/specs/suspicious/noDuplicateAtImportRules/invalid.css.snap b/crates/biome_css_analyze/tests/specs/suspicious/noDuplicateAtImportRules/invalid.css.snap
index 8adb62b1a8fe..0d2b3098348e 100644
--- a/crates/biome_css_analyze/tests/specs/suspicious/noDuplicateAtImportRules/invalid.css.snap
+++ b/crates/biome_css_analyze/tests/specs/suspicious/noDuplicateAtImportRules/invalid.css.snap
@@ -1,6 +1,7 @@
---
source: crates/biome_css_analyze/tests/spec_tests.rs
expression: invalid.css
+snapshot_kind: text
---
# Input
```css
@@ -14,7 +15,7 @@ expression: invalid.css
```
invalid.css:3:2 lint/suspicious/noDuplicateAtImportRules ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Each @import should be unique unless differing by media queries.
+ × Each @import should be unique unless differing by media queries.
1 │ @import "a.css";
2 │ @import "b.css";
diff --git a/crates/biome_css_analyze/tests/specs/suspicious/noDuplicateAtImportRules/invalidMedia.css.snap b/crates/biome_css_analyze/tests/specs/suspicious/noDuplicateAtImportRules/invalidMedia.css.snap
index 6d867ef7eea6..65073b674b9c 100644
--- a/crates/biome_css_analyze/tests/specs/suspicious/noDuplicateAtImportRules/invalidMedia.css.snap
+++ b/crates/biome_css_analyze/tests/specs/suspicious/noDuplicateAtImportRules/invalidMedia.css.snap
@@ -1,6 +1,7 @@
---
source: crates/biome_css_analyze/tests/spec_tests.rs
expression: invalidMedia.css
+snapshot_kind: text
---
# Input
```css
@@ -14,7 +15,7 @@ expression: invalidMedia.css
```
invalidMedia.css:3:2 lint/suspicious/noDuplicateAtImportRules ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Each @import should be unique unless differing by media queries.
+ × Each @import should be unique unless differing by media queries.
1 │ @import url("a.css") tv;
2 │ @import url("a.css") projection;
diff --git a/crates/biome_css_analyze/tests/specs/suspicious/noDuplicateAtImportRules/invalidMultipleMedia.css.snap b/crates/biome_css_analyze/tests/specs/suspicious/noDuplicateAtImportRules/invalidMultipleMedia.css.snap
index d7cdb9f0eb6e..fb42420e256d 100644
--- a/crates/biome_css_analyze/tests/specs/suspicious/noDuplicateAtImportRules/invalidMultipleMedia.css.snap
+++ b/crates/biome_css_analyze/tests/specs/suspicious/noDuplicateAtImportRules/invalidMultipleMedia.css.snap
@@ -1,6 +1,7 @@
---
source: crates/biome_css_analyze/tests/spec_tests.rs
expression: invalidMultipleMedia.css
+snapshot_kind: text
---
# Input
```css
@@ -14,7 +15,7 @@ expression: invalidMultipleMedia.css
```
invalidMultipleMedia.css:3:2 lint/suspicious/noDuplicateAtImportRules ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Each @import should be unique unless differing by media queries.
+ × Each @import should be unique unless differing by media queries.
1 │ @import url("a.css") tv, projection;
2 │ @import url("a.css") mobile;
diff --git a/crates/biome_css_analyze/tests/specs/suspicious/noDuplicateAtImportRules/invalidQuotes.css.snap b/crates/biome_css_analyze/tests/specs/suspicious/noDuplicateAtImportRules/invalidQuotes.css.snap
index d1fe1076e8cc..ea7235b8f9e6 100644
--- a/crates/biome_css_analyze/tests/specs/suspicious/noDuplicateAtImportRules/invalidQuotes.css.snap
+++ b/crates/biome_css_analyze/tests/specs/suspicious/noDuplicateAtImportRules/invalidQuotes.css.snap
@@ -1,6 +1,7 @@
---
source: crates/biome_css_analyze/tests/spec_tests.rs
expression: invalidQuotes.css
+snapshot_kind: text
---
# Input
```css
@@ -13,7 +14,7 @@ expression: invalidQuotes.css
```
invalidQuotes.css:2:2 lint/suspicious/noDuplicateAtImportRules ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Each @import should be unique unless differing by media queries.
+ × Each @import should be unique unless differing by media queries.
1 │ @import "a.css";
> 2 │ @import 'a.css';
diff --git a/crates/biome_css_analyze/tests/specs/suspicious/noDuplicateAtImportRules/invalidUrls.css.snap b/crates/biome_css_analyze/tests/specs/suspicious/noDuplicateAtImportRules/invalidUrls.css.snap
index bd2c89e63277..33c0b41e9432 100644
--- a/crates/biome_css_analyze/tests/specs/suspicious/noDuplicateAtImportRules/invalidUrls.css.snap
+++ b/crates/biome_css_analyze/tests/specs/suspicious/noDuplicateAtImportRules/invalidUrls.css.snap
@@ -1,6 +1,7 @@
---
source: crates/biome_css_analyze/tests/spec_tests.rs
expression: invalidUrls.css
+snapshot_kind: text
---
# Input
```css
@@ -13,7 +14,7 @@ expression: invalidUrls.css
```
invalidUrls.css:2:2 lint/suspicious/noDuplicateAtImportRules ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Each @import should be unique unless differing by media queries.
+ × Each @import should be unique unless differing by media queries.
1 │ @import url("c.css");
> 2 │ @import url("c.css");
diff --git a/crates/biome_css_analyze/tests/specs/suspicious/noDuplicateFontNames/invalid.css.snap b/crates/biome_css_analyze/tests/specs/suspicious/noDuplicateFontNames/invalid.css.snap
index cbf365515186..d615a343b2fc 100644
--- a/crates/biome_css_analyze/tests/specs/suspicious/noDuplicateFontNames/invalid.css.snap
+++ b/crates/biome_css_analyze/tests/specs/suspicious/noDuplicateFontNames/invalid.css.snap
@@ -1,6 +1,7 @@
---
source: crates/biome_css_analyze/tests/spec_tests.rs
expression: invalid.css
+snapshot_kind: text
---
# Input
```css
@@ -16,7 +17,7 @@ b { font: normal 14px/32px -apple-system, BlinkMacSystemFont, sans-serif, sans-s
```
invalid.css:1:56 lint/suspicious/noDuplicateFontNames ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Duplicate font names are redundant and unnecessary: sans-serif
+ × Duplicate font names are redundant and unnecessary: sans-serif
> 1 │ a { font-family: "Lucida Grande", 'Arial', sans-serif, sans-serif; }
│ ^^^^^^^^^^
@@ -31,7 +32,7 @@ invalid.css:1:56 lint/suspicious/noDuplicateFontNames ━━━━━━━━
```
invalid.css:2:44 lint/suspicious/noDuplicateFontNames ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Duplicate font names are redundant and unnecessary: Arial
+ × Duplicate font names are redundant and unnecessary: Arial
1 │ a { font-family: "Lucida Grande", 'Arial', sans-serif, sans-serif; }
> 2 │ a { font-family: 'Arial', "Lucida Grande", Arial, sans-serif; }
@@ -47,7 +48,7 @@ invalid.css:2:44 lint/suspicious/noDuplicateFontNames ━━━━━━━━
```
invalid.css:3:35 lint/suspicious/noDuplicateFontNames ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Duplicate font names are redundant and unnecessary: LucidaGrande
+ × Duplicate font names are redundant and unnecessary: LucidaGrande
1 │ a { font-family: "Lucida Grande", 'Arial', sans-serif, sans-serif; }
2 │ a { font-family: 'Arial', "Lucida Grande", Arial, sans-serif; }
@@ -64,7 +65,7 @@ invalid.css:3:35 lint/suspicious/noDuplicateFontNames ━━━━━━━━
```
invalid.css:4:27 lint/suspicious/noDuplicateFontNames ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Duplicate font names are redundant and unnecessary: Times
+ × Duplicate font names are redundant and unnecessary: Times
2 │ a { font-family: 'Arial', "Lucida Grande", Arial, sans-serif; }
3 │ a { fOnT-fAmIlY: "Lucida Grande", ' Lucida Grande ', sans-serif; }
@@ -81,7 +82,7 @@ invalid.css:4:27 lint/suspicious/noDuplicateFontNames ━━━━━━━━
```
invalid.css:5:39 lint/suspicious/noDuplicateFontNames ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Duplicate font names are redundant and unnecessary: Arial
+ × Duplicate font names are redundant and unnecessary: Arial
3 │ a { fOnT-fAmIlY: "Lucida Grande", ' Lucida Grande ', sans-serif; }
4 │ a { font-family: 'Times', Times }
@@ -97,7 +98,7 @@ invalid.css:5:39 lint/suspicious/noDuplicateFontNames ━━━━━━━━
```
invalid.css:6:75 lint/suspicious/noDuplicateFontNames ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Duplicate font names are redundant and unnecessary: sans-serif
+ × Duplicate font names are redundant and unnecessary: sans-serif
4 │ a { font-family: 'Times', Times }
5 │ a { FONT: italic 300 16px/30px Arial, " Arial", serif; }
diff --git a/crates/biome_css_analyze/tests/specs/suspicious/noDuplicateSelectorsKeyframeBlock/invalid.css.snap b/crates/biome_css_analyze/tests/specs/suspicious/noDuplicateSelectorsKeyframeBlock/invalid.css.snap
index d9b2f9c98070..be41e98a80c7 100644
--- a/crates/biome_css_analyze/tests/specs/suspicious/noDuplicateSelectorsKeyframeBlock/invalid.css.snap
+++ b/crates/biome_css_analyze/tests/specs/suspicious/noDuplicateSelectorsKeyframeBlock/invalid.css.snap
@@ -1,6 +1,7 @@
---
source: crates/biome_css_analyze/tests/spec_tests.rs
expression: invalid.css
+snapshot_kind: text
---
# Input
```css
@@ -23,7 +24,7 @@ expression: invalid.css
```
invalid.css:1:26 lint/suspicious/noDuplicateSelectorsKeyframeBlock ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! The duplicate keyframe selector is overwritten by later one.
+ × The duplicate keyframe selector is overwritten by later one.
> 1 │ @keyframes foo { from {} from {}}
│ ^^^^
@@ -38,7 +39,7 @@ invalid.css:1:26 lint/suspicious/noDuplicateSelectorsKeyframeBlock ━━━━
```
invalid.css:3:26 lint/suspicious/noDuplicateSelectorsKeyframeBlock ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! The duplicate keyframe selector is overwritten by later one.
+ × The duplicate keyframe selector is overwritten by later one.
1 │ @keyframes foo { from {} from {}}
2 │
@@ -55,7 +56,7 @@ invalid.css:3:26 lint/suspicious/noDuplicateSelectorsKeyframeBlock ━━━━
```
invalid.css:5:24 lint/suspicious/noDuplicateSelectorsKeyframeBlock ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! The duplicate keyframe selector is overwritten by later one.
+ × The duplicate keyframe selector is overwritten by later one.
3 │ @keyframes foo { from {} FROM {}}
4 │
@@ -72,7 +73,7 @@ invalid.css:5:24 lint/suspicious/noDuplicateSelectorsKeyframeBlock ━━━━
```
invalid.css:7:32 lint/suspicious/noDuplicateSelectorsKeyframeBlock ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! The duplicate keyframe selector is overwritten by later one.
+ × The duplicate keyframe selector is overwritten by later one.
5 │ @keyframes foo { 0% {} 0% {}}
6 │
@@ -89,7 +90,7 @@ invalid.css:7:32 lint/suspicious/noDuplicateSelectorsKeyframeBlock ━━━━
```
invalid.css:9:24 lint/suspicious/noDuplicateSelectorsKeyframeBlock ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! The duplicate keyframe selector is overwritten by later one.
+ × The duplicate keyframe selector is overwritten by later one.
7 │ @keyframes foo { from {} to {} to {} }
8 │
@@ -106,7 +107,7 @@ invalid.css:9:24 lint/suspicious/noDuplicateSelectorsKeyframeBlock ━━━━
```
invalid.css:11:32 lint/suspicious/noDuplicateSelectorsKeyframeBlock ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! The duplicate keyframe selector is overwritten by later one.
+ × The duplicate keyframe selector is overwritten by later one.
9 │ @keyframes foo { 0% {} 0% {} 100% {} }
10 │
@@ -123,7 +124,7 @@ invalid.css:11:32 lint/suspicious/noDuplicateSelectorsKeyframeBlock ━━━━
```
invalid.css:13:29 lint/suspicious/noDuplicateSelectorsKeyframeBlock ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! The duplicate keyframe selector is overwritten by later one.
+ × The duplicate keyframe selector is overwritten by later one.
11 │ @-webkit-keyframes foo { 0% {} 0% {} 100% {} }
12 │
diff --git a/crates/biome_css_analyze/tests/specs/suspicious/noEmptyBlock/invalid.css.snap b/crates/biome_css_analyze/tests/specs/suspicious/noEmptyBlock/invalid.css.snap
index 35fb8ed6f1a1..c564288a9d2b 100644
--- a/crates/biome_css_analyze/tests/specs/suspicious/noEmptyBlock/invalid.css.snap
+++ b/crates/biome_css_analyze/tests/specs/suspicious/noEmptyBlock/invalid.css.snap
@@ -1,6 +1,7 @@
---
source: crates/biome_css_analyze/tests/spec_tests.rs
expression: invalid.css
+snapshot_kind: text
---
# Input
```css
@@ -65,7 +66,7 @@ a {
```
invalid.css:2:3 lint/suspicious/noEmptyBlock ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! An empty block isn't allowed.
+ × An empty block isn't allowed.
1 │ /* CssDeclarationOrRuleBlock */
> 2 │ a {}
@@ -81,7 +82,7 @@ invalid.css:2:3 lint/suspicious/noEmptyBlock ━━━━━━━━━━━
```
invalid.css:3:3 lint/suspicious/noEmptyBlock ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! An empty block isn't allowed.
+ × An empty block isn't allowed.
1 │ /* CssDeclarationOrRuleBlock */
2 │ a {}
@@ -98,7 +99,7 @@ invalid.css:3:3 lint/suspicious/noEmptyBlock ━━━━━━━━━━━
```
invalid.css:4:3 lint/suspicious/noEmptyBlock ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! An empty block isn't allowed.
+ × An empty block isn't allowed.
2 │ a {}
3 │ a { }
@@ -118,7 +119,7 @@ invalid.css:4:3 lint/suspicious/noEmptyBlock ━━━━━━━━━━━
```
invalid.css:8:4 lint/suspicious/noEmptyBlock ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! An empty block isn't allowed.
+ × An empty block isn't allowed.
6 │ }
7 │
@@ -135,7 +136,7 @@ invalid.css:8:4 lint/suspicious/noEmptyBlock ━━━━━━━━━━━
```
invalid.css:9:4 lint/suspicious/noEmptyBlock ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! An empty block isn't allowed.
+ × An empty block isn't allowed.
8 │ .b {}
> 9 │ .b { }
@@ -151,7 +152,7 @@ invalid.css:9:4 lint/suspicious/noEmptyBlock ━━━━━━━━━━━
```
invalid.css:10:4 lint/suspicious/noEmptyBlock ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! An empty block isn't allowed.
+ × An empty block isn't allowed.
8 │ .b {}
9 │ .b { }
@@ -171,7 +172,7 @@ invalid.css:10:4 lint/suspicious/noEmptyBlock ━━━━━━━━━━━
```
invalid.css:15:14 lint/suspicious/noEmptyBlock ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! An empty block isn't allowed.
+ × An empty block isn't allowed.
14 │ /* CssRuleBlock */
> 15 │ @media print {}
@@ -187,7 +188,7 @@ invalid.css:15:14 lint/suspicious/noEmptyBlock ━━━━━━━━━━━
```
invalid.css:16:14 lint/suspicious/noEmptyBlock ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! An empty block isn't allowed.
+ × An empty block isn't allowed.
14 │ /* CssRuleBlock */
15 │ @media print {}
@@ -207,7 +208,7 @@ invalid.css:16:14 lint/suspicious/noEmptyBlock ━━━━━━━━━━━
```
invalid.css:19:18 lint/suspicious/noEmptyBlock ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! An empty block isn't allowed.
+ × An empty block isn't allowed.
18 │ }
> 19 │ @media print { a {} }
@@ -223,7 +224,7 @@ invalid.css:19:18 lint/suspicious/noEmptyBlock ━━━━━━━━━━━
```
invalid.css:22:30 lint/suspicious/noEmptyBlock ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! An empty block isn't allowed.
+ × An empty block isn't allowed.
21 │ /* CssDeclarationBlock */
> 22 │ @font-palette-values --ident {}
@@ -239,7 +240,7 @@ invalid.css:22:30 lint/suspicious/noEmptyBlock ━━━━━━━━━━━
```
invalid.css:23:12 lint/suspicious/noEmptyBlock ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! An empty block isn't allowed.
+ × An empty block isn't allowed.
21 │ /* CssDeclarationBlock */
22 │ @font-palette-values --ident {}
@@ -256,7 +257,7 @@ invalid.css:23:12 lint/suspicious/noEmptyBlock ━━━━━━━━━━━
```
invalid.css:26:20 lint/suspicious/noEmptyBlock ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! An empty block isn't allowed.
+ × An empty block isn't allowed.
25 │ /* CssKeyframesBlock */
> 26 │ @keyframes slidein {}
@@ -272,7 +273,7 @@ invalid.css:26:20 lint/suspicious/noEmptyBlock ━━━━━━━━━━━
```
invalid.css:28:10 lint/suspicious/noEmptyBlock ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! An empty block isn't allowed.
+ × An empty block isn't allowed.
26 │ @keyframes slidein {}
27 │ @keyframes slidein {
@@ -291,7 +292,7 @@ invalid.css:28:10 lint/suspicious/noEmptyBlock ━━━━━━━━━━━
```
invalid.css:38:13 lint/suspicious/noEmptyBlock ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! An empty block isn't allowed.
+ × An empty block isn't allowed.
36 │ /* CssFontFeatureValuesBlock */
37 │ @font-feature-values Font One {
@@ -311,7 +312,7 @@ invalid.css:38:13 lint/suspicious/noEmptyBlock ━━━━━━━━━━━
```
invalid.css:44:7 lint/suspicious/noEmptyBlock ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! An empty block isn't allowed.
+ × An empty block isn't allowed.
43 │ /* CssPageAtRuleBlock */
> 44 │ @page {}
@@ -327,7 +328,7 @@ invalid.css:44:7 lint/suspicious/noEmptyBlock ━━━━━━━━━━━
```
invalid.css:45:14 lint/suspicious/noEmptyBlock ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! An empty block isn't allowed.
+ × An empty block isn't allowed.
43 │ /* CssPageAtRuleBlock */
44 │ @page {}
@@ -345,7 +346,7 @@ invalid.css:45:14 lint/suspicious/noEmptyBlock ━━━━━━━━━━━
```
invalid.css:50:28 lint/suspicious/noEmptyBlock ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! An empty block isn't allowed.
+ × An empty block isn't allowed.
49 │ /* CssDeclarationOrAtRuleBlock */
> 50 │ @page :left { @left-middle {} background: red; }
@@ -361,7 +362,7 @@ invalid.css:50:28 lint/suspicious/noEmptyBlock ━━━━━━━━━━━
```
invalid.css:52:16 lint/suspicious/noEmptyBlock ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! An empty block isn't allowed.
+ × An empty block isn't allowed.
50 │ @page :left { @left-middle {} background: red; }
51 │ @page {
diff --git a/crates/biome_css_analyze/tests/specs/suspicious/noImportantInKeyframe/invalid.css.snap b/crates/biome_css_analyze/tests/specs/suspicious/noImportantInKeyframe/invalid.css.snap
index cac42f18d8d3..bd6dd32ae992 100644
--- a/crates/biome_css_analyze/tests/specs/suspicious/noImportantInKeyframe/invalid.css.snap
+++ b/crates/biome_css_analyze/tests/specs/suspicious/noImportantInKeyframe/invalid.css.snap
@@ -1,6 +1,7 @@
---
source: crates/biome_css_analyze/tests/spec_tests.rs
expression: invalid.css
+snapshot_kind: text
---
# Input
```css
@@ -18,7 +19,7 @@ expression: invalid.css
```
invalid.css:6:16 lint/suspicious/noImportantInKeyframe ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Using !important within keyframes declaration is completely ignored in some browsers.
+ × Using !important within keyframes declaration is completely ignored in some browsers.
4 │ }
5 │ to {
diff --git a/crates/biome_css_analyze/tests/specs/suspicious/noShorthandPropertyOverrides/invalid.css.snap b/crates/biome_css_analyze/tests/specs/suspicious/noShorthandPropertyOverrides/invalid.css.snap
index 8d5b19e31ab4..ec3c8d2f87f8 100644
--- a/crates/biome_css_analyze/tests/specs/suspicious/noShorthandPropertyOverrides/invalid.css.snap
+++ b/crates/biome_css_analyze/tests/specs/suspicious/noShorthandPropertyOverrides/invalid.css.snap
@@ -1,6 +1,7 @@
---
source: crates/biome_css_analyze/tests/spec_tests.rs
expression: invalid.css
+snapshot_kind: text
---
# Input
```css
@@ -48,7 +49,7 @@ a { padding-left: 10px; padding-right: 10px; padding: 20px; }
```
invalid.css:1:25 lint/suspicious/noShorthandPropertyOverrides ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Unexpected shorthand property padding after padding-left
+ × Unexpected shorthand property padding after padding-left
> 1 │ a { padding-left: 10px; padding: 20px; }
│ ^^^^^^^
@@ -61,7 +62,7 @@ invalid.css:1:25 lint/suspicious/noShorthandPropertyOverrides ━━━━━━
```
invalid.css:3:25 lint/suspicious/noShorthandPropertyOverrides ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Unexpected shorthand property border after border-width
+ × Unexpected shorthand property border after border-width
1 │ a { padding-left: 10px; padding: 20px; }
2 │
@@ -76,7 +77,7 @@ invalid.css:3:25 lint/suspicious/noShorthandPropertyOverrides ━━━━━━
```
invalid.css:5:24 lint/suspicious/noShorthandPropertyOverrides ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Unexpected shorthand property border after border-color
+ × Unexpected shorthand property border after border-color
3 │ a { border-width: 20px; border: 1px solid black; }
4 │
@@ -91,7 +92,7 @@ invalid.css:5:24 lint/suspicious/noShorthandPropertyOverrides ━━━━━━
```
invalid.css:7:27 lint/suspicious/noShorthandPropertyOverrides ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Unexpected shorthand property border after border-style
+ × Unexpected shorthand property border after border-style
5 │ a { border-color: red; border: 1px solid black; }
6 │
@@ -106,7 +107,7 @@ invalid.css:7:27 lint/suspicious/noShorthandPropertyOverrides ━━━━━━
```
invalid.css:9:35 lint/suspicious/noShorthandPropertyOverrides ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Unexpected shorthand property border after border-image
+ × Unexpected shorthand property border after border-image
7 │ a { border-style: dotted; border: 1px solid black; }
8 │
@@ -121,7 +122,7 @@ invalid.css:9:35 lint/suspicious/noShorthandPropertyOverrides ━━━━━━
```
invalid.css:11:42 lint/suspicious/noShorthandPropertyOverrides ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Unexpected shorthand property border after border-image-source
+ × Unexpected shorthand property border after border-image-source
9 │ a { border-image: url("foo.png"); border: 1px solid black; }
10 │
@@ -136,7 +137,7 @@ invalid.css:11:42 lint/suspicious/noShorthandPropertyOverrides ━━━━━
```
invalid.css:13:25 lint/suspicious/noShorthandPropertyOverrides ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Unexpected shorthand property pAdDiNg after pAdDiNg-lEfT
+ × Unexpected shorthand property pAdDiNg after pAdDiNg-lEfT
11 │ a { border-image-source: url("foo.png"); border: 1px solid black; }
12 │
@@ -151,7 +152,7 @@ invalid.css:13:25 lint/suspicious/noShorthandPropertyOverrides ━━━━━
```
invalid.css:15:25 lint/suspicious/noShorthandPropertyOverrides ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Unexpected shorthand property PADDING after PADDING-LEFT
+ × Unexpected shorthand property PADDING after PADDING-LEFT
13 │ a { pAdDiNg-lEfT: 10Px; pAdDiNg: 20Px; }
14 │
@@ -166,7 +167,7 @@ invalid.css:15:25 lint/suspicious/noShorthandPropertyOverrides ━━━━━
```
invalid.css:17:49 lint/suspicious/noShorthandPropertyOverrides ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Unexpected shorthand property border after border-top-width
+ × Unexpected shorthand property border after border-top-width
15 │ a { PADDING-LEFT: 10PX; PADDING: 20PX; }
16 │
@@ -181,7 +182,7 @@ invalid.css:17:49 lint/suspicious/noShorthandPropertyOverrides ━━━━━
```
invalid.css:19:35 lint/suspicious/noShorthandPropertyOverrides ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Unexpected shorthand property transition after transition-property
+ × Unexpected shorthand property transition after transition-property
17 │ a { border-top-width: 1px; top: 0; bottom: 3px; border: 2px solid blue; }
18 │
@@ -196,7 +197,7 @@ invalid.css:19:35 lint/suspicious/noShorthandPropertyOverrides ━━━━━
```
invalid.css:21:35 lint/suspicious/noShorthandPropertyOverrides ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Unexpected shorthand property background after background-repeat
+ × Unexpected shorthand property background after background-repeat
19 │ a { transition-property: opacity; transition: opacity 1s linear; }
20 │
@@ -211,7 +212,7 @@ invalid.css:21:35 lint/suspicious/noShorthandPropertyOverrides ━━━━━
```
invalid.css:23:52 lint/suspicious/noShorthandPropertyOverrides ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Unexpected shorthand property background after background-repeat
+ × Unexpected shorthand property background after background-repeat
21 │ a { background-repeat: no-repeat; background: url(lion.png); }
22 │
@@ -226,7 +227,7 @@ invalid.css:23:52 lint/suspicious/noShorthandPropertyOverrides ━━━━━
```
invalid.css:25:43 lint/suspicious/noShorthandPropertyOverrides ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Unexpected shorthand property -webkit-transition after -webkit-transition-property
+ × Unexpected shorthand property -webkit-transition after -webkit-transition-property
23 │ @media (color) { a { background-repeat: no-repeat; background: url(lion.png); }}
24 │
@@ -241,7 +242,7 @@ invalid.css:25:43 lint/suspicious/noShorthandPropertyOverrides ━━━━━
```
invalid.css:27:43 lint/suspicious/noShorthandPropertyOverrides ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Unexpected shorthand property -webKIT-transition after -WEBKIT-transition-property
+ × Unexpected shorthand property -webKIT-transition after -WEBKIT-transition-property
25 │ a { -webkit-transition-property: opacity; -webkit-transition: opacity 1s linear; }
26 │
@@ -256,7 +257,7 @@ invalid.css:27:43 lint/suspicious/noShorthandPropertyOverrides ━━━━━
```
invalid.css:29:31 lint/suspicious/noShorthandPropertyOverrides ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Unexpected shorthand property font after font-variant
+ × Unexpected shorthand property font after font-variant
27 │ a { -WEBKIT-transition-property: opacity; -webKIT-transition: opacity 1s linear; }
28 │
@@ -271,7 +272,7 @@ invalid.css:29:31 lint/suspicious/noShorthandPropertyOverrides ━━━━━
```
invalid.css:31:35 lint/suspicious/noShorthandPropertyOverrides ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Unexpected shorthand property font after font-variant
+ × Unexpected shorthand property font after font-variant
29 │ a { font-variant: small-caps; font: sans-serif; }
30 │
@@ -286,7 +287,7 @@ invalid.css:31:35 lint/suspicious/noShorthandPropertyOverrides ━━━━━
```
invalid.css:33:30 lint/suspicious/noShorthandPropertyOverrides ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Unexpected shorthand property font after font-size-adjust
+ × Unexpected shorthand property font after font-size-adjust
31 │ a { font-variant: all-small-caps; font: sans-serif; }
32 │
@@ -301,7 +302,7 @@ invalid.css:33:30 lint/suspicious/noShorthandPropertyOverrides ━━━━━
```
invalid.css:35:25 lint/suspicious/noShorthandPropertyOverrides ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Unexpected shorthand property padding after padding-left
+ × Unexpected shorthand property padding after padding-left
33 │ a { font-size-adjust: 0.545; font: Verdana; }
34 │
@@ -316,7 +317,7 @@ invalid.css:35:25 lint/suspicious/noShorthandPropertyOverrides ━━━━━
```
invalid.css:35:60 lint/suspicious/noShorthandPropertyOverrides ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Unexpected shorthand property border after border-width
+ × Unexpected shorthand property border after border-width
33 │ a { font-size-adjust: 0.545; font: Verdana; }
34 │
@@ -331,7 +332,7 @@ invalid.css:35:60 lint/suspicious/noShorthandPropertyOverrides ━━━━━
```
invalid.css:37:46 lint/suspicious/noShorthandPropertyOverrides ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Unexpected shorthand property padding after padding-left
+ × Unexpected shorthand property padding after padding-left
35 │ a { padding-left: 10px; padding: 20px; border-width: 20px; border: 1px solid black; }
36 │
@@ -345,7 +346,7 @@ invalid.css:37:46 lint/suspicious/noShorthandPropertyOverrides ━━━━━
```
invalid.css:37:46 lint/suspicious/noShorthandPropertyOverrides ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Unexpected shorthand property padding after padding-right
+ × Unexpected shorthand property padding after padding-right
35 │ a { padding-left: 10px; padding: 20px; border-width: 20px; border: 1px solid black; }
36 │
diff --git a/crates/biome_css_analyze/tests/suppression/suspicious/noDuplicateFontNames/noDuplicateFontNames.css.snap b/crates/biome_css_analyze/tests/suppression/suspicious/noDuplicateFontNames/noDuplicateFontNames.css.snap
index fe30e2c72572..263565d65f1f 100644
--- a/crates/biome_css_analyze/tests/suppression/suspicious/noDuplicateFontNames/noDuplicateFontNames.css.snap
+++ b/crates/biome_css_analyze/tests/suppression/suspicious/noDuplicateFontNames/noDuplicateFontNames.css.snap
@@ -17,7 +17,7 @@ b { font: normal 14px/32px -apple-system, BlinkMacSystemFont, sans-serif, sans-s
```
noDuplicateFontNames.css:1:56 lint/suspicious/noDuplicateFontNames FIXABLE ━━━━━━━━━━━━━━━━━━━━━━━
- ! Duplicate font names are redundant and unnecessary: sans-serif
+ × Duplicate font names are redundant and unnecessary: sans-serif
> 1 │ a { font-family: "Lucida Grande", 'Arial', sans-serif, sans-serif; }
│ ^^^^^^^^^^
@@ -47,7 +47,7 @@ noDuplicateFontNames.css:1:56 lint/suspicious/noDuplicateFontNames FIXABLE ━
```
noDuplicateFontNames.css:2:44 lint/suspicious/noDuplicateFontNames FIXABLE ━━━━━━━━━━━━━━━━━━━━━━━
- ! Duplicate font names are redundant and unnecessary: Arial
+ × Duplicate font names are redundant and unnecessary: Arial
1 │ a { font-family: "Lucida Grande", 'Arial', sans-serif, sans-serif; }
> 2 │ a { font-family: 'Arial', "Lucida Grande", Arial, sans-serif; }
@@ -79,7 +79,7 @@ noDuplicateFontNames.css:2:44 lint/suspicious/noDuplicateFontNames FIXABLE ━
```
noDuplicateFontNames.css:3:35 lint/suspicious/noDuplicateFontNames FIXABLE ━━━━━━━━━━━━━━━━━━━━━━━
- ! Duplicate font names are redundant and unnecessary: LucidaGrande
+ × Duplicate font names are redundant and unnecessary: LucidaGrande
1 │ a { font-family: "Lucida Grande", 'Arial', sans-serif, sans-serif; }
2 │ a { font-family: 'Arial', "Lucida Grande", Arial, sans-serif; }
@@ -113,7 +113,7 @@ noDuplicateFontNames.css:3:35 lint/suspicious/noDuplicateFontNames FIXABLE ━
```
noDuplicateFontNames.css:4:27 lint/suspicious/noDuplicateFontNames FIXABLE ━━━━━━━━━━━━━━━━━━━━━━━
- ! Duplicate font names are redundant and unnecessary: Times
+ × Duplicate font names are redundant and unnecessary: Times
2 │ a { font-family: 'Arial', "Lucida Grande", Arial, sans-serif; }
3 │ a { fOnT-fAmIlY: "Lucida Grande", ' Lucida Grande ', sans-serif; }
@@ -147,7 +147,7 @@ noDuplicateFontNames.css:4:27 lint/suspicious/noDuplicateFontNames FIXABLE ━
```
noDuplicateFontNames.css:5:39 lint/suspicious/noDuplicateFontNames FIXABLE ━━━━━━━━━━━━━━━━━━━━━━━
- ! Duplicate font names are redundant and unnecessary: Arial
+ × Duplicate font names are redundant and unnecessary: Arial
3 │ a { fOnT-fAmIlY: "Lucida Grande", ' Lucida Grande ', sans-serif; }
4 │ a { font-family: 'Times', Times }
@@ -179,7 +179,7 @@ noDuplicateFontNames.css:5:39 lint/suspicious/noDuplicateFontNames FIXABLE ━
```
noDuplicateFontNames.css:6:75 lint/suspicious/noDuplicateFontNames FIXABLE ━━━━━━━━━━━━━━━━━━━━━━━
- ! Duplicate font names are redundant and unnecessary: sans-serif
+ × Duplicate font names are redundant and unnecessary: sans-serif
4 │ a { font-family: 'Times', Times }
5 │ a { FONT: italic 300 16px/30px Arial, " Arial", serif; }
diff --git a/crates/biome_css_analyze/tests/suppression/suspicious/noEmptyBlock/noEmptyBlock.css.snap b/crates/biome_css_analyze/tests/suppression/suspicious/noEmptyBlock/noEmptyBlock.css.snap
index b66abb6b9b65..8acef973cba9 100644
--- a/crates/biome_css_analyze/tests/suppression/suspicious/noEmptyBlock/noEmptyBlock.css.snap
+++ b/crates/biome_css_analyze/tests/suppression/suspicious/noEmptyBlock/noEmptyBlock.css.snap
@@ -66,7 +66,7 @@ a {
```
noEmptyBlock.css:2:3 lint/suspicious/noEmptyBlock FIXABLE ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! An empty block isn't allowed.
+ × An empty block isn't allowed.
1 │ /* CssDeclarationOrRuleBlock */
> 2 │ a {}
@@ -99,7 +99,7 @@ noEmptyBlock.css:2:3 lint/suspicious/noEmptyBlock FIXABLE ━━━━━━
```
noEmptyBlock.css:3:3 lint/suspicious/noEmptyBlock FIXABLE ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! An empty block isn't allowed.
+ × An empty block isn't allowed.
1 │ /* CssDeclarationOrRuleBlock */
2 │ a {}
@@ -134,7 +134,7 @@ noEmptyBlock.css:3:3 lint/suspicious/noEmptyBlock FIXABLE ━━━━━━
```
noEmptyBlock.css:4:3 lint/suspicious/noEmptyBlock FIXABLE ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! An empty block isn't allowed.
+ × An empty block isn't allowed.
2 │ a {}
3 │ a { }
@@ -172,7 +172,7 @@ noEmptyBlock.css:4:3 lint/suspicious/noEmptyBlock FIXABLE ━━━━━━
```
noEmptyBlock.css:8:4 lint/suspicious/noEmptyBlock FIXABLE ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! An empty block isn't allowed.
+ × An empty block isn't allowed.
6 │ }
7 │
@@ -205,7 +205,7 @@ noEmptyBlock.css:8:4 lint/suspicious/noEmptyBlock FIXABLE ━━━━━━
```
noEmptyBlock.css:9:4 lint/suspicious/noEmptyBlock FIXABLE ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! An empty block isn't allowed.
+ × An empty block isn't allowed.
8 │ .b {}
> 9 │ .b { }
@@ -237,7 +237,7 @@ noEmptyBlock.css:9:4 lint/suspicious/noEmptyBlock FIXABLE ━━━━━━
```
noEmptyBlock.css:10:4 lint/suspicious/noEmptyBlock FIXABLE ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! An empty block isn't allowed.
+ × An empty block isn't allowed.
8 │ .b {}
9 │ .b { }
@@ -273,7 +273,7 @@ noEmptyBlock.css:10:4 lint/suspicious/noEmptyBlock FIXABLE ━━━━━━
```
noEmptyBlock.css:15:14 lint/suspicious/noEmptyBlock FIXABLE ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! An empty block isn't allowed.
+ × An empty block isn't allowed.
14 │ /* CssRuleBlock */
> 15 │ @media print {}
@@ -305,7 +305,7 @@ noEmptyBlock.css:15:14 lint/suspicious/noEmptyBlock FIXABLE ━━━━━━
```
noEmptyBlock.css:16:14 lint/suspicious/noEmptyBlock FIXABLE ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! An empty block isn't allowed.
+ × An empty block isn't allowed.
14 │ /* CssRuleBlock */
15 │ @media print {}
@@ -341,7 +341,7 @@ noEmptyBlock.css:16:14 lint/suspicious/noEmptyBlock FIXABLE ━━━━━━
```
noEmptyBlock.css:19:18 lint/suspicious/noEmptyBlock FIXABLE ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! An empty block isn't allowed.
+ × An empty block isn't allowed.
18 │ }
> 19 │ @media print { a {} }
@@ -373,7 +373,7 @@ noEmptyBlock.css:19:18 lint/suspicious/noEmptyBlock FIXABLE ━━━━━━
```
noEmptyBlock.css:22:30 lint/suspicious/noEmptyBlock FIXABLE ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! An empty block isn't allowed.
+ × An empty block isn't allowed.
21 │ /* CssDeclarationBlock */
> 22 │ @font-palette-values --ident {}
@@ -405,7 +405,7 @@ noEmptyBlock.css:22:30 lint/suspicious/noEmptyBlock FIXABLE ━━━━━━
```
noEmptyBlock.css:23:12 lint/suspicious/noEmptyBlock FIXABLE ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! An empty block isn't allowed.
+ × An empty block isn't allowed.
21 │ /* CssDeclarationBlock */
22 │ @font-palette-values --ident {}
@@ -438,7 +438,7 @@ noEmptyBlock.css:23:12 lint/suspicious/noEmptyBlock FIXABLE ━━━━━━
```
noEmptyBlock.css:26:20 lint/suspicious/noEmptyBlock FIXABLE ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! An empty block isn't allowed.
+ × An empty block isn't allowed.
25 │ /* CssKeyframesBlock */
> 26 │ @keyframes slidein {}
@@ -470,7 +470,7 @@ noEmptyBlock.css:26:20 lint/suspicious/noEmptyBlock FIXABLE ━━━━━━
```
noEmptyBlock.css:28:10 lint/suspicious/noEmptyBlock FIXABLE ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! An empty block isn't allowed.
+ × An empty block isn't allowed.
26 │ @keyframes slidein {}
27 │ @keyframes slidein {
@@ -507,7 +507,7 @@ noEmptyBlock.css:28:10 lint/suspicious/noEmptyBlock FIXABLE ━━━━━━
```
noEmptyBlock.css:38:13 lint/suspicious/noEmptyBlock FIXABLE ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! An empty block isn't allowed.
+ × An empty block isn't allowed.
36 │ /* CssFontFeatureValuesBlock */
37 │ @font-feature-values Font One {
@@ -545,7 +545,7 @@ noEmptyBlock.css:38:13 lint/suspicious/noEmptyBlock FIXABLE ━━━━━━
```
noEmptyBlock.css:44:7 lint/suspicious/noEmptyBlock FIXABLE ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! An empty block isn't allowed.
+ × An empty block isn't allowed.
43 │ /* CssPageAtRuleBlock */
> 44 │ @page {}
@@ -577,7 +577,7 @@ noEmptyBlock.css:44:7 lint/suspicious/noEmptyBlock FIXABLE ━━━━━━
```
noEmptyBlock.css:45:14 lint/suspicious/noEmptyBlock FIXABLE ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! An empty block isn't allowed.
+ × An empty block isn't allowed.
43 │ /* CssPageAtRuleBlock */
44 │ @page {}
@@ -611,7 +611,7 @@ noEmptyBlock.css:45:14 lint/suspicious/noEmptyBlock FIXABLE ━━━━━━
```
noEmptyBlock.css:50:28 lint/suspicious/noEmptyBlock FIXABLE ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! An empty block isn't allowed.
+ × An empty block isn't allowed.
49 │ /* CssDeclarationOrAtRuleBlock */
> 50 │ @page :left { @left-middle {} background: red; }
@@ -643,7 +643,7 @@ noEmptyBlock.css:50:28 lint/suspicious/noEmptyBlock FIXABLE ━━━━━━
```
noEmptyBlock.css:52:16 lint/suspicious/noEmptyBlock FIXABLE ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! An empty block isn't allowed.
+ × An empty block isn't allowed.
50 │ @page :left { @left-middle {} background: red; }
51 │ @page {
diff --git a/crates/biome_graphql_analyze/tests/spec_tests.rs b/crates/biome_graphql_analyze/tests/spec_tests.rs
index 5ba7d5fd70fb..730dba5f5238 100644
--- a/crates/biome_graphql_analyze/tests/spec_tests.rs
+++ b/crates/biome_graphql_analyze/tests/spec_tests.rs
@@ -1,6 +1,5 @@
use biome_analyze::{AnalysisFilter, AnalyzerAction, ControlFlow, Never, RuleFilter};
use biome_diagnostics::advice::CodeSuggestionAdvice;
-use biome_diagnostics::{DiagnosticExt, Severity};
use biome_graphql_parser::parse_graphql;
use biome_graphql_syntax::{GraphqlFileSource, GraphqlLanguage};
use biome_rowan::AstNode;
@@ -119,8 +118,7 @@ pub(crate) fn analyze_and_snap(
}
}
- let error = diag.with_severity(Severity::Warning);
- diagnostics.push(diagnostic_to_string(file_name, input_code, error));
+ diagnostics.push(diagnostic_to_string(file_name, input_code, diag.into()));
return ControlFlow::Continue(());
}
diff --git a/crates/biome_graphql_analyze/tests/specs/nursery/noDuplicatedFields/invalid.graphql.snap b/crates/biome_graphql_analyze/tests/specs/nursery/noDuplicatedFields/invalid.graphql.snap
index 149b449cbe16..05d355409a2f 100644
--- a/crates/biome_graphql_analyze/tests/specs/nursery/noDuplicatedFields/invalid.graphql.snap
+++ b/crates/biome_graphql_analyze/tests/specs/nursery/noDuplicatedFields/invalid.graphql.snap
@@ -1,6 +1,7 @@
---
source: crates/biome_graphql_analyze/tests/spec_tests.rs
expression: invalid.graphql
+snapshot_kind: text
---
# Input
```graphql
@@ -38,7 +39,7 @@ query test {
```
invalid.graphql:1:36 lint/nursery/noDuplicatedFields ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Variable `v` defined multiple times.
+ i Variable `v` defined multiple times.
> 1 │ query test($v: String, $t: String, $v: String) {
│ ^^^^^^^^^^
@@ -53,7 +54,7 @@ invalid.graphql:1:36 lint/nursery/noDuplicatedFields ━━━━━━━━━
```
invalid.graphql:6:48 lint/nursery/noDuplicatedFields ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Argument `first` defined multiple times.
+ i Argument `first` defined multiple times.
5 │ query test {
> 6 │ users(first: 100, after: 10, filter: "test", first: 50) {
@@ -69,7 +70,7 @@ invalid.graphql:6:48 lint/nursery/noDuplicatedFields ━━━━━━━━━
```
invalid.graphql:16:5 lint/nursery/noDuplicatedFields ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Field `name` defined multiple times.
+ i Field `name` defined multiple times.
14 │ name
15 │ email
@@ -86,7 +87,7 @@ invalid.graphql:16:5 lint/nursery/noDuplicatedFields ━━━━━━━━━
```
invalid.graphql:25:5 lint/nursery/noDuplicatedFields ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Field `email` defined multiple times.
+ i Field `email` defined multiple times.
23 │ name
24 │ email
diff --git a/crates/biome_graphql_analyze/tests/specs/nursery/useDeprecatedReason/invalid.graphql.snap b/crates/biome_graphql_analyze/tests/specs/nursery/useDeprecatedReason/invalid.graphql.snap
index 958708f2512a..0726f7f7bd5d 100644
--- a/crates/biome_graphql_analyze/tests/specs/nursery/useDeprecatedReason/invalid.graphql.snap
+++ b/crates/biome_graphql_analyze/tests/specs/nursery/useDeprecatedReason/invalid.graphql.snap
@@ -1,6 +1,7 @@
---
source: crates/biome_graphql_analyze/tests/spec_tests.rs
expression: invalid.graphql
+snapshot_kind: text
---
# Input
```graphql
@@ -24,7 +25,7 @@ query {
```
invalid.graphql:2:10 lint/nursery/useDeprecatedReason ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! The directive `@deprecated` should have a `reason` argument.
+ i The directive `@deprecated` should have a `reason` argument.
1 │ query {
> 2 │ member @deprecated {
@@ -40,7 +41,7 @@ invalid.graphql:2:10 lint/nursery/useDeprecatedReason ━━━━━━━━
```
invalid.graphql:8:10 lint/nursery/useDeprecatedReason ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! The directive `@deprecated` should have a `reason` argument.
+ i The directive `@deprecated` should have a `reason` argument.
7 │ query {
> 8 │ member @deprecated()
@@ -56,7 +57,7 @@ invalid.graphql:8:10 lint/nursery/useDeprecatedReason ━━━━━━━━
```
invalid.graphql:12:10 lint/nursery/useDeprecatedReason ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! The directive `@deprecated` should have a `reason` argument.
+ i The directive `@deprecated` should have a `reason` argument.
11 │ query {
> 12 │ member @deprecated(abc: 123)
diff --git a/crates/biome_graphql_analyze/tests/specs/nursery/useNamedOperation/invalid.graphql.snap b/crates/biome_graphql_analyze/tests/specs/nursery/useNamedOperation/invalid.graphql.snap
index 87e26fd85473..9cb6d0401692 100644
--- a/crates/biome_graphql_analyze/tests/specs/nursery/useNamedOperation/invalid.graphql.snap
+++ b/crates/biome_graphql_analyze/tests/specs/nursery/useNamedOperation/invalid.graphql.snap
@@ -1,6 +1,7 @@
---
source: crates/biome_graphql_analyze/tests/spec_tests.rs
expression: invalid.graphql
+snapshot_kind: text
---
# Input
```graphql
@@ -14,7 +15,7 @@ subscription {}
```
invalid.graphql:1:1 lint/nursery/useNamedOperation FIXABLE ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Anonymous GraphQL operations are forbidden. Make sure to name your query.
+ i Anonymous GraphQL operations are forbidden. Make sure to name your query.
> 1 │ query { human }
│ ^^^^^
@@ -33,7 +34,7 @@ invalid.graphql:1:1 lint/nursery/useNamedOperation FIXABLE ━━━━━━
```
invalid.graphql:2:1 lint/nursery/useNamedOperation FIXABLE ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Anonymous GraphQL operations are forbidden. Make sure to name your mutation.
+ i Anonymous GraphQL operations are forbidden. Make sure to name your mutation.
1 │ query { human }
> 2 │ mutation { ...Type }
@@ -53,7 +54,7 @@ invalid.graphql:2:1 lint/nursery/useNamedOperation FIXABLE ━━━━━━
```
invalid.graphql:3:1 lint/nursery/useNamedOperation FIXABLE ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Anonymous GraphQL operations are forbidden. Make sure to name your subscription.
+ i Anonymous GraphQL operations are forbidden. Make sure to name your subscription.
1 │ query { human }
2 │ mutation { ...Type }
diff --git a/crates/biome_graphql_analyze/tests/specs/nursery/useNamingConvention/invalid.graphql.snap b/crates/biome_graphql_analyze/tests/specs/nursery/useNamingConvention/invalid.graphql.snap
index 088b281343c3..09f336ba6e4d 100644
--- a/crates/biome_graphql_analyze/tests/specs/nursery/useNamingConvention/invalid.graphql.snap
+++ b/crates/biome_graphql_analyze/tests/specs/nursery/useNamingConvention/invalid.graphql.snap
@@ -15,7 +15,7 @@ enum Status {
```
invalid.graphql:2:2 lint/nursery/useNamingConvention ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Enum values should be in all caps.
+ i Enum values should be in all caps.
1 │ enum Status {
> 2 │ Active
diff --git a/crates/biome_graphql_analyze/tests/suppression/nursery/noDuplicatedFields/noDuplicatedFields.graphql.snap b/crates/biome_graphql_analyze/tests/suppression/nursery/noDuplicatedFields/noDuplicatedFields.graphql.snap
index 7df51ba1f2eb..810535279868 100644
--- a/crates/biome_graphql_analyze/tests/suppression/nursery/noDuplicatedFields/noDuplicatedFields.graphql.snap
+++ b/crates/biome_graphql_analyze/tests/suppression/nursery/noDuplicatedFields/noDuplicatedFields.graphql.snap
@@ -40,7 +40,7 @@ query test {
```
noDuplicatedFields.graphql:1:36 lint/nursery/noDuplicatedFields FIXABLE ━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Variable `v` defined multiple times.
+ i Variable `v` defined multiple times.
> 1 │ query test($v: String, $t: String, $v: String) {
│ ^^^^^^^^^^
@@ -70,7 +70,7 @@ noDuplicatedFields.graphql:1:36 lint/nursery/noDuplicatedFields FIXABLE ━━
```
noDuplicatedFields.graphql:6:48 lint/nursery/noDuplicatedFields FIXABLE ━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Argument `first` defined multiple times.
+ i Argument `first` defined multiple times.
5 │ query test {
> 6 │ users(first: 100, after: 10, filter: "test", first: 50) {
@@ -103,7 +103,7 @@ noDuplicatedFields.graphql:6:48 lint/nursery/noDuplicatedFields FIXABLE ━━
```
noDuplicatedFields.graphql:16:5 lint/nursery/noDuplicatedFields FIXABLE ━━━━━━━━━━━━━━━━━━━━━━━━━━
- ! Field `name` defined multiple times.
+ i Field `name` defined multiple times.
14 │ name
15 │ email
diff --git a/crates/biome_graphql_analyze/tests/suppression/nursery/useDeprecatedReason/useDeprecatedReason.graphql.snap b/crates/biome_graphql_analyze/tests/suppression/nursery/useDeprecatedReason/useDeprecatedReason.graphql.snap
index 3cd7b9e005a8..420da214a484 100644
--- a/crates/biome_graphql_analyze/tests/suppression/nursery/useDeprecatedReason/useDeprecatedReason.graphql.snap
+++ b/crates/biome_graphql_analyze/tests/suppression/nursery/useDeprecatedReason/useDeprecatedReason.graphql.snap
@@ -32,7 +32,7 @@ query {
```
useDeprecatedReason.graphql:2:10 lint/nursery/useDeprecatedReason FIXABLE ━━━━━━━━━━━━━━━━━━━━━━━━
- ! The directive `@deprecated` should have a `reason` argument.
+ i The directive `@deprecated` should have a `reason` argument.
1 │ query {
> 2 │ member @deprecated {
@@ -64,7 +64,7 @@ useDeprecatedReason.graphql:2:10 lint/nursery/useDeprecatedReason FIXABLE ━
```
useDeprecatedReason.graphql:8:10 lint/nursery/useDeprecatedReason FIXABLE ━━━━━━━━━━━━━━━━━━━━━━━━
- ! The directive `@deprecated` should have a `reason` argument.
+ i The directive `@deprecated` should have a `reason` argument.
7 │ query {
> 8 │ member @deprecated()
@@ -97,7 +97,7 @@ useDeprecatedReason.graphql:8:10 lint/nursery/useDeprecatedReason FIXABLE ━
```
useDeprecatedReason.graphql:13:3 lint/nursery/useDeprecatedReason FIXABLE ━━━━━━━━━━━━━━━━━━━━━━━━
- ! The directive `@deprecated` should have a `reason` argument.
+ i The directive `@deprecated` should have a `reason` argument.
11 │ query {
12 │ member
diff --git a/crates/biome_js_analyze/src/lint/complexity/no_for_each.rs b/crates/biome_js_analyze/src/lint/complexity/no_for_each.rs
index df8cdab7a91e..03e5686d12fc 100644
--- a/crates/biome_js_analyze/src/lint/complexity/no_for_each.rs
+++ b/crates/biome_js_analyze/src/lint/complexity/no_for_each.rs
@@ -99,8 +99,7 @@ declare_lint_rule! {
RuleSource::EslintUnicorn("no-array-for-each"),
RuleSource::Clippy("needless_for_each"),
],
- recommended: true,
- severity: Severity::Error,
+ severity: Severity::Warning,
}
}
diff --git a/crates/biome_js_analyze/src/lint/complexity/no_this_in_static.rs b/crates/biome_js_analyze/src/lint/complexity/no_this_in_static.rs
index 0f1ae1da17c1..2cfb2bb02496 100644
--- a/crates/biome_js_analyze/src/lint/complexity/no_this_in_static.rs
+++ b/crates/biome_js_analyze/src/lint/complexity/no_this_in_static.rs
@@ -83,7 +83,7 @@ declare_lint_rule! {
language: "js",
sources: &[RuleSource::EslintMysticatea("no-this-in-static")],
recommended: true,
- severity: Severity::Error,
+ severity: Severity::Warning,
fix_kind: FixKind::Unsafe,
}
}
diff --git a/crates/biome_js_analyze/src/lint/complexity/no_useless_catch.rs b/crates/biome_js_analyze/src/lint/complexity/no_useless_catch.rs
index 3d0be8e5c226..3d0c75765ecb 100644
--- a/crates/biome_js_analyze/src/lint/complexity/no_useless_catch.rs
+++ b/crates/biome_js_analyze/src/lint/complexity/no_useless_catch.rs
@@ -70,7 +70,7 @@ declare_lint_rule! {
language: "js",
sources: &[RuleSource::Eslint("no-useless-catch")],
recommended: true,
- severity: Severity::Error,
+ severity: Severity::Information,
fix_kind: FixKind::Unsafe,
}
}
diff --git a/crates/biome_js_analyze/src/lint/complexity/no_useless_constructor.rs b/crates/biome_js_analyze/src/lint/complexity/no_useless_constructor.rs
index 1b302e17ac1d..68a73d17e46a 100644
--- a/crates/biome_js_analyze/src/lint/complexity/no_useless_constructor.rs
+++ b/crates/biome_js_analyze/src/lint/complexity/no_useless_constructor.rs
@@ -123,7 +123,7 @@ declare_lint_rule! {
RuleSource::EslintTypeScript("no-useless-constructor"),
],
recommended: true,
- severity: Severity::Error,
+ severity: Severity::Information,
fix_kind: FixKind::Unsafe,
}
}
diff --git a/crates/biome_js_analyze/src/lint/complexity/no_useless_empty_export.rs b/crates/biome_js_analyze/src/lint/complexity/no_useless_empty_export.rs
index b88ed330cc1f..49591910eed8 100644
--- a/crates/biome_js_analyze/src/lint/complexity/no_useless_empty_export.rs
+++ b/crates/biome_js_analyze/src/lint/complexity/no_useless_empty_export.rs
@@ -47,7 +47,7 @@ declare_lint_rule! {
language: "ts",
sources: &[RuleSource::EslintTypeScript("no-useless-empty-export")],
recommended: true,
- severity: Severity::Error,
+ severity: Severity::Information,
fix_kind: FixKind::Safe,
}
}
diff --git a/crates/biome_js_analyze/src/lint/complexity/no_useless_fragments.rs b/crates/biome_js_analyze/src/lint/complexity/no_useless_fragments.rs
index dcd927bdc637..e1decac34aa0 100644
--- a/crates/biome_js_analyze/src/lint/complexity/no_useless_fragments.rs
+++ b/crates/biome_js_analyze/src/lint/complexity/no_useless_fragments.rs
@@ -66,7 +66,7 @@ declare_lint_rule! {
language: "jsx",
sources: &[RuleSource::EslintReact("jsx-no-useless-fragment")],
recommended: true,
- severity: Severity::Error,
+ severity: Severity::Information,
fix_kind: FixKind::Unsafe,
}
}
@@ -444,7 +444,7 @@ impl Rule for NoUselessFragments {
rule_category!(),
node.syntax().text_trimmed_range(),
markup! {
- "Avoid using unnecessary "