diff --git a/crates/biome_tailwind_factory/src/generated/node_factory.rs b/crates/biome_tailwind_factory/src/generated/node_factory.rs index 76f7868ee2ac..ddad208a832b 100644 --- a/crates/biome_tailwind_factory/src/generated/node_factory.rs +++ b/crates/biome_tailwind_factory/src/generated/node_factory.rs @@ -235,25 +235,16 @@ pub fn tw_static_variant(base_token: SyntaxToken) -> TwStaticVariant { [Some(SyntaxElement::Token(base_token))], )) } -pub fn tw_candidate_list(items: I, separators: S) -> TwCandidateList +pub fn tw_candidate_list(items: I) -> TwCandidateList where I: IntoIterator, I::IntoIter: ExactSizeIterator, - S: IntoIterator, - S::IntoIter: ExactSizeIterator, { - let mut items = items.into_iter(); - let mut separators = separators.into_iter(); - let length = items.len() + separators.len(); TwCandidateList::unwrap_cast(SyntaxNode::new_detached( TailwindSyntaxKind::TW_CANDIDATE_LIST, - (0..length).map(|index| { - if index % 2 == 0 { - Some(items.next()?.into_syntax().into()) - } else { - Some(separators.next()?.into()) - } - }), + items + .into_iter() + .map(|item| Some(item.into_syntax().into())), )) } pub fn tw_variant_list(items: I, separators: S) -> TwVariantList diff --git a/crates/biome_tailwind_factory/src/generated/syntax_factory.rs b/crates/biome_tailwind_factory/src/generated/syntax_factory.rs index 2af41f08ddaf..b9cbe2494ebc 100644 --- a/crates/biome_tailwind_factory/src/generated/syntax_factory.rs +++ b/crates/biome_tailwind_factory/src/generated/syntax_factory.rs @@ -395,13 +395,9 @@ impl SyntaxFactory for TailwindSyntaxFactory { } slots.into_node(TW_STATIC_VARIANT, children) } - TW_CANDIDATE_LIST => Self::make_separated_list_syntax( - kind, - children, - AnyTwFullCandidate::can_cast, - T![' '], - true, - ), + TW_CANDIDATE_LIST => { + Self::make_node_list_syntax(kind, children, AnyTwFullCandidate::can_cast) + } TW_VARIANT_LIST => Self::make_separated_list_syntax( kind, children, diff --git a/crates/biome_tailwind_parser/src/lexer/mod.rs b/crates/biome_tailwind_parser/src/lexer/mod.rs index 18d18a3c3f63..f9e3e192aa21 100644 --- a/crates/biome_tailwind_parser/src/lexer/mod.rs +++ b/crates/biome_tailwind_parser/src/lexer/mod.rs @@ -13,22 +13,14 @@ use biome_tailwind_syntax::{TailwindSyntaxKind, TextSize}; pub(crate) struct TailwindLexer<'src> { /// Source text source: &'src str, - /// The start byte position in the source text of the next token. position: usize, - current_kind: TailwindSyntaxKind, - current_start: TextSize, - diagnostics: Vec, - current_flags: TokenFlags, - preceding_line_break: bool, - after_newline: bool, - unicode_bom_length: usize, } diff --git a/crates/biome_tailwind_parser/src/syntax/mod.rs b/crates/biome_tailwind_parser/src/syntax/mod.rs index 12f2c50f34d6..9d51e3ce096f 100644 --- a/crates/biome_tailwind_parser/src/syntax/mod.rs +++ b/crates/biome_tailwind_parser/src/syntax/mod.rs @@ -3,7 +3,7 @@ use crate::syntax::parse_error::*; use crate::syntax::value::parse_value; use crate::syntax::variant::VariantList; use crate::token_source::TailwindLexContext; -use biome_parser::parse_lists::ParseSeparatedList; +use biome_parser::parse_lists::{ParseNodeList, ParseSeparatedList}; use biome_parser::parsed_syntax::ParsedSyntax::{Absent, Present}; use biome_parser::prelude::*; use biome_parser::{Parser, parse_recovery::ParseRecoveryTokenSet, token_set}; @@ -28,7 +28,7 @@ pub fn parse_root(p: &mut TailwindParser) { #[derive(Default)] struct CandidateList; -impl ParseSeparatedList for CandidateList { +impl ParseNodeList for CandidateList { type Kind = TailwindSyntaxKind; type Parser<'source> = TailwindParser<'source>; const LIST_KIND: Self::Kind = TW_CANDIDATE_LIST; @@ -37,18 +37,10 @@ impl ParseSeparatedList for CandidateList { parse_full_candidate(p) } - fn separating_element_kind(&mut self) -> Self::Kind { - WHITESPACE - } - fn is_at_list_end(&self, p: &mut Self::Parser<'_>) -> bool { p.at(EOF) } - fn allow_trailing_separating_element(&self) -> bool { - true - } - fn recover( &mut self, p: &mut Self::Parser<'_>, @@ -107,6 +99,7 @@ fn parse_functional_or_static_candidate(p: &mut TailwindParser) -> ParsedSyntax let m = p.start(); p.bump(TW_BASE); + let pos = p.source().position(); if p.at(T![:]) { // Oops, this is a Variant! m.abandon(p); @@ -117,6 +110,18 @@ fn parse_functional_or_static_candidate(p: &mut TailwindParser) -> ParsedSyntax if !p.at(T![-]) { return Present(m.complete(p, TW_STATIC_CANDIDATE)); } + if p.source().had_trivia_before() { + // Whitespace is not allowed in tailwind candidates + // Theres whitespace between these tokens, so it can't be a functional candidate + return Present(m.complete(p, TW_STATIC_CANDIDATE)); + } + if let Some(last_trivia) = p.source().trivia_list.last() + && pos < last_trivia.text_range().start() + { + // Whitespace is not allowed in tailwind candidates + // Theres whitespace between these tokens, so it can't be a functional candidate + return Present(m.complete(p, TW_STATIC_CANDIDATE)); + } p.expect(T![-]); match parse_value(p).or_recover_with_token_set( diff --git a/crates/biome_tailwind_parser/src/syntax/value.rs b/crates/biome_tailwind_parser/src/syntax/value.rs index 69cc2c8086de..118bd4c482ff 100644 --- a/crates/biome_tailwind_parser/src/syntax/value.rs +++ b/crates/biome_tailwind_parser/src/syntax/value.rs @@ -25,12 +25,6 @@ fn parse_named_value(p: &mut TailwindParser) -> ParsedSyntax { return Absent; } - if p.at(T![-]) { - m.abandon(p); - p.rewind(checkpoint); - return Absent; - } - Present(m.complete(p, TW_NAMED_VALUE)) } diff --git a/crates/biome_tailwind_parser/src/token_source.rs b/crates/biome_tailwind_parser/src/token_source.rs index f276099a2cda..a92a8f4c7b6c 100644 --- a/crates/biome_tailwind_parser/src/token_source.rs +++ b/crates/biome_tailwind_parser/src/token_source.rs @@ -14,6 +14,9 @@ pub(crate) struct TailwindTokenSource<'source> { /// List of the skipped trivia. Needed to construct the CST and compute the non-trivia token offsets. pub(super) trivia_list: Vec, + + /// Whether the lexer encountered any trivia between the previous non-trivia token and the current non-trivia token. + had_trivia_before: bool, } pub(crate) type TailwindTokenSourceCheckpoint = TokenSourceCheckpoint; @@ -55,15 +58,14 @@ impl<'source> TailwindTokenSource<'source> { Self { lexer, trivia_list: vec![], + had_trivia_before: false, } } fn next_non_trivia_token(&mut self, context: TailwindLexContext, first_token: bool) { let mut trailing = !first_token; + self.had_trivia_before = false; - // Unlike most token sources, we can't skip over trivia tokens blindly. - // This is because whitespace is invalid inside Tailwind utility classes. - // Tailwind also has no comments, so we don't need to worry about them. loop { let kind = self.lexer.next_token(context); @@ -75,15 +77,13 @@ impl<'source> TailwindTokenSource<'source> { break; } Ok(trivia_kind) => { - self.trivia_list - .push(Trivia::new(trivia_kind, self.current_range(), trailing)); - if trivia_kind.is_newline() { trailing = false; - // skipping over newlines is OK - continue; } - break; + + self.had_trivia_before = true; + self.trivia_list + .push(Trivia::new(trivia_kind, self.current_range(), trailing)); } } } @@ -103,6 +103,11 @@ impl<'source> TailwindTokenSource<'source> { self.trivia_list.truncate(checkpoint.trivia_len as usize); self.lexer.rewind(checkpoint.lexer_checkpoint); } + + /// Whether the lexer encountered any trivia between the previous non-trivia token and the current non-trivia token. + pub fn had_trivia_before(&self) -> bool { + self.had_trivia_before + } } impl TokenSource for TailwindTokenSource<'_> { diff --git a/crates/biome_tailwind_parser/tests/quick_test.rs b/crates/biome_tailwind_parser/tests/quick_test.rs index eb5494d2dc57..332e363c4599 100644 --- a/crates/biome_tailwind_parser/tests/quick_test.rs +++ b/crates/biome_tailwind_parser/tests/quick_test.rs @@ -4,7 +4,7 @@ use biome_test_utils::has_bogus_nodes_or_empty_slots; #[ignore] #[test] pub fn quick_test() { - let code = r#"text-sm"#; + let code = r#"-top-4 -mb-2"#; let root = parse_tailwind(code); let syntax = root.syntax(); diff --git a/crates/biome_tailwind_parser/tests/tailwind_specs/error/arbitrary-candidate/missing-property.txt.snap b/crates/biome_tailwind_parser/tests/tailwind_specs/error/arbitrary-candidate/missing-property.txt.snap index a083fe702dc7..76daae2f54a8 100644 --- a/crates/biome_tailwind_parser/tests/tailwind_specs/error/arbitrary-candidate/missing-property.txt.snap +++ b/crates/biome_tailwind_parser/tests/tailwind_specs/error/arbitrary-candidate/missing-property.txt.snap @@ -23,27 +23,16 @@ TwRoot { items: [ L_BRACKET@0..1 "[" [] [], TW_SELECTOR@1..6 ":40px" [] [], - R_BRACKET@6..7 "]" [] [], + R_BRACKET@6..8 "]" [] [Whitespace(" ")], + TW_BASE@8..9 "w" [] [], + DASH@9..10 "-" [] [], + TW_VALUE@10..11 "5" [] [], ], }, excl_token: missing (optional), }, - WHITESPACE@7..8 " " [] [], - TwFullCandidate { - variants: TwVariantList [], - negative_token: missing (optional), - candidate: TwFunctionalCandidate { - base_token: TW_BASE@8..9 "w" [] [], - minus_token: DASH@9..10 "-" [] [], - value: TwNamedValue { - value_token: TW_VALUE@10..12 "5" [] [Newline("\n")], - }, - modifier: missing (optional), - }, - excl_token: missing (optional), - }, ], - eof_token: EOF@12..12 "" [] [], + eof_token: EOF@11..12 "" [Newline("\n")] [], } ``` @@ -52,27 +41,19 @@ TwRoot { ``` 0: TW_ROOT@0..12 0: (empty) - 1: TW_CANDIDATE_LIST@0..12 - 0: TW_FULL_CANDIDATE@0..7 + 1: TW_CANDIDATE_LIST@0..11 + 0: TW_FULL_CANDIDATE@0..11 0: TW_VARIANT_LIST@0..0 1: (empty) - 2: TW_BOGUS_CANDIDATE@0..7 + 2: TW_BOGUS_CANDIDATE@0..11 0: L_BRACKET@0..1 "[" [] [] 1: TW_SELECTOR@1..6 ":40px" [] [] - 2: R_BRACKET@6..7 "]" [] [] - 3: (empty) - 1: WHITESPACE@7..8 " " [] [] - 2: TW_FULL_CANDIDATE@8..12 - 0: TW_VARIANT_LIST@8..8 - 1: (empty) - 2: TW_FUNCTIONAL_CANDIDATE@8..12 - 0: TW_BASE@8..9 "w" [] [] - 1: DASH@9..10 "-" [] [] - 2: TW_NAMED_VALUE@10..12 - 0: TW_VALUE@10..12 "5" [] [Newline("\n")] - 3: (empty) + 2: R_BRACKET@6..8 "]" [] [Whitespace(" ")] + 3: TW_BASE@8..9 "w" [] [] + 4: DASH@9..10 "-" [] [] + 5: TW_VALUE@10..11 "5" [] [] 3: (empty) - 2: EOF@12..12 "" [] [] + 2: EOF@11..12 "" [Newline("\n")] [] ``` @@ -81,16 +62,16 @@ TwRoot { ``` missing-property.txt:1:1 parse ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ - × Expected a candidate but instead found '[:40px]'. + × Expected a candidate but instead found '[:40px] w-5'. > 1 │ [:40px] w-5 - │ ^^^^^^^ + │ ^^^^^^^^^^^ 2 │ i Expected a candidate here. > 1 │ [:40px] w-5 - │ ^^^^^^^ + │ ^^^^^^^^^^^ 2 │ ``` diff --git a/crates/biome_tailwind_parser/tests/tailwind_specs/error/arbitrary-candidate/missing-value-in-arbitrary.txt.snap b/crates/biome_tailwind_parser/tests/tailwind_specs/error/arbitrary-candidate/missing-value-in-arbitrary.txt.snap index 773859a0cae4..8ae24fb9d3f5 100644 --- a/crates/biome_tailwind_parser/tests/tailwind_specs/error/arbitrary-candidate/missing-value-in-arbitrary.txt.snap +++ b/crates/biome_tailwind_parser/tests/tailwind_specs/error/arbitrary-candidate/missing-value-in-arbitrary.txt.snap @@ -23,27 +23,16 @@ TwRoot { items: [ L_BRACKET@0..1 "[" [] [], TW_SELECTOR@1..7 "width:" [] [], - R_BRACKET@7..8 "]" [] [], + R_BRACKET@7..9 "]" [] [Whitespace(" ")], + TW_BASE@9..10 "w" [] [], + DASH@10..11 "-" [] [], + TW_VALUE@11..12 "5" [] [], ], }, excl_token: missing (optional), }, - WHITESPACE@8..9 " " [] [], - TwFullCandidate { - variants: TwVariantList [], - negative_token: missing (optional), - candidate: TwFunctionalCandidate { - base_token: TW_BASE@9..10 "w" [] [], - minus_token: DASH@10..11 "-" [] [], - value: TwNamedValue { - value_token: TW_VALUE@11..13 "5" [] [Newline("\n")], - }, - modifier: missing (optional), - }, - excl_token: missing (optional), - }, ], - eof_token: EOF@13..13 "" [] [], + eof_token: EOF@12..13 "" [Newline("\n")] [], } ``` @@ -52,27 +41,19 @@ TwRoot { ``` 0: TW_ROOT@0..13 0: (empty) - 1: TW_CANDIDATE_LIST@0..13 - 0: TW_FULL_CANDIDATE@0..8 + 1: TW_CANDIDATE_LIST@0..12 + 0: TW_FULL_CANDIDATE@0..12 0: TW_VARIANT_LIST@0..0 1: (empty) - 2: TW_BOGUS_CANDIDATE@0..8 + 2: TW_BOGUS_CANDIDATE@0..12 0: L_BRACKET@0..1 "[" [] [] 1: TW_SELECTOR@1..7 "width:" [] [] - 2: R_BRACKET@7..8 "]" [] [] - 3: (empty) - 1: WHITESPACE@8..9 " " [] [] - 2: TW_FULL_CANDIDATE@9..13 - 0: TW_VARIANT_LIST@9..9 - 1: (empty) - 2: TW_FUNCTIONAL_CANDIDATE@9..13 - 0: TW_BASE@9..10 "w" [] [] - 1: DASH@10..11 "-" [] [] - 2: TW_NAMED_VALUE@11..13 - 0: TW_VALUE@11..13 "5" [] [Newline("\n")] - 3: (empty) + 2: R_BRACKET@7..9 "]" [] [Whitespace(" ")] + 3: TW_BASE@9..10 "w" [] [] + 4: DASH@10..11 "-" [] [] + 5: TW_VALUE@11..12 "5" [] [] 3: (empty) - 2: EOF@13..13 "" [] [] + 2: EOF@12..13 "" [Newline("\n")] [] ``` @@ -81,16 +62,16 @@ TwRoot { ``` missing-value-in-arbitrary.txt:1:1 parse ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ - × Expected a candidate but instead found '[width:]'. + × Expected a candidate but instead found '[width:] w-5'. > 1 │ [width:] w-5 - │ ^^^^^^^^ + │ ^^^^^^^^^^^^ 2 │ i Expected a candidate here. > 1 │ [width:] w-5 - │ ^^^^^^^^ + │ ^^^^^^^^^^^^ 2 │ ``` diff --git a/crates/biome_tailwind_parser/tests/tailwind_specs/error/incomplete-arbitrary-value-0.txt.snap b/crates/biome_tailwind_parser/tests/tailwind_specs/error/incomplete-arbitrary-value-0.txt.snap index 930d559eaf17..83a96f4afdd7 100644 --- a/crates/biome_tailwind_parser/tests/tailwind_specs/error/incomplete-arbitrary-value-0.txt.snap +++ b/crates/biome_tailwind_parser/tests/tailwind_specs/error/incomplete-arbitrary-value-0.txt.snap @@ -24,7 +24,7 @@ TwRoot { minus_token: DASH@4..5 "-" [] [], value: TwBogusValue { items: [ - L_BRACKET@5..7 "[" [] [Newline("\n")], + L_BRACKET@5..6 "[" [] [], ], }, modifier: missing (optional), @@ -32,7 +32,7 @@ TwRoot { excl_token: missing (optional), }, ], - eof_token: EOF@7..7 "" [] [], + eof_token: EOF@6..7 "" [Newline("\n")] [], } ``` @@ -41,18 +41,18 @@ TwRoot { ``` 0: TW_ROOT@0..7 0: (empty) - 1: TW_CANDIDATE_LIST@0..7 - 0: TW_FULL_CANDIDATE@0..7 + 1: TW_CANDIDATE_LIST@0..6 + 0: TW_FULL_CANDIDATE@0..6 0: TW_VARIANT_LIST@0..0 1: (empty) - 2: TW_FUNCTIONAL_CANDIDATE@0..7 + 2: TW_FUNCTIONAL_CANDIDATE@0..6 0: TW_BASE@0..4 "text" [] [] 1: DASH@4..5 "-" [] [] - 2: TW_BOGUS_VALUE@5..7 - 0: L_BRACKET@5..7 "[" [] [Newline("\n")] + 2: TW_BOGUS_VALUE@5..6 + 0: L_BRACKET@5..6 "[" [] [] 3: (empty) 3: (empty) - 2: EOF@7..7 "" [] [] + 2: EOF@6..7 "" [Newline("\n")] [] ``` diff --git a/crates/biome_tailwind_parser/tests/tailwind_specs/error/incomplete-arbitrary-value-1.txt.snap b/crates/biome_tailwind_parser/tests/tailwind_specs/error/incomplete-arbitrary-value-1.txt.snap index 7fe70d5f14c9..a7c1117c1011 100644 --- a/crates/biome_tailwind_parser/tests/tailwind_specs/error/incomplete-arbitrary-value-1.txt.snap +++ b/crates/biome_tailwind_parser/tests/tailwind_specs/error/incomplete-arbitrary-value-1.txt.snap @@ -25,7 +25,7 @@ TwRoot { value: TwBogusValue { items: [ L_BRACKET@5..6 "[" [] [], - TW_SELECTOR@6..14 "#ff0000" [] [Newline("\n")], + TW_SELECTOR@6..13 "#ff0000" [] [], ], }, modifier: missing (optional), @@ -33,7 +33,7 @@ TwRoot { excl_token: missing (optional), }, ], - eof_token: EOF@14..14 "" [] [], + eof_token: EOF@13..14 "" [Newline("\n")] [], } ``` @@ -42,19 +42,19 @@ TwRoot { ``` 0: TW_ROOT@0..14 0: (empty) - 1: TW_CANDIDATE_LIST@0..14 - 0: TW_FULL_CANDIDATE@0..14 + 1: TW_CANDIDATE_LIST@0..13 + 0: TW_FULL_CANDIDATE@0..13 0: TW_VARIANT_LIST@0..0 1: (empty) - 2: TW_FUNCTIONAL_CANDIDATE@0..14 + 2: TW_FUNCTIONAL_CANDIDATE@0..13 0: TW_BASE@0..4 "text" [] [] 1: DASH@4..5 "-" [] [] - 2: TW_BOGUS_VALUE@5..14 + 2: TW_BOGUS_VALUE@5..13 0: L_BRACKET@5..6 "[" [] [] - 1: TW_SELECTOR@6..14 "#ff0000" [] [Newline("\n")] + 1: TW_SELECTOR@6..13 "#ff0000" [] [] 3: (empty) 3: (empty) - 2: EOF@14..14 "" [] [] + 2: EOF@13..14 "" [Newline("\n")] [] ``` diff --git a/crates/biome_tailwind_parser/tests/tailwind_specs/error/incomplete-arbitrary-value-2.txt.snap b/crates/biome_tailwind_parser/tests/tailwind_specs/error/incomplete-arbitrary-value-2.txt.snap index d112e2fbff89..5e0422988d0e 100644 --- a/crates/biome_tailwind_parser/tests/tailwind_specs/error/incomplete-arbitrary-value-2.txt.snap +++ b/crates/biome_tailwind_parser/tests/tailwind_specs/error/incomplete-arbitrary-value-2.txt.snap @@ -24,43 +24,21 @@ TwRoot { minus_token: DASH@4..5 "-" [] [], value: TwBogusValue { items: [ - L_BRACKET@5..6 "[" [] [], + L_BRACKET@5..7 "[" [] [Whitespace(" ")], + TW_BASE@7..11 "text" [] [], + DASH@11..12 "-" [] [], + TW_VALUE@12..15 "sm" [] [Whitespace(" ")], + TW_BASE@15..17 "bg" [] [], + DASH@17..18 "-" [] [], + TW_VALUE@18..25 "red-500" [] [], ], }, modifier: missing (optional), }, excl_token: missing (optional), }, - WHITESPACE@6..7 " " [] [], - TwFullCandidate { - variants: TwVariantList [], - negative_token: missing (optional), - candidate: TwFunctionalCandidate { - base_token: TW_BASE@7..11 "text" [] [], - minus_token: DASH@11..12 "-" [] [], - value: TwNamedValue { - value_token: TW_VALUE@12..14 "sm" [] [], - }, - modifier: missing (optional), - }, - excl_token: missing (optional), - }, - WHITESPACE@14..15 " " [] [], - TwFullCandidate { - variants: TwVariantList [], - negative_token: missing (optional), - candidate: TwFunctionalCandidate { - base_token: TW_BASE@15..17 "bg" [] [], - minus_token: DASH@17..18 "-" [] [], - value: TwNamedValue { - value_token: TW_VALUE@18..26 "red-500" [] [Newline("\n")], - }, - modifier: missing (optional), - }, - excl_token: missing (optional), - }, ], - eof_token: EOF@26..26 "" [] [], + eof_token: EOF@25..26 "" [Newline("\n")] [], } ``` @@ -69,40 +47,24 @@ TwRoot { ``` 0: TW_ROOT@0..26 0: (empty) - 1: TW_CANDIDATE_LIST@0..26 - 0: TW_FULL_CANDIDATE@0..6 + 1: TW_CANDIDATE_LIST@0..25 + 0: TW_FULL_CANDIDATE@0..25 0: TW_VARIANT_LIST@0..0 1: (empty) - 2: TW_FUNCTIONAL_CANDIDATE@0..6 + 2: TW_FUNCTIONAL_CANDIDATE@0..25 0: TW_BASE@0..4 "text" [] [] 1: DASH@4..5 "-" [] [] - 2: TW_BOGUS_VALUE@5..6 - 0: L_BRACKET@5..6 "[" [] [] - 3: (empty) - 3: (empty) - 1: WHITESPACE@6..7 " " [] [] - 2: TW_FULL_CANDIDATE@7..14 - 0: TW_VARIANT_LIST@7..7 - 1: (empty) - 2: TW_FUNCTIONAL_CANDIDATE@7..14 - 0: TW_BASE@7..11 "text" [] [] - 1: DASH@11..12 "-" [] [] - 2: TW_NAMED_VALUE@12..14 - 0: TW_VALUE@12..14 "sm" [] [] - 3: (empty) - 3: (empty) - 3: WHITESPACE@14..15 " " [] [] - 4: TW_FULL_CANDIDATE@15..26 - 0: TW_VARIANT_LIST@15..15 - 1: (empty) - 2: TW_FUNCTIONAL_CANDIDATE@15..26 - 0: TW_BASE@15..17 "bg" [] [] - 1: DASH@17..18 "-" [] [] - 2: TW_NAMED_VALUE@18..26 - 0: TW_VALUE@18..26 "red-500" [] [Newline("\n")] + 2: TW_BOGUS_VALUE@5..25 + 0: L_BRACKET@5..7 "[" [] [Whitespace(" ")] + 1: TW_BASE@7..11 "text" [] [] + 2: DASH@11..12 "-" [] [] + 3: TW_VALUE@12..15 "sm" [] [Whitespace(" ")] + 4: TW_BASE@15..17 "bg" [] [] + 5: DASH@17..18 "-" [] [] + 6: TW_VALUE@18..25 "red-500" [] [] 3: (empty) 3: (empty) - 2: EOF@26..26 "" [] [] + 2: EOF@25..26 "" [Newline("\n")] [] ``` @@ -111,16 +73,16 @@ TwRoot { ``` incomplete-arbitrary-value-2.txt:1:6 parse ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ - × Expected a value but instead found '['. + × Expected a value but instead found '[ text-sm bg-red-500'. > 1 │ text-[ text-sm bg-red-500 - │ ^ + │ ^^^^^^^^^^^^^^^^^^^^ 2 │ i Expected a value here. > 1 │ text-[ text-sm bg-red-500 - │ ^ + │ ^^^^^^^^^^^^^^^^^^^^ 2 │ ``` diff --git a/crates/biome_tailwind_parser/tests/tailwind_specs/error/incomplete-arbitrary-variant.txt.snap b/crates/biome_tailwind_parser/tests/tailwind_specs/error/incomplete-arbitrary-variant.txt.snap index 7a7ff4417cac..a21f6f695a98 100644 --- a/crates/biome_tailwind_parser/tests/tailwind_specs/error/incomplete-arbitrary-variant.txt.snap +++ b/crates/biome_tailwind_parser/tests/tailwind_specs/error/incomplete-arbitrary-variant.txt.snap @@ -25,7 +25,7 @@ TwRoot { value: TwBogusValue { items: [ L_BRACKET@5..6 "[" [] [], - TW_SELECTOR@6..18 "foo:text-sm" [] [Newline("\n")], + TW_SELECTOR@6..17 "foo:text-sm" [] [], ], }, modifier: missing (optional), @@ -33,7 +33,7 @@ TwRoot { excl_token: missing (optional), }, ], - eof_token: EOF@18..18 "" [] [], + eof_token: EOF@17..18 "" [Newline("\n")] [], } ``` @@ -42,19 +42,19 @@ TwRoot { ``` 0: TW_ROOT@0..18 0: (empty) - 1: TW_CANDIDATE_LIST@0..18 - 0: TW_FULL_CANDIDATE@0..18 + 1: TW_CANDIDATE_LIST@0..17 + 0: TW_FULL_CANDIDATE@0..17 0: TW_VARIANT_LIST@0..0 1: (empty) - 2: TW_FUNCTIONAL_CANDIDATE@0..18 + 2: TW_FUNCTIONAL_CANDIDATE@0..17 0: TW_BASE@0..4 "aria" [] [] 1: DASH@4..5 "-" [] [] - 2: TW_BOGUS_VALUE@5..18 + 2: TW_BOGUS_VALUE@5..17 0: L_BRACKET@5..6 "[" [] [] - 1: TW_SELECTOR@6..18 "foo:text-sm" [] [Newline("\n")] + 1: TW_SELECTOR@6..17 "foo:text-sm" [] [] 3: (empty) 3: (empty) - 2: EOF@18..18 "" [] [] + 2: EOF@17..18 "" [Newline("\n")] [] ``` diff --git a/crates/biome_tailwind_parser/tests/tailwind_specs/error/missing-modifier-value-1.txt.snap b/crates/biome_tailwind_parser/tests/tailwind_specs/error/missing-modifier-value-1.txt.snap index 3bd3131d7425..29dd22e1a959 100644 --- a/crates/biome_tailwind_parser/tests/tailwind_specs/error/missing-modifier-value-1.txt.snap +++ b/crates/biome_tailwind_parser/tests/tailwind_specs/error/missing-modifier-value-1.txt.snap @@ -36,10 +36,10 @@ TwRoot { ], }, }, - excl_token: BANG@13..15 "!" [] [Newline("\n")], + excl_token: BANG@13..14 "!" [] [], }, ], - eof_token: EOF@15..15 "" [] [], + eof_token: EOF@14..15 "" [Newline("\n")] [], } ``` @@ -48,8 +48,8 @@ TwRoot { ``` 0: TW_ROOT@0..15 0: (empty) - 1: TW_CANDIDATE_LIST@0..15 - 0: TW_FULL_CANDIDATE@0..15 + 1: TW_CANDIDATE_LIST@0..14 + 0: TW_FULL_CANDIDATE@0..14 0: TW_VARIANT_LIST@0..0 1: (empty) 2: TW_FUNCTIONAL_CANDIDATE@0..13 @@ -61,8 +61,8 @@ TwRoot { 0: SLASH@12..13 "/" [] [] 1: TW_BOGUS_MODIFIER@13..13 0: ERROR_TOKEN@13..13 "" [] [] - 3: BANG@13..15 "!" [] [Newline("\n")] - 2: EOF@15..15 "" [] [] + 3: BANG@13..14 "!" [] [] + 2: EOF@14..15 "" [Newline("\n")] [] ``` diff --git a/crates/biome_tailwind_parser/tests/tailwind_specs/error/missing-modifier-value.txt.snap b/crates/biome_tailwind_parser/tests/tailwind_specs/error/missing-modifier-value.txt.snap index 1fc6168553ab..4c2cc86c23ae 100644 --- a/crates/biome_tailwind_parser/tests/tailwind_specs/error/missing-modifier-value.txt.snap +++ b/crates/biome_tailwind_parser/tests/tailwind_specs/error/missing-modifier-value.txt.snap @@ -26,13 +26,13 @@ TwRoot { TwNamedValue { value_token: TW_VALUE@3..12 "green-500" [] [], }, - SLASH@12..14 "/" [] [Newline("\n")], + SLASH@12..13 "/" [] [], ], }, excl_token: missing (optional), }, ], - eof_token: EOF@14..14 "" [] [], + eof_token: EOF@13..14 "" [Newline("\n")] [], } ``` @@ -41,18 +41,18 @@ TwRoot { ``` 0: TW_ROOT@0..14 0: (empty) - 1: TW_CANDIDATE_LIST@0..14 - 0: TW_FULL_CANDIDATE@0..14 + 1: TW_CANDIDATE_LIST@0..13 + 0: TW_FULL_CANDIDATE@0..13 0: TW_VARIANT_LIST@0..0 1: (empty) - 2: TW_BOGUS_CANDIDATE@0..14 + 2: TW_BOGUS_CANDIDATE@0..13 0: TW_BASE@0..2 "bg" [] [] 1: DASH@2..3 "-" [] [] 2: TW_NAMED_VALUE@3..12 0: TW_VALUE@3..12 "green-500" [] [] - 3: SLASH@12..14 "/" [] [Newline("\n")] + 3: SLASH@12..13 "/" [] [] 3: (empty) - 2: EOF@14..14 "" [] [] + 2: EOF@13..14 "" [Newline("\n")] [] ``` diff --git a/crates/biome_tailwind_parser/tests/tailwind_specs/error/missing-value.txt.snap b/crates/biome_tailwind_parser/tests/tailwind_specs/error/missing-value.txt.snap index bbb65d587b15..d1b85ed595f1 100644 --- a/crates/biome_tailwind_parser/tests/tailwind_specs/error/missing-value.txt.snap +++ b/crates/biome_tailwind_parser/tests/tailwind_specs/error/missing-value.txt.snap @@ -22,13 +22,13 @@ TwRoot { candidate: TwBogusCandidate { items: [ TW_BASE@0..4 "text" [] [], - DASH@4..6 "-" [] [Newline("\n")], + DASH@4..5 "-" [] [], ], }, excl_token: missing (optional), }, ], - eof_token: EOF@6..6 "" [] [], + eof_token: EOF@5..6 "" [Newline("\n")] [], } ``` @@ -37,15 +37,15 @@ TwRoot { ``` 0: TW_ROOT@0..6 0: (empty) - 1: TW_CANDIDATE_LIST@0..6 - 0: TW_FULL_CANDIDATE@0..6 + 1: TW_CANDIDATE_LIST@0..5 + 0: TW_FULL_CANDIDATE@0..5 0: TW_VARIANT_LIST@0..0 1: (empty) - 2: TW_BOGUS_CANDIDATE@0..6 + 2: TW_BOGUS_CANDIDATE@0..5 0: TW_BASE@0..4 "text" [] [] - 1: DASH@4..6 "-" [] [Newline("\n")] + 1: DASH@4..5 "-" [] [] 3: (empty) - 2: EOF@6..6 "" [] [] + 2: EOF@5..6 "" [Newline("\n")] [] ``` diff --git a/crates/biome_tailwind_parser/tests/tailwind_specs/ok/brackets/gradient.txt.snap b/crates/biome_tailwind_parser/tests/tailwind_specs/ok/brackets/gradient.txt.snap index bf12572d1f42..6d46ad851de8 100644 --- a/crates/biome_tailwind_parser/tests/tailwind_specs/ok/brackets/gradient.txt.snap +++ b/crates/biome_tailwind_parser/tests/tailwind_specs/ok/brackets/gradient.txt.snap @@ -25,13 +25,12 @@ TwRoot { value: TwArbitraryValue { l_brack_token: L_BRACKET@10..11 "[" [] [], value_token: TW_VALUE@11..21 "at_50%_75%" [] [], - r_brack_token: R_BRACKET@21..22 "]" [] [], + r_brack_token: R_BRACKET@21..23 "]" [] [Whitespace(" ")], }, modifier: missing (optional), }, excl_token: missing (optional), }, - WHITESPACE@22..23 " " [] [], TwFullCandidate { variants: TwVariantList [], negative_token: missing (optional), @@ -39,13 +38,12 @@ TwRoot { base_token: TW_BASE@23..27 "from" [] [], minus_token: DASH@27..28 "-" [] [], value: TwNamedValue { - value_token: TW_VALUE@28..35 "sky-200" [] [], + value_token: TW_VALUE@28..36 "sky-200" [] [Whitespace(" ")], }, modifier: missing (optional), }, excl_token: missing (optional), }, - WHITESPACE@35..36 " " [] [], TwFullCandidate { variants: TwVariantList [], negative_token: missing (optional), @@ -53,13 +51,12 @@ TwRoot { base_token: TW_BASE@36..39 "via" [] [], minus_token: DASH@39..40 "-" [] [], value: TwNamedValue { - value_token: TW_VALUE@40..48 "blue-400" [] [], + value_token: TW_VALUE@40..49 "blue-400" [] [Whitespace(" ")], }, modifier: missing (optional), }, excl_token: missing (optional), }, - WHITESPACE@48..49 " " [] [], TwFullCandidate { variants: TwVariantList [], negative_token: missing (optional), @@ -67,13 +64,12 @@ TwRoot { base_token: TW_BASE@49..51 "to" [] [], minus_token: DASH@51..52 "-" [] [], value: TwNamedValue { - value_token: TW_VALUE@52..62 "indigo-900" [] [], + value_token: TW_VALUE@52..63 "indigo-900" [] [Whitespace(" ")], }, modifier: missing (optional), }, excl_token: missing (optional), }, - WHITESPACE@62..63 " " [] [], TwFullCandidate { variants: TwVariantList [], negative_token: missing (optional), @@ -81,14 +77,14 @@ TwRoot { base_token: TW_BASE@63..65 "to" [] [], minus_token: DASH@65..66 "-" [] [], value: TwNamedValue { - value_token: TW_VALUE@66..70 "90%" [] [Newline("\n")], + value_token: TW_VALUE@66..69 "90%" [] [], }, modifier: missing (optional), }, excl_token: missing (optional), }, ], - eof_token: EOF@70..70 "" [] [], + eof_token: EOF@69..70 "" [Newline("\n")] [], } ``` @@ -97,63 +93,59 @@ TwRoot { ``` 0: TW_ROOT@0..70 0: (empty) - 1: TW_CANDIDATE_LIST@0..70 - 0: TW_FULL_CANDIDATE@0..22 + 1: TW_CANDIDATE_LIST@0..69 + 0: TW_FULL_CANDIDATE@0..23 0: TW_VARIANT_LIST@0..0 1: (empty) - 2: TW_FUNCTIONAL_CANDIDATE@0..22 + 2: TW_FUNCTIONAL_CANDIDATE@0..23 0: TW_BASE@0..9 "bg-radial" [] [] 1: DASH@9..10 "-" [] [] - 2: TW_ARBITRARY_VALUE@10..22 + 2: TW_ARBITRARY_VALUE@10..23 0: L_BRACKET@10..11 "[" [] [] 1: TW_VALUE@11..21 "at_50%_75%" [] [] - 2: R_BRACKET@21..22 "]" [] [] + 2: R_BRACKET@21..23 "]" [] [Whitespace(" ")] 3: (empty) 3: (empty) - 1: WHITESPACE@22..23 " " [] [] - 2: TW_FULL_CANDIDATE@23..35 + 1: TW_FULL_CANDIDATE@23..36 0: TW_VARIANT_LIST@23..23 1: (empty) - 2: TW_FUNCTIONAL_CANDIDATE@23..35 + 2: TW_FUNCTIONAL_CANDIDATE@23..36 0: TW_BASE@23..27 "from" [] [] 1: DASH@27..28 "-" [] [] - 2: TW_NAMED_VALUE@28..35 - 0: TW_VALUE@28..35 "sky-200" [] [] + 2: TW_NAMED_VALUE@28..36 + 0: TW_VALUE@28..36 "sky-200" [] [Whitespace(" ")] 3: (empty) 3: (empty) - 3: WHITESPACE@35..36 " " [] [] - 4: TW_FULL_CANDIDATE@36..48 + 2: TW_FULL_CANDIDATE@36..49 0: TW_VARIANT_LIST@36..36 1: (empty) - 2: TW_FUNCTIONAL_CANDIDATE@36..48 + 2: TW_FUNCTIONAL_CANDIDATE@36..49 0: TW_BASE@36..39 "via" [] [] 1: DASH@39..40 "-" [] [] - 2: TW_NAMED_VALUE@40..48 - 0: TW_VALUE@40..48 "blue-400" [] [] + 2: TW_NAMED_VALUE@40..49 + 0: TW_VALUE@40..49 "blue-400" [] [Whitespace(" ")] 3: (empty) 3: (empty) - 5: WHITESPACE@48..49 " " [] [] - 6: TW_FULL_CANDIDATE@49..62 + 3: TW_FULL_CANDIDATE@49..63 0: TW_VARIANT_LIST@49..49 1: (empty) - 2: TW_FUNCTIONAL_CANDIDATE@49..62 + 2: TW_FUNCTIONAL_CANDIDATE@49..63 0: TW_BASE@49..51 "to" [] [] 1: DASH@51..52 "-" [] [] - 2: TW_NAMED_VALUE@52..62 - 0: TW_VALUE@52..62 "indigo-900" [] [] + 2: TW_NAMED_VALUE@52..63 + 0: TW_VALUE@52..63 "indigo-900" [] [Whitespace(" ")] 3: (empty) 3: (empty) - 7: WHITESPACE@62..63 " " [] [] - 8: TW_FULL_CANDIDATE@63..70 + 4: TW_FULL_CANDIDATE@63..69 0: TW_VARIANT_LIST@63..63 1: (empty) - 2: TW_FUNCTIONAL_CANDIDATE@63..70 + 2: TW_FUNCTIONAL_CANDIDATE@63..69 0: TW_BASE@63..65 "to" [] [] 1: DASH@65..66 "-" [] [] - 2: TW_NAMED_VALUE@66..70 - 0: TW_VALUE@66..70 "90%" [] [Newline("\n")] + 2: TW_NAMED_VALUE@66..69 + 0: TW_VALUE@66..69 "90%" [] [] 3: (empty) 3: (empty) - 2: EOF@70..70 "" [] [] + 2: EOF@69..70 "" [Newline("\n")] [] ``` diff --git a/crates/biome_tailwind_parser/tests/tailwind_specs/ok/brackets/image-url.txt.snap b/crates/biome_tailwind_parser/tests/tailwind_specs/ok/brackets/image-url.txt.snap index 155c11cb4f08..ec248a124ecf 100644 --- a/crates/biome_tailwind_parser/tests/tailwind_specs/ok/brackets/image-url.txt.snap +++ b/crates/biome_tailwind_parser/tests/tailwind_specs/ok/brackets/image-url.txt.snap @@ -25,14 +25,14 @@ TwRoot { value: TwArbitraryValue { l_brack_token: L_BRACKET@3..4 "[" [] [], value_token: TW_VALUE@4..27 "url(/img/mountains.jpg)" [] [], - r_brack_token: R_BRACKET@27..29 "]" [] [Newline("\n")], + r_brack_token: R_BRACKET@27..28 "]" [] [], }, modifier: missing (optional), }, excl_token: missing (optional), }, ], - eof_token: EOF@29..29 "" [] [], + eof_token: EOF@28..29 "" [Newline("\n")] [], } ``` @@ -41,19 +41,19 @@ TwRoot { ``` 0: TW_ROOT@0..29 0: (empty) - 1: TW_CANDIDATE_LIST@0..29 - 0: TW_FULL_CANDIDATE@0..29 + 1: TW_CANDIDATE_LIST@0..28 + 0: TW_FULL_CANDIDATE@0..28 0: TW_VARIANT_LIST@0..0 1: (empty) - 2: TW_FUNCTIONAL_CANDIDATE@0..29 + 2: TW_FUNCTIONAL_CANDIDATE@0..28 0: TW_BASE@0..2 "bg" [] [] 1: DASH@2..3 "-" [] [] - 2: TW_ARBITRARY_VALUE@3..29 + 2: TW_ARBITRARY_VALUE@3..28 0: L_BRACKET@3..4 "[" [] [] 1: TW_VALUE@4..27 "url(/img/mountains.jpg)" [] [] - 2: R_BRACKET@27..29 "]" [] [Newline("\n")] + 2: R_BRACKET@27..28 "]" [] [] 3: (empty) 3: (empty) - 2: EOF@29..29 "" [] [] + 2: EOF@28..29 "" [Newline("\n")] [] ``` diff --git a/crates/biome_tailwind_parser/tests/tailwind_specs/ok/brackets/inset.txt.snap b/crates/biome_tailwind_parser/tests/tailwind_specs/ok/brackets/inset.txt.snap index cfec598c8df7..4e6b7de58a68 100644 --- a/crates/biome_tailwind_parser/tests/tailwind_specs/ok/brackets/inset.txt.snap +++ b/crates/biome_tailwind_parser/tests/tailwind_specs/ok/brackets/inset.txt.snap @@ -25,13 +25,12 @@ TwRoot { value: TwArbitraryValue { l_brack_token: L_BRACKET@8..9 "[" [] [], value_token: TW_VALUE@9..13 "20px" [] [], - r_brack_token: R_BRACKET@13..14 "]" [] [], + r_brack_token: R_BRACKET@13..15 "]" [] [Whitespace(" ")], }, modifier: missing (optional), }, excl_token: missing (optional), }, - WHITESPACE@14..15 " " [] [], TwFullCandidate { variants: TwVariantList [], negative_token: missing (optional), @@ -41,14 +40,14 @@ TwRoot { value: TwArbitraryValue { l_brack_token: L_BRACKET@23..24 "[" [] [], value_token: TW_VALUE@24..28 "15px" [] [], - r_brack_token: R_BRACKET@28..30 "]" [] [Newline("\n")], + r_brack_token: R_BRACKET@28..29 "]" [] [], }, modifier: missing (optional), }, excl_token: missing (optional), }, ], - eof_token: EOF@30..30 "" [] [], + eof_token: EOF@29..30 "" [Newline("\n")] [], } ``` @@ -57,32 +56,31 @@ TwRoot { ``` 0: TW_ROOT@0..30 0: (empty) - 1: TW_CANDIDATE_LIST@0..30 - 0: TW_FULL_CANDIDATE@0..14 + 1: TW_CANDIDATE_LIST@0..29 + 0: TW_FULL_CANDIDATE@0..15 0: TW_VARIANT_LIST@0..0 1: (empty) - 2: TW_FUNCTIONAL_CANDIDATE@0..14 + 2: TW_FUNCTIONAL_CANDIDATE@0..15 0: TW_BASE@0..7 "inset-x" [] [] 1: DASH@7..8 "-" [] [] - 2: TW_ARBITRARY_VALUE@8..14 + 2: TW_ARBITRARY_VALUE@8..15 0: L_BRACKET@8..9 "[" [] [] 1: TW_VALUE@9..13 "20px" [] [] - 2: R_BRACKET@13..14 "]" [] [] + 2: R_BRACKET@13..15 "]" [] [Whitespace(" ")] 3: (empty) 3: (empty) - 1: WHITESPACE@14..15 " " [] [] - 2: TW_FULL_CANDIDATE@15..30 + 1: TW_FULL_CANDIDATE@15..29 0: TW_VARIANT_LIST@15..15 1: (empty) - 2: TW_FUNCTIONAL_CANDIDATE@15..30 + 2: TW_FUNCTIONAL_CANDIDATE@15..29 0: TW_BASE@15..22 "inset-y" [] [] 1: DASH@22..23 "-" [] [] - 2: TW_ARBITRARY_VALUE@23..30 + 2: TW_ARBITRARY_VALUE@23..29 0: L_BRACKET@23..24 "[" [] [] 1: TW_VALUE@24..28 "15px" [] [] - 2: R_BRACKET@28..30 "]" [] [Newline("\n")] + 2: R_BRACKET@28..29 "]" [] [] 3: (empty) 3: (empty) - 2: EOF@30..30 "" [] [] + 2: EOF@29..30 "" [Newline("\n")] [] ``` diff --git a/crates/biome_tailwind_parser/tests/tailwind_specs/ok/brackets/misc-xy.txt.snap b/crates/biome_tailwind_parser/tests/tailwind_specs/ok/brackets/misc-xy.txt.snap index 7da90aea4ea3..4f264363f729 100644 --- a/crates/biome_tailwind_parser/tests/tailwind_specs/ok/brackets/misc-xy.txt.snap +++ b/crates/biome_tailwind_parser/tests/tailwind_specs/ok/brackets/misc-xy.txt.snap @@ -25,13 +25,12 @@ TwRoot { value: TwArbitraryValue { l_brack_token: L_BRACKET@8..9 "[" [] [], value_token: TW_VALUE@9..13 "14px" [] [], - r_brack_token: R_BRACKET@13..14 "]" [] [], + r_brack_token: R_BRACKET@13..15 "]" [] [Whitespace(" ")], }, modifier: missing (optional), }, excl_token: missing (optional), }, - WHITESPACE@14..15 " " [] [], TwFullCandidate { variants: TwVariantList [], negative_token: missing (optional), @@ -41,13 +40,12 @@ TwRoot { value: TwArbitraryValue { l_brack_token: L_BRACKET@23..24 "[" [] [], value_token: TW_VALUE@24..28 "10px" [] [], - r_brack_token: R_BRACKET@28..29 "]" [] [], + r_brack_token: R_BRACKET@28..30 "]" [] [Whitespace(" ")], }, modifier: missing (optional), }, excl_token: missing (optional), }, - WHITESPACE@29..30 " " [] [], TwFullCandidate { variants: TwVariantList [], negative_token: missing (optional), @@ -57,13 +55,12 @@ TwRoot { value: TwArbitraryValue { l_brack_token: L_BRACKET@39..40 "[" [] [], value_token: TW_VALUE@40..43 "2px" [] [], - r_brack_token: R_BRACKET@43..44 "]" [] [], + r_brack_token: R_BRACKET@43..45 "]" [] [Whitespace(" ")], }, modifier: missing (optional), }, excl_token: missing (optional), }, - WHITESPACE@44..45 " " [] [], TwFullCandidate { variants: TwVariantList [], negative_token: missing (optional), @@ -73,14 +70,14 @@ TwRoot { value: TwArbitraryValue { l_brack_token: L_BRACKET@54..55 "[" [] [], value_token: TW_VALUE@55..58 "3px" [] [], - r_brack_token: R_BRACKET@58..60 "]" [] [Newline("\n")], + r_brack_token: R_BRACKET@58..59 "]" [] [], }, modifier: missing (optional), }, excl_token: missing (optional), }, ], - eof_token: EOF@60..60 "" [] [], + eof_token: EOF@59..60 "" [Newline("\n")] [], } ``` @@ -89,58 +86,55 @@ TwRoot { ``` 0: TW_ROOT@0..60 0: (empty) - 1: TW_CANDIDATE_LIST@0..60 - 0: TW_FULL_CANDIDATE@0..14 + 1: TW_CANDIDATE_LIST@0..59 + 0: TW_FULL_CANDIDATE@0..15 0: TW_VARIANT_LIST@0..0 1: (empty) - 2: TW_FUNCTIONAL_CANDIDATE@0..14 + 2: TW_FUNCTIONAL_CANDIDATE@0..15 0: TW_BASE@0..7 "space-x" [] [] 1: DASH@7..8 "-" [] [] - 2: TW_ARBITRARY_VALUE@8..14 + 2: TW_ARBITRARY_VALUE@8..15 0: L_BRACKET@8..9 "[" [] [] 1: TW_VALUE@9..13 "14px" [] [] - 2: R_BRACKET@13..14 "]" [] [] + 2: R_BRACKET@13..15 "]" [] [Whitespace(" ")] 3: (empty) 3: (empty) - 1: WHITESPACE@14..15 " " [] [] - 2: TW_FULL_CANDIDATE@15..29 + 1: TW_FULL_CANDIDATE@15..30 0: TW_VARIANT_LIST@15..15 1: (empty) - 2: TW_FUNCTIONAL_CANDIDATE@15..29 + 2: TW_FUNCTIONAL_CANDIDATE@15..30 0: TW_BASE@15..22 "space-y" [] [] 1: DASH@22..23 "-" [] [] - 2: TW_ARBITRARY_VALUE@23..29 + 2: TW_ARBITRARY_VALUE@23..30 0: L_BRACKET@23..24 "[" [] [] 1: TW_VALUE@24..28 "10px" [] [] - 2: R_BRACKET@28..29 "]" [] [] + 2: R_BRACKET@28..30 "]" [] [Whitespace(" ")] 3: (empty) 3: (empty) - 3: WHITESPACE@29..30 " " [] [] - 4: TW_FULL_CANDIDATE@30..44 + 2: TW_FULL_CANDIDATE@30..45 0: TW_VARIANT_LIST@30..30 1: (empty) - 2: TW_FUNCTIONAL_CANDIDATE@30..44 + 2: TW_FUNCTIONAL_CANDIDATE@30..45 0: TW_BASE@30..38 "divide-x" [] [] 1: DASH@38..39 "-" [] [] - 2: TW_ARBITRARY_VALUE@39..44 + 2: TW_ARBITRARY_VALUE@39..45 0: L_BRACKET@39..40 "[" [] [] 1: TW_VALUE@40..43 "2px" [] [] - 2: R_BRACKET@43..44 "]" [] [] + 2: R_BRACKET@43..45 "]" [] [Whitespace(" ")] 3: (empty) 3: (empty) - 5: WHITESPACE@44..45 " " [] [] - 6: TW_FULL_CANDIDATE@45..60 + 3: TW_FULL_CANDIDATE@45..59 0: TW_VARIANT_LIST@45..45 1: (empty) - 2: TW_FUNCTIONAL_CANDIDATE@45..60 + 2: TW_FUNCTIONAL_CANDIDATE@45..59 0: TW_BASE@45..53 "divide-y" [] [] 1: DASH@53..54 "-" [] [] - 2: TW_ARBITRARY_VALUE@54..60 + 2: TW_ARBITRARY_VALUE@54..59 0: L_BRACKET@54..55 "[" [] [] 1: TW_VALUE@55..58 "3px" [] [] - 2: R_BRACKET@58..60 "]" [] [Newline("\n")] + 2: R_BRACKET@58..59 "]" [] [] 3: (empty) 3: (empty) - 2: EOF@60..60 "" [] [] + 2: EOF@59..60 "" [Newline("\n")] [] ``` diff --git a/crates/biome_tailwind_parser/tests/tailwind_specs/ok/brackets/shadow.txt.snap b/crates/biome_tailwind_parser/tests/tailwind_specs/ok/brackets/shadow.txt.snap index e2a6268df1d4..2e32374de6f5 100644 --- a/crates/biome_tailwind_parser/tests/tailwind_specs/ok/brackets/shadow.txt.snap +++ b/crates/biome_tailwind_parser/tests/tailwind_specs/ok/brackets/shadow.txt.snap @@ -25,14 +25,14 @@ TwRoot { value: TwArbitraryValue { l_brack_token: L_BRACKET@7..8 "[" [] [], value_token: TW_VALUE@8..19 "0px_2px_4px" [] [], - r_brack_token: R_BRACKET@19..21 "]" [] [Newline("\n")], + r_brack_token: R_BRACKET@19..20 "]" [] [], }, modifier: missing (optional), }, excl_token: missing (optional), }, ], - eof_token: EOF@21..21 "" [] [], + eof_token: EOF@20..21 "" [Newline("\n")] [], } ``` @@ -41,19 +41,19 @@ TwRoot { ``` 0: TW_ROOT@0..21 0: (empty) - 1: TW_CANDIDATE_LIST@0..21 - 0: TW_FULL_CANDIDATE@0..21 + 1: TW_CANDIDATE_LIST@0..20 + 0: TW_FULL_CANDIDATE@0..20 0: TW_VARIANT_LIST@0..0 1: (empty) - 2: TW_FUNCTIONAL_CANDIDATE@0..21 + 2: TW_FUNCTIONAL_CANDIDATE@0..20 0: TW_BASE@0..6 "shadow" [] [] 1: DASH@6..7 "-" [] [] - 2: TW_ARBITRARY_VALUE@7..21 + 2: TW_ARBITRARY_VALUE@7..20 0: L_BRACKET@7..8 "[" [] [] 1: TW_VALUE@8..19 "0px_2px_4px" [] [] - 2: R_BRACKET@19..21 "]" [] [Newline("\n")] + 2: R_BRACKET@19..20 "]" [] [] 3: (empty) 3: (empty) - 2: EOF@21..21 "" [] [] + 2: EOF@20..21 "" [Newline("\n")] [] ``` diff --git a/crates/biome_tailwind_parser/tests/tailwind_specs/ok/candidates/arbitrary-candidate-0.txt.snap b/crates/biome_tailwind_parser/tests/tailwind_specs/ok/candidates/arbitrary-candidate-0.txt.snap index a45acd338dd6..2659d8844367 100644 --- a/crates/biome_tailwind_parser/tests/tailwind_specs/ok/candidates/arbitrary-candidate-0.txt.snap +++ b/crates/biome_tailwind_parser/tests/tailwind_specs/ok/candidates/arbitrary-candidate-0.txt.snap @@ -28,14 +28,14 @@ TwRoot { modifier: TwModifier { slash_token: SLASH@11..12 "/" [] [], value: TwNamedValue { - value_token: TW_VALUE@12..15 "50" [] [Newline("\n")], + value_token: TW_VALUE@12..14 "50" [] [], }, }, }, excl_token: missing (optional), }, ], - eof_token: EOF@15..15 "" [] [], + eof_token: EOF@14..15 "" [Newline("\n")] [], } ``` @@ -44,21 +44,21 @@ TwRoot { ``` 0: TW_ROOT@0..15 0: (empty) - 1: TW_CANDIDATE_LIST@0..15 - 0: TW_FULL_CANDIDATE@0..15 + 1: TW_CANDIDATE_LIST@0..14 + 0: TW_FULL_CANDIDATE@0..14 0: TW_VARIANT_LIST@0..0 1: (empty) - 2: TW_ARBITRARY_CANDIDATE@0..15 + 2: TW_ARBITRARY_CANDIDATE@0..14 0: L_BRACKET@0..1 "[" [] [] 1: TW_PROPERTY@1..6 "color" [] [] 2: COLON@6..7 ":" [] [] 3: TW_VALUE@7..10 "red" [] [] 4: R_BRACKET@10..11 "]" [] [] - 5: TW_MODIFIER@11..15 + 5: TW_MODIFIER@11..14 0: SLASH@11..12 "/" [] [] - 1: TW_NAMED_VALUE@12..15 - 0: TW_VALUE@12..15 "50" [] [Newline("\n")] + 1: TW_NAMED_VALUE@12..14 + 0: TW_VALUE@12..14 "50" [] [] 3: (empty) - 2: EOF@15..15 "" [] [] + 2: EOF@14..15 "" [Newline("\n")] [] ``` diff --git a/crates/biome_tailwind_parser/tests/tailwind_specs/ok/candidates/arbitrary-candidate-1.txt.snap b/crates/biome_tailwind_parser/tests/tailwind_specs/ok/candidates/arbitrary-candidate-1.txt.snap index c55493fde44e..0ced80e9072e 100644 --- a/crates/biome_tailwind_parser/tests/tailwind_specs/ok/candidates/arbitrary-candidate-1.txt.snap +++ b/crates/biome_tailwind_parser/tests/tailwind_specs/ok/candidates/arbitrary-candidate-1.txt.snap @@ -28,14 +28,14 @@ TwRoot { modifier: TwModifier { slash_token: SLASH@36..37 "/" [] [], value: TwNamedValue { - value_token: TW_VALUE@37..39 "5" [] [Newline("\n")], + value_token: TW_VALUE@37..38 "5" [] [], }, }, }, excl_token: missing (optional), }, ], - eof_token: EOF@39..39 "" [] [], + eof_token: EOF@38..39 "" [Newline("\n")] [], } ``` @@ -44,21 +44,21 @@ TwRoot { ``` 0: TW_ROOT@0..39 0: (empty) - 1: TW_CANDIDATE_LIST@0..39 - 0: TW_FULL_CANDIDATE@0..39 + 1: TW_CANDIDATE_LIST@0..38 + 0: TW_FULL_CANDIDATE@0..38 0: TW_VARIANT_LIST@0..0 1: (empty) - 2: TW_ARBITRARY_CANDIDATE@0..39 + 2: TW_ARBITRARY_CANDIDATE@0..38 0: L_BRACKET@0..1 "[" [] [] 1: TW_PROPERTY@1..13 "--pattern-fg" [] [] 2: COLON@13..14 ":" [] [] 3: TW_VALUE@14..35 "var(--color-gray-950)" [] [] 4: R_BRACKET@35..36 "]" [] [] - 5: TW_MODIFIER@36..39 + 5: TW_MODIFIER@36..38 0: SLASH@36..37 "/" [] [] - 1: TW_NAMED_VALUE@37..39 - 0: TW_VALUE@37..39 "5" [] [Newline("\n")] + 1: TW_NAMED_VALUE@37..38 + 0: TW_VALUE@37..38 "5" [] [] 3: (empty) - 2: EOF@39..39 "" [] [] + 2: EOF@38..39 "" [Newline("\n")] [] ``` diff --git a/crates/biome_tailwind_parser/tests/tailwind_specs/ok/candidates/arbitrary-candidate-2.txt.snap b/crates/biome_tailwind_parser/tests/tailwind_specs/ok/candidates/arbitrary-candidate-2.txt.snap index 84dfc7aa3edf..d6355bc32848 100644 --- a/crates/biome_tailwind_parser/tests/tailwind_specs/ok/candidates/arbitrary-candidate-2.txt.snap +++ b/crates/biome_tailwind_parser/tests/tailwind_specs/ok/candidates/arbitrary-candidate-2.txt.snap @@ -33,14 +33,14 @@ TwRoot { modifier: TwModifier { slash_token: SLASH@38..39 "/" [] [], value: TwNamedValue { - value_token: TW_VALUE@39..42 "10" [] [Newline("\n")], + value_token: TW_VALUE@39..41 "10" [] [], }, }, }, excl_token: missing (optional), }, ], - eof_token: EOF@42..42 "" [] [], + eof_token: EOF@41..42 "" [Newline("\n")] [], } ``` @@ -49,24 +49,24 @@ TwRoot { ``` 0: TW_ROOT@0..42 0: (empty) - 1: TW_CANDIDATE_LIST@0..42 - 0: TW_FULL_CANDIDATE@0..42 + 1: TW_CANDIDATE_LIST@0..41 + 0: TW_FULL_CANDIDATE@0..41 0: TW_VARIANT_LIST@0..5 0: TW_STATIC_VARIANT@0..4 0: TW_BASE@0..4 "dark" [] [] 1: COLON@4..5 ":" [] [] 1: (empty) - 2: TW_ARBITRARY_CANDIDATE@5..42 + 2: TW_ARBITRARY_CANDIDATE@5..41 0: L_BRACKET@5..6 "[" [] [] 1: TW_PROPERTY@6..18 "--pattern-fg" [] [] 2: COLON@18..19 ":" [] [] 3: TW_VALUE@19..37 "var(--color-white)" [] [] 4: R_BRACKET@37..38 "]" [] [] - 5: TW_MODIFIER@38..42 + 5: TW_MODIFIER@38..41 0: SLASH@38..39 "/" [] [] - 1: TW_NAMED_VALUE@39..42 - 0: TW_VALUE@39..42 "10" [] [Newline("\n")] + 1: TW_NAMED_VALUE@39..41 + 0: TW_VALUE@39..41 "10" [] [] 3: (empty) - 2: EOF@42..42 "" [] [] + 2: EOF@41..42 "" [Newline("\n")] [] ``` diff --git a/crates/biome_tailwind_parser/tests/tailwind_specs/ok/candidates/arbitrary-candidate-3.txt.snap b/crates/biome_tailwind_parser/tests/tailwind_specs/ok/candidates/arbitrary-candidate-3.txt.snap index 95c25206ef15..669a103932ed 100644 --- a/crates/biome_tailwind_parser/tests/tailwind_specs/ok/candidates/arbitrary-candidate-3.txt.snap +++ b/crates/biome_tailwind_parser/tests/tailwind_specs/ok/candidates/arbitrary-candidate-3.txt.snap @@ -24,13 +24,13 @@ TwRoot { property_token: TW_PROPERTY@1..11 "background" [] [], colon_token: COLON@11..12 ":" [] [], value_token: TW_VALUE@12..16 "blue" [] [], - r_brack_token: R_BRACKET@16..18 "]" [] [Newline("\n")], + r_brack_token: R_BRACKET@16..17 "]" [] [], modifier: missing (optional), }, excl_token: missing (optional), }, ], - eof_token: EOF@18..18 "" [] [], + eof_token: EOF@17..18 "" [Newline("\n")] [], } ``` @@ -39,18 +39,18 @@ TwRoot { ``` 0: TW_ROOT@0..18 0: (empty) - 1: TW_CANDIDATE_LIST@0..18 - 0: TW_FULL_CANDIDATE@0..18 + 1: TW_CANDIDATE_LIST@0..17 + 0: TW_FULL_CANDIDATE@0..17 0: TW_VARIANT_LIST@0..0 1: (empty) - 2: TW_ARBITRARY_CANDIDATE@0..18 + 2: TW_ARBITRARY_CANDIDATE@0..17 0: L_BRACKET@0..1 "[" [] [] 1: TW_PROPERTY@1..11 "background" [] [] 2: COLON@11..12 ":" [] [] 3: TW_VALUE@12..16 "blue" [] [] - 4: R_BRACKET@16..18 "]" [] [Newline("\n")] + 4: R_BRACKET@16..17 "]" [] [] 5: (empty) 3: (empty) - 2: EOF@18..18 "" [] [] + 2: EOF@17..18 "" [Newline("\n")] [] ``` diff --git a/crates/biome_tailwind_parser/tests/tailwind_specs/ok/gradients/precise-control.txt.snap b/crates/biome_tailwind_parser/tests/tailwind_specs/ok/gradients/precise-control.txt.snap index 2885e7b8e43a..a6a115ac0b98 100644 --- a/crates/biome_tailwind_parser/tests/tailwind_specs/ok/gradients/precise-control.txt.snap +++ b/crates/biome_tailwind_parser/tests/tailwind_specs/ok/gradients/precise-control.txt.snap @@ -23,13 +23,12 @@ TwRoot { base_token: TW_BASE@0..2 "bg" [] [], minus_token: DASH@2..3 "-" [] [], value: TwNamedValue { - value_token: TW_VALUE@3..16 "gradient-to-r" [] [], + value_token: TW_VALUE@3..17 "gradient-to-r" [] [Whitespace(" ")], }, modifier: missing (optional), }, excl_token: missing (optional), }, - WHITESPACE@16..17 " " [] [], TwFullCandidate { variants: TwVariantList [], negative_token: missing (optional), @@ -37,13 +36,12 @@ TwRoot { base_token: TW_BASE@17..21 "from" [] [], minus_token: DASH@21..22 "-" [] [], value: TwNamedValue { - value_token: TW_VALUE@22..32 "indigo-500" [] [], + value_token: TW_VALUE@22..33 "indigo-500" [] [Whitespace(" ")], }, modifier: missing (optional), }, excl_token: missing (optional), }, - WHITESPACE@32..33 " " [] [], TwFullCandidate { variants: TwVariantList [], negative_token: missing (optional), @@ -51,13 +49,12 @@ TwRoot { base_token: TW_BASE@33..37 "from" [] [], minus_token: DASH@37..38 "-" [] [], value: TwNamedValue { - value_token: TW_VALUE@38..41 "10%" [] [], + value_token: TW_VALUE@38..42 "10%" [] [Whitespace(" ")], }, modifier: missing (optional), }, excl_token: missing (optional), }, - WHITESPACE@41..42 " " [] [], TwFullCandidate { variants: TwVariantList [], negative_token: missing (optional), @@ -65,13 +62,12 @@ TwRoot { base_token: TW_BASE@42..45 "via" [] [], minus_token: DASH@45..46 "-" [] [], value: TwNamedValue { - value_token: TW_VALUE@46..53 "sky-500" [] [], + value_token: TW_VALUE@46..54 "sky-500" [] [Whitespace(" ")], }, modifier: missing (optional), }, excl_token: missing (optional), }, - WHITESPACE@53..54 " " [] [], TwFullCandidate { variants: TwVariantList [], negative_token: missing (optional), @@ -79,13 +75,12 @@ TwRoot { base_token: TW_BASE@54..57 "via" [] [], minus_token: DASH@57..58 "-" [] [], value: TwNamedValue { - value_token: TW_VALUE@58..61 "30%" [] [], + value_token: TW_VALUE@58..62 "30%" [] [Whitespace(" ")], }, modifier: missing (optional), }, excl_token: missing (optional), }, - WHITESPACE@61..62 " " [] [], TwFullCandidate { variants: TwVariantList [], negative_token: missing (optional), @@ -93,13 +88,12 @@ TwRoot { base_token: TW_BASE@62..64 "to" [] [], minus_token: DASH@64..65 "-" [] [], value: TwNamedValue { - value_token: TW_VALUE@65..76 "emerald-500" [] [], + value_token: TW_VALUE@65..77 "emerald-500" [] [Whitespace(" ")], }, modifier: missing (optional), }, excl_token: missing (optional), }, - WHITESPACE@76..77 " " [] [], TwFullCandidate { variants: TwVariantList [], negative_token: missing (optional), @@ -107,14 +101,14 @@ TwRoot { base_token: TW_BASE@77..79 "to" [] [], minus_token: DASH@79..80 "-" [] [], value: TwNamedValue { - value_token: TW_VALUE@80..84 "90%" [] [Newline("\n")], + value_token: TW_VALUE@80..83 "90%" [] [], }, modifier: missing (optional), }, excl_token: missing (optional), }, ], - eof_token: EOF@84..84 "" [] [], + eof_token: EOF@83..84 "" [Newline("\n")] [], } ``` @@ -123,83 +117,77 @@ TwRoot { ``` 0: TW_ROOT@0..84 0: (empty) - 1: TW_CANDIDATE_LIST@0..84 - 0: TW_FULL_CANDIDATE@0..16 + 1: TW_CANDIDATE_LIST@0..83 + 0: TW_FULL_CANDIDATE@0..17 0: TW_VARIANT_LIST@0..0 1: (empty) - 2: TW_FUNCTIONAL_CANDIDATE@0..16 + 2: TW_FUNCTIONAL_CANDIDATE@0..17 0: TW_BASE@0..2 "bg" [] [] 1: DASH@2..3 "-" [] [] - 2: TW_NAMED_VALUE@3..16 - 0: TW_VALUE@3..16 "gradient-to-r" [] [] + 2: TW_NAMED_VALUE@3..17 + 0: TW_VALUE@3..17 "gradient-to-r" [] [Whitespace(" ")] 3: (empty) 3: (empty) - 1: WHITESPACE@16..17 " " [] [] - 2: TW_FULL_CANDIDATE@17..32 + 1: TW_FULL_CANDIDATE@17..33 0: TW_VARIANT_LIST@17..17 1: (empty) - 2: TW_FUNCTIONAL_CANDIDATE@17..32 + 2: TW_FUNCTIONAL_CANDIDATE@17..33 0: TW_BASE@17..21 "from" [] [] 1: DASH@21..22 "-" [] [] - 2: TW_NAMED_VALUE@22..32 - 0: TW_VALUE@22..32 "indigo-500" [] [] + 2: TW_NAMED_VALUE@22..33 + 0: TW_VALUE@22..33 "indigo-500" [] [Whitespace(" ")] 3: (empty) 3: (empty) - 3: WHITESPACE@32..33 " " [] [] - 4: TW_FULL_CANDIDATE@33..41 + 2: TW_FULL_CANDIDATE@33..42 0: TW_VARIANT_LIST@33..33 1: (empty) - 2: TW_FUNCTIONAL_CANDIDATE@33..41 + 2: TW_FUNCTIONAL_CANDIDATE@33..42 0: TW_BASE@33..37 "from" [] [] 1: DASH@37..38 "-" [] [] - 2: TW_NAMED_VALUE@38..41 - 0: TW_VALUE@38..41 "10%" [] [] + 2: TW_NAMED_VALUE@38..42 + 0: TW_VALUE@38..42 "10%" [] [Whitespace(" ")] 3: (empty) 3: (empty) - 5: WHITESPACE@41..42 " " [] [] - 6: TW_FULL_CANDIDATE@42..53 + 3: TW_FULL_CANDIDATE@42..54 0: TW_VARIANT_LIST@42..42 1: (empty) - 2: TW_FUNCTIONAL_CANDIDATE@42..53 + 2: TW_FUNCTIONAL_CANDIDATE@42..54 0: TW_BASE@42..45 "via" [] [] 1: DASH@45..46 "-" [] [] - 2: TW_NAMED_VALUE@46..53 - 0: TW_VALUE@46..53 "sky-500" [] [] + 2: TW_NAMED_VALUE@46..54 + 0: TW_VALUE@46..54 "sky-500" [] [Whitespace(" ")] 3: (empty) 3: (empty) - 7: WHITESPACE@53..54 " " [] [] - 8: TW_FULL_CANDIDATE@54..61 + 4: TW_FULL_CANDIDATE@54..62 0: TW_VARIANT_LIST@54..54 1: (empty) - 2: TW_FUNCTIONAL_CANDIDATE@54..61 + 2: TW_FUNCTIONAL_CANDIDATE@54..62 0: TW_BASE@54..57 "via" [] [] 1: DASH@57..58 "-" [] [] - 2: TW_NAMED_VALUE@58..61 - 0: TW_VALUE@58..61 "30%" [] [] + 2: TW_NAMED_VALUE@58..62 + 0: TW_VALUE@58..62 "30%" [] [Whitespace(" ")] 3: (empty) 3: (empty) - 9: WHITESPACE@61..62 " " [] [] - 10: TW_FULL_CANDIDATE@62..76 + 5: TW_FULL_CANDIDATE@62..77 0: TW_VARIANT_LIST@62..62 1: (empty) - 2: TW_FUNCTIONAL_CANDIDATE@62..76 + 2: TW_FUNCTIONAL_CANDIDATE@62..77 0: TW_BASE@62..64 "to" [] [] 1: DASH@64..65 "-" [] [] - 2: TW_NAMED_VALUE@65..76 - 0: TW_VALUE@65..76 "emerald-500" [] [] + 2: TW_NAMED_VALUE@65..77 + 0: TW_VALUE@65..77 "emerald-500" [] [Whitespace(" ")] 3: (empty) 3: (empty) - 11: WHITESPACE@76..77 " " [] [] - 12: TW_FULL_CANDIDATE@77..84 + 6: TW_FULL_CANDIDATE@77..83 0: TW_VARIANT_LIST@77..77 1: (empty) - 2: TW_FUNCTIONAL_CANDIDATE@77..84 + 2: TW_FUNCTIONAL_CANDIDATE@77..83 0: TW_BASE@77..79 "to" [] [] 1: DASH@79..80 "-" [] [] - 2: TW_NAMED_VALUE@80..84 - 0: TW_VALUE@80..84 "90%" [] [Newline("\n")] + 2: TW_NAMED_VALUE@80..83 + 0: TW_VALUE@80..83 "90%" [] [] 3: (empty) 3: (empty) - 2: EOF@84..84 "" [] [] + 2: EOF@83..84 "" [Newline("\n")] [] ``` diff --git a/crates/biome_tailwind_parser/tests/tailwind_specs/ok/gradients/simple.txt.snap b/crates/biome_tailwind_parser/tests/tailwind_specs/ok/gradients/simple.txt.snap index a959815ac7b6..72602980c5ac 100644 --- a/crates/biome_tailwind_parser/tests/tailwind_specs/ok/gradients/simple.txt.snap +++ b/crates/biome_tailwind_parser/tests/tailwind_specs/ok/gradients/simple.txt.snap @@ -23,13 +23,12 @@ TwRoot { base_token: TW_BASE@0..2 "bg" [] [], minus_token: DASH@2..3 "-" [] [], value: TwNamedValue { - value_token: TW_VALUE@3..16 "gradient-to-r" [] [], + value_token: TW_VALUE@3..17 "gradient-to-r" [] [Whitespace(" ")], }, modifier: missing (optional), }, excl_token: missing (optional), }, - WHITESPACE@16..17 " " [] [], TwFullCandidate { variants: TwVariantList [], negative_token: missing (optional), @@ -37,13 +36,12 @@ TwRoot { base_token: TW_BASE@17..21 "from" [] [], minus_token: DASH@21..22 "-" [] [], value: TwNamedValue { - value_token: TW_VALUE@22..32 "indigo-500" [] [], + value_token: TW_VALUE@22..33 "indigo-500" [] [Whitespace(" ")], }, modifier: missing (optional), }, excl_token: missing (optional), }, - WHITESPACE@32..33 " " [] [], TwFullCandidate { variants: TwVariantList [], negative_token: missing (optional), @@ -51,13 +49,12 @@ TwRoot { base_token: TW_BASE@33..36 "via" [] [], minus_token: DASH@36..37 "-" [] [], value: TwNamedValue { - value_token: TW_VALUE@37..47 "purple-500" [] [], + value_token: TW_VALUE@37..48 "purple-500" [] [Whitespace(" ")], }, modifier: missing (optional), }, excl_token: missing (optional), }, - WHITESPACE@47..48 " " [] [], TwFullCandidate { variants: TwVariantList [], negative_token: missing (optional), @@ -65,14 +62,14 @@ TwRoot { base_token: TW_BASE@48..50 "to" [] [], minus_token: DASH@50..51 "-" [] [], value: TwNamedValue { - value_token: TW_VALUE@51..60 "pink-500" [] [Newline("\n")], + value_token: TW_VALUE@51..59 "pink-500" [] [], }, modifier: missing (optional), }, excl_token: missing (optional), }, ], - eof_token: EOF@60..60 "" [] [], + eof_token: EOF@59..60 "" [Newline("\n")] [], } ``` @@ -81,50 +78,47 @@ TwRoot { ``` 0: TW_ROOT@0..60 0: (empty) - 1: TW_CANDIDATE_LIST@0..60 - 0: TW_FULL_CANDIDATE@0..16 + 1: TW_CANDIDATE_LIST@0..59 + 0: TW_FULL_CANDIDATE@0..17 0: TW_VARIANT_LIST@0..0 1: (empty) - 2: TW_FUNCTIONAL_CANDIDATE@0..16 + 2: TW_FUNCTIONAL_CANDIDATE@0..17 0: TW_BASE@0..2 "bg" [] [] 1: DASH@2..3 "-" [] [] - 2: TW_NAMED_VALUE@3..16 - 0: TW_VALUE@3..16 "gradient-to-r" [] [] + 2: TW_NAMED_VALUE@3..17 + 0: TW_VALUE@3..17 "gradient-to-r" [] [Whitespace(" ")] 3: (empty) 3: (empty) - 1: WHITESPACE@16..17 " " [] [] - 2: TW_FULL_CANDIDATE@17..32 + 1: TW_FULL_CANDIDATE@17..33 0: TW_VARIANT_LIST@17..17 1: (empty) - 2: TW_FUNCTIONAL_CANDIDATE@17..32 + 2: TW_FUNCTIONAL_CANDIDATE@17..33 0: TW_BASE@17..21 "from" [] [] 1: DASH@21..22 "-" [] [] - 2: TW_NAMED_VALUE@22..32 - 0: TW_VALUE@22..32 "indigo-500" [] [] + 2: TW_NAMED_VALUE@22..33 + 0: TW_VALUE@22..33 "indigo-500" [] [Whitespace(" ")] 3: (empty) 3: (empty) - 3: WHITESPACE@32..33 " " [] [] - 4: TW_FULL_CANDIDATE@33..47 + 2: TW_FULL_CANDIDATE@33..48 0: TW_VARIANT_LIST@33..33 1: (empty) - 2: TW_FUNCTIONAL_CANDIDATE@33..47 + 2: TW_FUNCTIONAL_CANDIDATE@33..48 0: TW_BASE@33..36 "via" [] [] 1: DASH@36..37 "-" [] [] - 2: TW_NAMED_VALUE@37..47 - 0: TW_VALUE@37..47 "purple-500" [] [] + 2: TW_NAMED_VALUE@37..48 + 0: TW_VALUE@37..48 "purple-500" [] [Whitespace(" ")] 3: (empty) 3: (empty) - 5: WHITESPACE@47..48 " " [] [] - 6: TW_FULL_CANDIDATE@48..60 + 3: TW_FULL_CANDIDATE@48..59 0: TW_VARIANT_LIST@48..48 1: (empty) - 2: TW_FUNCTIONAL_CANDIDATE@48..60 + 2: TW_FUNCTIONAL_CANDIDATE@48..59 0: TW_BASE@48..50 "to" [] [] 1: DASH@50..51 "-" [] [] - 2: TW_NAMED_VALUE@51..60 - 0: TW_VALUE@51..60 "pink-500" [] [Newline("\n")] + 2: TW_NAMED_VALUE@51..59 + 0: TW_VALUE@51..59 "pink-500" [] [] 3: (empty) 3: (empty) - 2: EOF@60..60 "" [] [] + 2: EOF@59..60 "" [Newline("\n")] [] ``` diff --git a/crates/biome_tailwind_parser/tests/tailwind_specs/ok/simple/2-classes.txt b/crates/biome_tailwind_parser/tests/tailwind_specs/ok/simple/2-classes.txt new file mode 100644 index 000000000000..2fc0e08f5203 --- /dev/null +++ b/crates/biome_tailwind_parser/tests/tailwind_specs/ok/simple/2-classes.txt @@ -0,0 +1 @@ +border -top-2 diff --git a/crates/biome_tailwind_parser/tests/tailwind_specs/ok/simple/2-classes.txt.snap b/crates/biome_tailwind_parser/tests/tailwind_specs/ok/simple/2-classes.txt.snap new file mode 100644 index 000000000000..53f55a93105b --- /dev/null +++ b/crates/biome_tailwind_parser/tests/tailwind_specs/ok/simple/2-classes.txt.snap @@ -0,0 +1,69 @@ +--- +source: crates/biome_tailwind_parser/tests/spec_test.rs +expression: snapshot +--- +## Input + +```text +border -top-2 + +``` + + +## AST + +``` +TwRoot { + bom_token: missing (optional), + candidates: TwCandidateList [ + TwFullCandidate { + variants: TwVariantList [], + negative_token: missing (optional), + candidate: TwStaticCandidate { + base_token: TW_BASE@0..7 "border" [] [Whitespace(" ")], + }, + excl_token: missing (optional), + }, + TwFullCandidate { + variants: TwVariantList [], + negative_token: DASH@7..8 "-" [] [], + candidate: TwFunctionalCandidate { + base_token: TW_BASE@8..11 "top" [] [], + minus_token: DASH@11..12 "-" [] [], + value: TwNamedValue { + value_token: TW_VALUE@12..13 "2" [] [], + }, + modifier: missing (optional), + }, + excl_token: missing (optional), + }, + ], + eof_token: EOF@13..14 "" [Newline("\n")] [], +} +``` + +## CST + +``` +0: TW_ROOT@0..14 + 0: (empty) + 1: TW_CANDIDATE_LIST@0..13 + 0: TW_FULL_CANDIDATE@0..7 + 0: TW_VARIANT_LIST@0..0 + 1: (empty) + 2: TW_STATIC_CANDIDATE@0..7 + 0: TW_BASE@0..7 "border" [] [Whitespace(" ")] + 3: (empty) + 1: TW_FULL_CANDIDATE@7..13 + 0: TW_VARIANT_LIST@7..7 + 1: DASH@7..8 "-" [] [] + 2: TW_FUNCTIONAL_CANDIDATE@8..13 + 0: TW_BASE@8..11 "top" [] [] + 1: DASH@11..12 "-" [] [] + 2: TW_NAMED_VALUE@12..13 + 0: TW_VALUE@12..13 "2" [] [] + 3: (empty) + 3: (empty) + 2: EOF@13..14 "" [Newline("\n")] [] + +``` diff --git a/crates/biome_tailwind_parser/tests/tailwind_specs/ok/simple/arbitrary-value-0.txt.snap b/crates/biome_tailwind_parser/tests/tailwind_specs/ok/simple/arbitrary-value-0.txt.snap index 32e3c7a0e620..0a73ff5646d9 100644 --- a/crates/biome_tailwind_parser/tests/tailwind_specs/ok/simple/arbitrary-value-0.txt.snap +++ b/crates/biome_tailwind_parser/tests/tailwind_specs/ok/simple/arbitrary-value-0.txt.snap @@ -25,14 +25,14 @@ TwRoot { value: TwArbitraryValue { l_brack_token: L_BRACKET@3..4 "[" [] [], value_token: TW_VALUE@4..11 "#ff0000" [] [], - r_brack_token: R_BRACKET@11..13 "]" [] [Newline("\n")], + r_brack_token: R_BRACKET@11..12 "]" [] [], }, modifier: missing (optional), }, excl_token: missing (optional), }, ], - eof_token: EOF@13..13 "" [] [], + eof_token: EOF@12..13 "" [Newline("\n")] [], } ``` @@ -41,19 +41,19 @@ TwRoot { ``` 0: TW_ROOT@0..13 0: (empty) - 1: TW_CANDIDATE_LIST@0..13 - 0: TW_FULL_CANDIDATE@0..13 + 1: TW_CANDIDATE_LIST@0..12 + 0: TW_FULL_CANDIDATE@0..12 0: TW_VARIANT_LIST@0..0 1: (empty) - 2: TW_FUNCTIONAL_CANDIDATE@0..13 + 2: TW_FUNCTIONAL_CANDIDATE@0..12 0: TW_BASE@0..2 "bg" [] [] 1: DASH@2..3 "-" [] [] - 2: TW_ARBITRARY_VALUE@3..13 + 2: TW_ARBITRARY_VALUE@3..12 0: L_BRACKET@3..4 "[" [] [] 1: TW_VALUE@4..11 "#ff0000" [] [] - 2: R_BRACKET@11..13 "]" [] [Newline("\n")] + 2: R_BRACKET@11..12 "]" [] [] 3: (empty) 3: (empty) - 2: EOF@13..13 "" [] [] + 2: EOF@12..13 "" [Newline("\n")] [] ``` diff --git a/crates/biome_tailwind_parser/tests/tailwind_specs/ok/simple/arbitrary-value-1.txt.snap b/crates/biome_tailwind_parser/tests/tailwind_specs/ok/simple/arbitrary-value-1.txt.snap index de0d76a7758e..e0bd95a96c70 100644 --- a/crates/biome_tailwind_parser/tests/tailwind_specs/ok/simple/arbitrary-value-1.txt.snap +++ b/crates/biome_tailwind_parser/tests/tailwind_specs/ok/simple/arbitrary-value-1.txt.snap @@ -25,14 +25,14 @@ TwRoot { value: TwArbitraryValue { l_brack_token: L_BRACKET@3..4 "[" [] [], value_token: TW_VALUE@4..8 "16px" [] [], - r_brack_token: R_BRACKET@8..10 "]" [] [Newline("\n")], + r_brack_token: R_BRACKET@8..9 "]" [] [], }, modifier: missing (optional), }, excl_token: missing (optional), }, ], - eof_token: EOF@10..10 "" [] [], + eof_token: EOF@9..10 "" [Newline("\n")] [], } ``` @@ -41,19 +41,19 @@ TwRoot { ``` 0: TW_ROOT@0..10 0: (empty) - 1: TW_CANDIDATE_LIST@0..10 - 0: TW_FULL_CANDIDATE@0..10 + 1: TW_CANDIDATE_LIST@0..9 + 0: TW_FULL_CANDIDATE@0..9 0: TW_VARIANT_LIST@0..0 1: (empty) - 2: TW_FUNCTIONAL_CANDIDATE@0..10 + 2: TW_FUNCTIONAL_CANDIDATE@0..9 0: TW_BASE@0..2 "px" [] [] 1: DASH@2..3 "-" [] [] - 2: TW_ARBITRARY_VALUE@3..10 + 2: TW_ARBITRARY_VALUE@3..9 0: L_BRACKET@3..4 "[" [] [] 1: TW_VALUE@4..8 "16px" [] [] - 2: R_BRACKET@8..10 "]" [] [Newline("\n")] + 2: R_BRACKET@8..9 "]" [] [] 3: (empty) 3: (empty) - 2: EOF@10..10 "" [] [] + 2: EOF@9..10 "" [Newline("\n")] [] ``` diff --git a/crates/biome_tailwind_parser/tests/tailwind_specs/ok/simple/base-has-dash-0.txt.snap b/crates/biome_tailwind_parser/tests/tailwind_specs/ok/simple/base-has-dash-0.txt.snap index dbcb57ae55bd..1d7732ba845c 100644 --- a/crates/biome_tailwind_parser/tests/tailwind_specs/ok/simple/base-has-dash-0.txt.snap +++ b/crates/biome_tailwind_parser/tests/tailwind_specs/ok/simple/base-has-dash-0.txt.snap @@ -23,14 +23,14 @@ TwRoot { base_token: TW_BASE@0..11 "drop-shadow" [] [], minus_token: DASH@11..12 "-" [] [], value: TwNamedValue { - value_token: TW_VALUE@12..20 "red-500" [] [Newline("\n")], + value_token: TW_VALUE@12..19 "red-500" [] [], }, modifier: missing (optional), }, excl_token: missing (optional), }, ], - eof_token: EOF@20..20 "" [] [], + eof_token: EOF@19..20 "" [Newline("\n")] [], } ``` @@ -39,17 +39,17 @@ TwRoot { ``` 0: TW_ROOT@0..20 0: (empty) - 1: TW_CANDIDATE_LIST@0..20 - 0: TW_FULL_CANDIDATE@0..20 + 1: TW_CANDIDATE_LIST@0..19 + 0: TW_FULL_CANDIDATE@0..19 0: TW_VARIANT_LIST@0..0 1: (empty) - 2: TW_FUNCTIONAL_CANDIDATE@0..20 + 2: TW_FUNCTIONAL_CANDIDATE@0..19 0: TW_BASE@0..11 "drop-shadow" [] [] 1: DASH@11..12 "-" [] [] - 2: TW_NAMED_VALUE@12..20 - 0: TW_VALUE@12..20 "red-500" [] [Newline("\n")] + 2: TW_NAMED_VALUE@12..19 + 0: TW_VALUE@12..19 "red-500" [] [] 3: (empty) 3: (empty) - 2: EOF@20..20 "" [] [] + 2: EOF@19..20 "" [Newline("\n")] [] ``` diff --git a/crates/biome_tailwind_parser/tests/tailwind_specs/ok/simple/base-has-dash-1.txt.snap b/crates/biome_tailwind_parser/tests/tailwind_specs/ok/simple/base-has-dash-1.txt.snap index aad8b03d5f83..1f86a12a71c4 100644 --- a/crates/biome_tailwind_parser/tests/tailwind_specs/ok/simple/base-has-dash-1.txt.snap +++ b/crates/biome_tailwind_parser/tests/tailwind_specs/ok/simple/base-has-dash-1.txt.snap @@ -25,14 +25,14 @@ TwRoot { value: TwArbitraryValue { l_brack_token: L_BRACKET@12..13 "[" [] [], value_token: TW_VALUE@13..20 "#000000" [] [], - r_brack_token: R_BRACKET@20..22 "]" [] [Newline("\n")], + r_brack_token: R_BRACKET@20..21 "]" [] [], }, modifier: missing (optional), }, excl_token: missing (optional), }, ], - eof_token: EOF@22..22 "" [] [], + eof_token: EOF@21..22 "" [Newline("\n")] [], } ``` @@ -41,19 +41,19 @@ TwRoot { ``` 0: TW_ROOT@0..22 0: (empty) - 1: TW_CANDIDATE_LIST@0..22 - 0: TW_FULL_CANDIDATE@0..22 + 1: TW_CANDIDATE_LIST@0..21 + 0: TW_FULL_CANDIDATE@0..21 0: TW_VARIANT_LIST@0..0 1: (empty) - 2: TW_FUNCTIONAL_CANDIDATE@0..22 + 2: TW_FUNCTIONAL_CANDIDATE@0..21 0: TW_BASE@0..11 "drop-shadow" [] [] 1: DASH@11..12 "-" [] [] - 2: TW_ARBITRARY_VALUE@12..22 + 2: TW_ARBITRARY_VALUE@12..21 0: L_BRACKET@12..13 "[" [] [] 1: TW_VALUE@13..20 "#000000" [] [] - 2: R_BRACKET@20..22 "]" [] [Newline("\n")] + 2: R_BRACKET@20..21 "]" [] [] 3: (empty) 3: (empty) - 2: EOF@22..22 "" [] [] + 2: EOF@21..22 "" [Newline("\n")] [] ``` diff --git a/crates/biome_tailwind_parser/tests/tailwind_specs/ok/simple/base-has-dash-2.txt.snap b/crates/biome_tailwind_parser/tests/tailwind_specs/ok/simple/base-has-dash-2.txt.snap index 95028e1b39d3..92a3cab79a12 100644 --- a/crates/biome_tailwind_parser/tests/tailwind_specs/ok/simple/base-has-dash-2.txt.snap +++ b/crates/biome_tailwind_parser/tests/tailwind_specs/ok/simple/base-has-dash-2.txt.snap @@ -25,14 +25,14 @@ TwRoot { value: TwArbitraryValue { l_brack_token: L_BRACKET@17..18 "[" [] [], value_token: TW_VALUE@18..21 "2px" [] [], - r_brack_token: R_BRACKET@21..23 "]" [] [Newline("\n")], + r_brack_token: R_BRACKET@21..22 "]" [] [], }, modifier: missing (optional), }, excl_token: missing (optional), }, ], - eof_token: EOF@23..23 "" [] [], + eof_token: EOF@22..23 "" [Newline("\n")] [], } ``` @@ -41,19 +41,19 @@ TwRoot { ``` 0: TW_ROOT@0..23 0: (empty) - 1: TW_CANDIDATE_LIST@0..23 - 0: TW_FULL_CANDIDATE@0..23 + 1: TW_CANDIDATE_LIST@0..22 + 0: TW_FULL_CANDIDATE@0..22 0: TW_VARIANT_LIST@0..0 1: (empty) - 2: TW_FUNCTIONAL_CANDIDATE@0..23 + 2: TW_FUNCTIONAL_CANDIDATE@0..22 0: TW_BASE@0..16 "border-spacing-y" [] [] 1: DASH@16..17 "-" [] [] - 2: TW_ARBITRARY_VALUE@17..23 + 2: TW_ARBITRARY_VALUE@17..22 0: L_BRACKET@17..18 "[" [] [] 1: TW_VALUE@18..21 "2px" [] [] - 2: R_BRACKET@21..23 "]" [] [Newline("\n")] + 2: R_BRACKET@21..22 "]" [] [] 3: (empty) 3: (empty) - 2: EOF@23..23 "" [] [] + 2: EOF@22..23 "" [Newline("\n")] [] ``` diff --git a/crates/biome_tailwind_parser/tests/tailwind_specs/ok/simple/basic-0.txt.snap b/crates/biome_tailwind_parser/tests/tailwind_specs/ok/simple/basic-0.txt.snap index 688f5acecf1a..29951445d20f 100644 --- a/crates/biome_tailwind_parser/tests/tailwind_specs/ok/simple/basic-0.txt.snap +++ b/crates/biome_tailwind_parser/tests/tailwind_specs/ok/simple/basic-0.txt.snap @@ -23,14 +23,14 @@ TwRoot { base_token: TW_BASE@0..4 "text" [] [], minus_token: DASH@4..5 "-" [] [], value: TwNamedValue { - value_token: TW_VALUE@5..8 "md" [] [Newline("\n")], + value_token: TW_VALUE@5..7 "md" [] [], }, modifier: missing (optional), }, excl_token: missing (optional), }, ], - eof_token: EOF@8..8 "" [] [], + eof_token: EOF@7..8 "" [Newline("\n")] [], } ``` @@ -39,17 +39,17 @@ TwRoot { ``` 0: TW_ROOT@0..8 0: (empty) - 1: TW_CANDIDATE_LIST@0..8 - 0: TW_FULL_CANDIDATE@0..8 + 1: TW_CANDIDATE_LIST@0..7 + 0: TW_FULL_CANDIDATE@0..7 0: TW_VARIANT_LIST@0..0 1: (empty) - 2: TW_FUNCTIONAL_CANDIDATE@0..8 + 2: TW_FUNCTIONAL_CANDIDATE@0..7 0: TW_BASE@0..4 "text" [] [] 1: DASH@4..5 "-" [] [] - 2: TW_NAMED_VALUE@5..8 - 0: TW_VALUE@5..8 "md" [] [Newline("\n")] + 2: TW_NAMED_VALUE@5..7 + 0: TW_VALUE@5..7 "md" [] [] 3: (empty) 3: (empty) - 2: EOF@8..8 "" [] [] + 2: EOF@7..8 "" [Newline("\n")] [] ``` diff --git a/crates/biome_tailwind_parser/tests/tailwind_specs/ok/simple/basic-1.txt.snap b/crates/biome_tailwind_parser/tests/tailwind_specs/ok/simple/basic-1.txt.snap index 7aa39c40738d..74b4bf5d8ca5 100644 --- a/crates/biome_tailwind_parser/tests/tailwind_specs/ok/simple/basic-1.txt.snap +++ b/crates/biome_tailwind_parser/tests/tailwind_specs/ok/simple/basic-1.txt.snap @@ -23,14 +23,14 @@ TwRoot { base_token: TW_BASE@0..2 "bg" [] [], minus_token: DASH@2..3 "-" [] [], value: TwNamedValue { - value_token: TW_VALUE@3..11 "red-500" [] [Newline("\n")], + value_token: TW_VALUE@3..10 "red-500" [] [], }, modifier: missing (optional), }, excl_token: missing (optional), }, ], - eof_token: EOF@11..11 "" [] [], + eof_token: EOF@10..11 "" [Newline("\n")] [], } ``` @@ -39,17 +39,17 @@ TwRoot { ``` 0: TW_ROOT@0..11 0: (empty) - 1: TW_CANDIDATE_LIST@0..11 - 0: TW_FULL_CANDIDATE@0..11 + 1: TW_CANDIDATE_LIST@0..10 + 0: TW_FULL_CANDIDATE@0..10 0: TW_VARIANT_LIST@0..0 1: (empty) - 2: TW_FUNCTIONAL_CANDIDATE@0..11 + 2: TW_FUNCTIONAL_CANDIDATE@0..10 0: TW_BASE@0..2 "bg" [] [] 1: DASH@2..3 "-" [] [] - 2: TW_NAMED_VALUE@3..11 - 0: TW_VALUE@3..11 "red-500" [] [Newline("\n")] + 2: TW_NAMED_VALUE@3..10 + 0: TW_VALUE@3..10 "red-500" [] [] 3: (empty) 3: (empty) - 2: EOF@11..11 "" [] [] + 2: EOF@10..11 "" [Newline("\n")] [] ``` diff --git a/crates/biome_tailwind_parser/tests/tailwind_specs/ok/simple/basic-2.txt.snap b/crates/biome_tailwind_parser/tests/tailwind_specs/ok/simple/basic-2.txt.snap index ec2d0de810f4..4d8fff716707 100644 --- a/crates/biome_tailwind_parser/tests/tailwind_specs/ok/simple/basic-2.txt.snap +++ b/crates/biome_tailwind_parser/tests/tailwind_specs/ok/simple/basic-2.txt.snap @@ -23,13 +23,12 @@ TwRoot { base_token: TW_BASE@0..12 "break-before" [] [], minus_token: DASH@12..13 "-" [] [], value: TwNamedValue { - value_token: TW_VALUE@13..17 "auto" [] [], + value_token: TW_VALUE@13..18 "auto" [] [Whitespace(" ")], }, modifier: missing (optional), }, excl_token: missing (optional), }, - WHITESPACE@17..18 " " [] [], TwFullCandidate { variants: TwVariantList [], negative_token: missing (optional), @@ -37,13 +36,12 @@ TwRoot { base_token: TW_BASE@18..29 "break-after" [] [], minus_token: DASH@29..30 "-" [] [], value: TwNamedValue { - value_token: TW_VALUE@30..34 "page" [] [], + value_token: TW_VALUE@30..35 "page" [] [Whitespace(" ")], }, modifier: missing (optional), }, excl_token: missing (optional), }, - WHITESPACE@34..35 " " [] [], TwFullCandidate { variants: TwVariantList [], negative_token: missing (optional), @@ -51,14 +49,14 @@ TwRoot { base_token: TW_BASE@35..44 "mix-blend" [] [], minus_token: DASH@44..45 "-" [] [], value: TwNamedValue { - value_token: TW_VALUE@45..52 "normal" [] [Newline("\n")], + value_token: TW_VALUE@45..51 "normal" [] [], }, modifier: missing (optional), }, excl_token: missing (optional), }, ], - eof_token: EOF@52..52 "" [] [], + eof_token: EOF@51..52 "" [Newline("\n")] [], } ``` @@ -67,39 +65,37 @@ TwRoot { ``` 0: TW_ROOT@0..52 0: (empty) - 1: TW_CANDIDATE_LIST@0..52 - 0: TW_FULL_CANDIDATE@0..17 + 1: TW_CANDIDATE_LIST@0..51 + 0: TW_FULL_CANDIDATE@0..18 0: TW_VARIANT_LIST@0..0 1: (empty) - 2: TW_FUNCTIONAL_CANDIDATE@0..17 + 2: TW_FUNCTIONAL_CANDIDATE@0..18 0: TW_BASE@0..12 "break-before" [] [] 1: DASH@12..13 "-" [] [] - 2: TW_NAMED_VALUE@13..17 - 0: TW_VALUE@13..17 "auto" [] [] + 2: TW_NAMED_VALUE@13..18 + 0: TW_VALUE@13..18 "auto" [] [Whitespace(" ")] 3: (empty) 3: (empty) - 1: WHITESPACE@17..18 " " [] [] - 2: TW_FULL_CANDIDATE@18..34 + 1: TW_FULL_CANDIDATE@18..35 0: TW_VARIANT_LIST@18..18 1: (empty) - 2: TW_FUNCTIONAL_CANDIDATE@18..34 + 2: TW_FUNCTIONAL_CANDIDATE@18..35 0: TW_BASE@18..29 "break-after" [] [] 1: DASH@29..30 "-" [] [] - 2: TW_NAMED_VALUE@30..34 - 0: TW_VALUE@30..34 "page" [] [] + 2: TW_NAMED_VALUE@30..35 + 0: TW_VALUE@30..35 "page" [] [Whitespace(" ")] 3: (empty) 3: (empty) - 3: WHITESPACE@34..35 " " [] [] - 4: TW_FULL_CANDIDATE@35..52 + 2: TW_FULL_CANDIDATE@35..51 0: TW_VARIANT_LIST@35..35 1: (empty) - 2: TW_FUNCTIONAL_CANDIDATE@35..52 + 2: TW_FUNCTIONAL_CANDIDATE@35..51 0: TW_BASE@35..44 "mix-blend" [] [] 1: DASH@44..45 "-" [] [] - 2: TW_NAMED_VALUE@45..52 - 0: TW_VALUE@45..52 "normal" [] [Newline("\n")] + 2: TW_NAMED_VALUE@45..51 + 0: TW_VALUE@45..51 "normal" [] [] 3: (empty) 3: (empty) - 2: EOF@52..52 "" [] [] + 2: EOF@51..52 "" [Newline("\n")] [] ``` diff --git a/crates/biome_tailwind_parser/tests/tailwind_specs/ok/simple/border.txt.snap b/crates/biome_tailwind_parser/tests/tailwind_specs/ok/simple/border.txt.snap index 1e4d62b8f65a..64926f38808d 100644 --- a/crates/biome_tailwind_parser/tests/tailwind_specs/ok/simple/border.txt.snap +++ b/crates/biome_tailwind_parser/tests/tailwind_specs/ok/simple/border.txt.snap @@ -23,13 +23,12 @@ TwRoot { base_token: TW_BASE@0..6 "border" [] [], minus_token: DASH@6..7 "-" [] [], value: TwNamedValue { - value_token: TW_VALUE@7..16 "slate-500" [] [], + value_token: TW_VALUE@7..17 "slate-500" [] [Whitespace(" ")], }, modifier: missing (optional), }, excl_token: missing (optional), }, - WHITESPACE@16..17 " " [] [], TwFullCandidate { variants: TwVariantList [], negative_token: missing (optional), @@ -37,13 +36,12 @@ TwRoot { base_token: TW_BASE@17..23 "border" [] [], minus_token: DASH@23..24 "-" [] [], value: TwNamedValue { - value_token: TW_VALUE@24..32 "teal-600" [] [], + value_token: TW_VALUE@24..33 "teal-600" [] [Whitespace(" ")], }, modifier: missing (optional), }, excl_token: missing (optional), }, - WHITESPACE@32..33 " " [] [], TwFullCandidate { variants: TwVariantList [], negative_token: missing (optional), @@ -51,14 +49,14 @@ TwRoot { base_token: TW_BASE@33..39 "border" [] [], minus_token: DASH@39..40 "-" [] [], value: TwNamedValue { - value_token: TW_VALUE@40..46 "solid" [] [Newline("\n")], + value_token: TW_VALUE@40..45 "solid" [] [], }, modifier: missing (optional), }, excl_token: missing (optional), }, ], - eof_token: EOF@46..46 "" [] [], + eof_token: EOF@45..46 "" [Newline("\n")] [], } ``` @@ -67,39 +65,37 @@ TwRoot { ``` 0: TW_ROOT@0..46 0: (empty) - 1: TW_CANDIDATE_LIST@0..46 - 0: TW_FULL_CANDIDATE@0..16 + 1: TW_CANDIDATE_LIST@0..45 + 0: TW_FULL_CANDIDATE@0..17 0: TW_VARIANT_LIST@0..0 1: (empty) - 2: TW_FUNCTIONAL_CANDIDATE@0..16 + 2: TW_FUNCTIONAL_CANDIDATE@0..17 0: TW_BASE@0..6 "border" [] [] 1: DASH@6..7 "-" [] [] - 2: TW_NAMED_VALUE@7..16 - 0: TW_VALUE@7..16 "slate-500" [] [] + 2: TW_NAMED_VALUE@7..17 + 0: TW_VALUE@7..17 "slate-500" [] [Whitespace(" ")] 3: (empty) 3: (empty) - 1: WHITESPACE@16..17 " " [] [] - 2: TW_FULL_CANDIDATE@17..32 + 1: TW_FULL_CANDIDATE@17..33 0: TW_VARIANT_LIST@17..17 1: (empty) - 2: TW_FUNCTIONAL_CANDIDATE@17..32 + 2: TW_FUNCTIONAL_CANDIDATE@17..33 0: TW_BASE@17..23 "border" [] [] 1: DASH@23..24 "-" [] [] - 2: TW_NAMED_VALUE@24..32 - 0: TW_VALUE@24..32 "teal-600" [] [] + 2: TW_NAMED_VALUE@24..33 + 0: TW_VALUE@24..33 "teal-600" [] [Whitespace(" ")] 3: (empty) 3: (empty) - 3: WHITESPACE@32..33 " " [] [] - 4: TW_FULL_CANDIDATE@33..46 + 2: TW_FULL_CANDIDATE@33..45 0: TW_VARIANT_LIST@33..33 1: (empty) - 2: TW_FUNCTIONAL_CANDIDATE@33..46 + 2: TW_FUNCTIONAL_CANDIDATE@33..45 0: TW_BASE@33..39 "border" [] [] 1: DASH@39..40 "-" [] [] - 2: TW_NAMED_VALUE@40..46 - 0: TW_VALUE@40..46 "solid" [] [Newline("\n")] + 2: TW_NAMED_VALUE@40..45 + 0: TW_VALUE@40..45 "solid" [] [] 3: (empty) 3: (empty) - 2: EOF@46..46 "" [] [] + 2: EOF@45..46 "" [Newline("\n")] [] ``` diff --git a/crates/biome_tailwind_parser/tests/tailwind_specs/ok/simple/css-value.txt.snap b/crates/biome_tailwind_parser/tests/tailwind_specs/ok/simple/css-value.txt.snap index 108c8b725804..f78c9413de41 100644 --- a/crates/biome_tailwind_parser/tests/tailwind_specs/ok/simple/css-value.txt.snap +++ b/crates/biome_tailwind_parser/tests/tailwind_specs/ok/simple/css-value.txt.snap @@ -25,14 +25,14 @@ TwRoot { value: TwCssVariableValue { l_paren_token: L_PAREN@5..6 "(" [] [], value_token: TW_VALUE@6..16 "--my-color" [] [], - r_paren_token: R_PAREN@16..18 ")" [] [Newline("\n")], + r_paren_token: R_PAREN@16..17 ")" [] [], }, modifier: missing (optional), }, excl_token: missing (optional), }, ], - eof_token: EOF@18..18 "" [] [], + eof_token: EOF@17..18 "" [Newline("\n")] [], } ``` @@ -41,19 +41,19 @@ TwRoot { ``` 0: TW_ROOT@0..18 0: (empty) - 1: TW_CANDIDATE_LIST@0..18 - 0: TW_FULL_CANDIDATE@0..18 + 1: TW_CANDIDATE_LIST@0..17 + 0: TW_FULL_CANDIDATE@0..17 0: TW_VARIANT_LIST@0..0 1: (empty) - 2: TW_FUNCTIONAL_CANDIDATE@0..18 + 2: TW_FUNCTIONAL_CANDIDATE@0..17 0: TW_BASE@0..4 "text" [] [] 1: DASH@4..5 "-" [] [] - 2: TW_CSS_VARIABLE_VALUE@5..18 + 2: TW_CSS_VARIABLE_VALUE@5..17 0: L_PAREN@5..6 "(" [] [] 1: TW_VALUE@6..16 "--my-color" [] [] - 2: R_PAREN@16..18 ")" [] [Newline("\n")] + 2: R_PAREN@16..17 ")" [] [] 3: (empty) 3: (empty) - 2: EOF@18..18 "" [] [] + 2: EOF@17..18 "" [Newline("\n")] [] ``` diff --git a/crates/biome_tailwind_parser/tests/tailwind_specs/ok/simple/important.txt.snap b/crates/biome_tailwind_parser/tests/tailwind_specs/ok/simple/important.txt.snap index 2717163ae7b2..a4042a11ab56 100644 --- a/crates/biome_tailwind_parser/tests/tailwind_specs/ok/simple/important.txt.snap +++ b/crates/biome_tailwind_parser/tests/tailwind_specs/ok/simple/important.txt.snap @@ -27,10 +27,10 @@ TwRoot { }, modifier: missing (optional), }, - excl_token: BANG@7..9 "!" [] [Newline("\n")], + excl_token: BANG@7..8 "!" [] [], }, ], - eof_token: EOF@9..9 "" [] [], + eof_token: EOF@8..9 "" [Newline("\n")] [], } ``` @@ -39,8 +39,8 @@ TwRoot { ``` 0: TW_ROOT@0..9 0: (empty) - 1: TW_CANDIDATE_LIST@0..9 - 0: TW_FULL_CANDIDATE@0..9 + 1: TW_CANDIDATE_LIST@0..8 + 0: TW_FULL_CANDIDATE@0..8 0: TW_VARIANT_LIST@0..0 1: (empty) 2: TW_FUNCTIONAL_CANDIDATE@0..7 @@ -49,7 +49,7 @@ TwRoot { 2: TW_NAMED_VALUE@5..7 0: TW_VALUE@5..7 "lg" [] [] 3: (empty) - 3: BANG@7..9 "!" [] [Newline("\n")] - 2: EOF@9..9 "" [] [] + 3: BANG@7..8 "!" [] [] + 2: EOF@8..9 "" [Newline("\n")] [] ``` diff --git a/crates/biome_tailwind_parser/tests/tailwind_specs/ok/simple/modifier.txt.snap b/crates/biome_tailwind_parser/tests/tailwind_specs/ok/simple/modifier.txt.snap index 8f90fe8c295f..847c4bf4357b 100644 --- a/crates/biome_tailwind_parser/tests/tailwind_specs/ok/simple/modifier.txt.snap +++ b/crates/biome_tailwind_parser/tests/tailwind_specs/ok/simple/modifier.txt.snap @@ -28,14 +28,14 @@ TwRoot { modifier: TwModifier { slash_token: SLASH@10..11 "/" [] [], value: TwNamedValue { - value_token: TW_VALUE@11..14 "10" [] [Newline("\n")], + value_token: TW_VALUE@11..13 "10" [] [], }, }, }, excl_token: missing (optional), }, ], - eof_token: EOF@14..14 "" [] [], + eof_token: EOF@13..14 "" [Newline("\n")] [], } ``` @@ -44,20 +44,20 @@ TwRoot { ``` 0: TW_ROOT@0..14 0: (empty) - 1: TW_CANDIDATE_LIST@0..14 - 0: TW_FULL_CANDIDATE@0..14 + 1: TW_CANDIDATE_LIST@0..13 + 0: TW_FULL_CANDIDATE@0..13 0: TW_VARIANT_LIST@0..0 1: (empty) - 2: TW_FUNCTIONAL_CANDIDATE@0..14 + 2: TW_FUNCTIONAL_CANDIDATE@0..13 0: TW_BASE@0..2 "bg" [] [] 1: DASH@2..3 "-" [] [] 2: TW_NAMED_VALUE@3..10 0: TW_VALUE@3..10 "primary" [] [] - 3: TW_MODIFIER@10..14 + 3: TW_MODIFIER@10..13 0: SLASH@10..11 "/" [] [] - 1: TW_NAMED_VALUE@11..14 - 0: TW_VALUE@11..14 "10" [] [Newline("\n")] + 1: TW_NAMED_VALUE@11..13 + 0: TW_VALUE@11..13 "10" [] [] 3: (empty) - 2: EOF@14..14 "" [] [] + 2: EOF@13..14 "" [Newline("\n")] [] ``` diff --git a/crates/biome_tailwind_parser/tests/tailwind_specs/ok/simple/multiple-spaces.txt.snap b/crates/biome_tailwind_parser/tests/tailwind_specs/ok/simple/multiple-spaces.txt.snap index 3ff3091e52b3..aadffeb245d3 100644 --- a/crates/biome_tailwind_parser/tests/tailwind_specs/ok/simple/multiple-spaces.txt.snap +++ b/crates/biome_tailwind_parser/tests/tailwind_specs/ok/simple/multiple-spaces.txt.snap @@ -20,11 +20,10 @@ TwRoot { variants: TwVariantList [], negative_token: missing (optional), candidate: TwStaticCandidate { - base_token: TW_BASE@0..6 "border" [] [], + base_token: TW_BASE@0..20 "border" [] [Whitespace(" ")], }, excl_token: missing (optional), }, - WHITESPACE@6..20 " " [] [], TwFullCandidate { variants: TwVariantList [ TwStaticVariant { @@ -37,14 +36,14 @@ TwRoot { base_token: TW_BASE@26..33 "outline" [] [], minus_token: DASH@33..34 "-" [] [], value: TwNamedValue { - value_token: TW_VALUE@34..39 "none" [] [Newline("\n")], + value_token: TW_VALUE@34..38 "none" [] [], }, modifier: missing (optional), }, excl_token: missing (optional), }, ], - eof_token: EOF@39..39 "" [] [], + eof_token: EOF@38..39 "" [Newline("\n")] [], } ``` @@ -53,27 +52,26 @@ TwRoot { ``` 0: TW_ROOT@0..39 0: (empty) - 1: TW_CANDIDATE_LIST@0..39 - 0: TW_FULL_CANDIDATE@0..6 + 1: TW_CANDIDATE_LIST@0..38 + 0: TW_FULL_CANDIDATE@0..20 0: TW_VARIANT_LIST@0..0 1: (empty) - 2: TW_STATIC_CANDIDATE@0..6 - 0: TW_BASE@0..6 "border" [] [] + 2: TW_STATIC_CANDIDATE@0..20 + 0: TW_BASE@0..20 "border" [] [Whitespace(" ")] 3: (empty) - 1: WHITESPACE@6..20 " " [] [] - 2: TW_FULL_CANDIDATE@20..39 + 1: TW_FULL_CANDIDATE@20..38 0: TW_VARIANT_LIST@20..26 0: TW_STATIC_VARIANT@20..25 0: TW_BASE@20..25 "focus" [] [] 1: COLON@25..26 ":" [] [] 1: (empty) - 2: TW_FUNCTIONAL_CANDIDATE@26..39 + 2: TW_FUNCTIONAL_CANDIDATE@26..38 0: TW_BASE@26..33 "outline" [] [] 1: DASH@33..34 "-" [] [] - 2: TW_NAMED_VALUE@34..39 - 0: TW_VALUE@34..39 "none" [] [Newline("\n")] + 2: TW_NAMED_VALUE@34..38 + 0: TW_VALUE@34..38 "none" [] [] 3: (empty) 3: (empty) - 2: EOF@39..39 "" [] [] + 2: EOF@38..39 "" [Newline("\n")] [] ``` diff --git a/crates/biome_tailwind_parser/tests/tailwind_specs/ok/simple/multiple.txt.snap b/crates/biome_tailwind_parser/tests/tailwind_specs/ok/simple/multiple.txt.snap index fc14b3eb6da4..d1288b290933 100644 --- a/crates/biome_tailwind_parser/tests/tailwind_specs/ok/simple/multiple.txt.snap +++ b/crates/biome_tailwind_parser/tests/tailwind_specs/ok/simple/multiple.txt.snap @@ -20,11 +20,10 @@ TwRoot { variants: TwVariantList [], negative_token: missing (optional), candidate: TwStaticCandidate { - base_token: TW_BASE@0..6 "border" [] [], + base_token: TW_BASE@0..7 "border" [] [Whitespace(" ")], }, excl_token: missing (optional), }, - WHITESPACE@6..7 " " [] [], TwFullCandidate { variants: TwVariantList [ TwStaticVariant { @@ -37,14 +36,14 @@ TwRoot { base_token: TW_BASE@13..20 "outline" [] [], minus_token: DASH@20..21 "-" [] [], value: TwNamedValue { - value_token: TW_VALUE@21..26 "none" [] [Newline("\n")], + value_token: TW_VALUE@21..25 "none" [] [], }, modifier: missing (optional), }, excl_token: missing (optional), }, ], - eof_token: EOF@26..26 "" [] [], + eof_token: EOF@25..26 "" [Newline("\n")] [], } ``` @@ -53,27 +52,26 @@ TwRoot { ``` 0: TW_ROOT@0..26 0: (empty) - 1: TW_CANDIDATE_LIST@0..26 - 0: TW_FULL_CANDIDATE@0..6 + 1: TW_CANDIDATE_LIST@0..25 + 0: TW_FULL_CANDIDATE@0..7 0: TW_VARIANT_LIST@0..0 1: (empty) - 2: TW_STATIC_CANDIDATE@0..6 - 0: TW_BASE@0..6 "border" [] [] + 2: TW_STATIC_CANDIDATE@0..7 + 0: TW_BASE@0..7 "border" [] [Whitespace(" ")] 3: (empty) - 1: WHITESPACE@6..7 " " [] [] - 2: TW_FULL_CANDIDATE@7..26 + 1: TW_FULL_CANDIDATE@7..25 0: TW_VARIANT_LIST@7..13 0: TW_STATIC_VARIANT@7..12 0: TW_BASE@7..12 "focus" [] [] 1: COLON@12..13 ":" [] [] 1: (empty) - 2: TW_FUNCTIONAL_CANDIDATE@13..26 + 2: TW_FUNCTIONAL_CANDIDATE@13..25 0: TW_BASE@13..20 "outline" [] [] 1: DASH@20..21 "-" [] [] - 2: TW_NAMED_VALUE@21..26 - 0: TW_VALUE@21..26 "none" [] [Newline("\n")] + 2: TW_NAMED_VALUE@21..25 + 0: TW_VALUE@21..25 "none" [] [] 3: (empty) 3: (empty) - 2: EOF@26..26 "" [] [] + 2: EOF@25..26 "" [Newline("\n")] [] ``` diff --git a/crates/biome_tailwind_parser/tests/tailwind_specs/ok/simple/negative.txt.snap b/crates/biome_tailwind_parser/tests/tailwind_specs/ok/simple/negative.txt.snap index 3e146ba1409b..5e1cb6096561 100644 --- a/crates/biome_tailwind_parser/tests/tailwind_specs/ok/simple/negative.txt.snap +++ b/crates/biome_tailwind_parser/tests/tailwind_specs/ok/simple/negative.txt.snap @@ -23,13 +23,12 @@ TwRoot { base_token: TW_BASE@1..4 "top" [] [], minus_token: DASH@4..5 "-" [] [], value: TwNamedValue { - value_token: TW_VALUE@5..6 "4" [] [], + value_token: TW_VALUE@5..7 "4" [] [Whitespace(" ")], }, modifier: missing (optional), }, excl_token: missing (optional), }, - WHITESPACE@6..7 " " [] [], TwFullCandidate { variants: TwVariantList [], negative_token: DASH@7..8 "-" [] [], @@ -37,13 +36,12 @@ TwRoot { base_token: TW_BASE@8..10 "mb" [] [], minus_token: DASH@10..11 "-" [] [], value: TwNamedValue { - value_token: TW_VALUE@11..12 "2" [] [], + value_token: TW_VALUE@11..13 "2" [] [Whitespace(" ")], }, modifier: missing (optional), }, excl_token: missing (optional), }, - WHITESPACE@12..13 " " [] [], TwFullCandidate { variants: TwVariantList [ TwStaticVariant { @@ -56,14 +54,14 @@ TwRoot { base_token: TW_BASE@20..22 "mt" [] [], minus_token: DASH@22..23 "-" [] [], value: TwNamedValue { - value_token: TW_VALUE@23..25 "2" [] [Newline("\n")], + value_token: TW_VALUE@23..24 "2" [] [], }, modifier: missing (optional), }, excl_token: missing (optional), }, ], - eof_token: EOF@25..25 "" [] [], + eof_token: EOF@24..25 "" [Newline("\n")] [], } ``` @@ -72,42 +70,40 @@ TwRoot { ``` 0: TW_ROOT@0..25 0: (empty) - 1: TW_CANDIDATE_LIST@0..25 - 0: TW_FULL_CANDIDATE@0..6 + 1: TW_CANDIDATE_LIST@0..24 + 0: TW_FULL_CANDIDATE@0..7 0: TW_VARIANT_LIST@0..0 1: DASH@0..1 "-" [] [] - 2: TW_FUNCTIONAL_CANDIDATE@1..6 + 2: TW_FUNCTIONAL_CANDIDATE@1..7 0: TW_BASE@1..4 "top" [] [] 1: DASH@4..5 "-" [] [] - 2: TW_NAMED_VALUE@5..6 - 0: TW_VALUE@5..6 "4" [] [] + 2: TW_NAMED_VALUE@5..7 + 0: TW_VALUE@5..7 "4" [] [Whitespace(" ")] 3: (empty) 3: (empty) - 1: WHITESPACE@6..7 " " [] [] - 2: TW_FULL_CANDIDATE@7..12 + 1: TW_FULL_CANDIDATE@7..13 0: TW_VARIANT_LIST@7..7 1: DASH@7..8 "-" [] [] - 2: TW_FUNCTIONAL_CANDIDATE@8..12 + 2: TW_FUNCTIONAL_CANDIDATE@8..13 0: TW_BASE@8..10 "mb" [] [] 1: DASH@10..11 "-" [] [] - 2: TW_NAMED_VALUE@11..12 - 0: TW_VALUE@11..12 "2" [] [] + 2: TW_NAMED_VALUE@11..13 + 0: TW_VALUE@11..13 "2" [] [Whitespace(" ")] 3: (empty) 3: (empty) - 3: WHITESPACE@12..13 " " [] [] - 4: TW_FULL_CANDIDATE@13..25 + 2: TW_FULL_CANDIDATE@13..24 0: TW_VARIANT_LIST@13..19 0: TW_STATIC_VARIANT@13..18 0: TW_BASE@13..18 "hover" [] [] 1: COLON@18..19 ":" [] [] 1: DASH@19..20 "-" [] [] - 2: TW_FUNCTIONAL_CANDIDATE@20..25 + 2: TW_FUNCTIONAL_CANDIDATE@20..24 0: TW_BASE@20..22 "mt" [] [] 1: DASH@22..23 "-" [] [] - 2: TW_NAMED_VALUE@23..25 - 0: TW_VALUE@23..25 "2" [] [Newline("\n")] + 2: TW_NAMED_VALUE@23..24 + 0: TW_VALUE@23..24 "2" [] [] 3: (empty) 3: (empty) - 2: EOF@25..25 "" [] [] + 2: EOF@24..25 "" [Newline("\n")] [] ``` diff --git a/crates/biome_tailwind_parser/tests/tailwind_specs/ok/simple/static.txt.snap b/crates/biome_tailwind_parser/tests/tailwind_specs/ok/simple/static.txt.snap index d5032f29718b..030e153550de 100644 --- a/crates/biome_tailwind_parser/tests/tailwind_specs/ok/simple/static.txt.snap +++ b/crates/biome_tailwind_parser/tests/tailwind_specs/ok/simple/static.txt.snap @@ -20,12 +20,12 @@ TwRoot { variants: TwVariantList [], negative_token: missing (optional), candidate: TwStaticCandidate { - base_token: TW_BASE@0..10 "underline" [] [Newline("\n")], + base_token: TW_BASE@0..9 "underline" [] [], }, excl_token: missing (optional), }, ], - eof_token: EOF@10..10 "" [] [], + eof_token: EOF@9..10 "" [Newline("\n")] [], } ``` @@ -34,13 +34,13 @@ TwRoot { ``` 0: TW_ROOT@0..10 0: (empty) - 1: TW_CANDIDATE_LIST@0..10 - 0: TW_FULL_CANDIDATE@0..10 + 1: TW_CANDIDATE_LIST@0..9 + 0: TW_FULL_CANDIDATE@0..9 0: TW_VARIANT_LIST@0..0 1: (empty) - 2: TW_STATIC_CANDIDATE@0..10 - 0: TW_BASE@0..10 "underline" [] [Newline("\n")] + 2: TW_STATIC_CANDIDATE@0..9 + 0: TW_BASE@0..9 "underline" [] [] 3: (empty) - 2: EOF@10..10 "" [] [] + 2: EOF@9..10 "" [Newline("\n")] [] ``` diff --git a/crates/biome_tailwind_parser/tests/tailwind_specs/ok/stress/stress-1.txt.snap b/crates/biome_tailwind_parser/tests/tailwind_specs/ok/stress/stress-1.txt.snap index c3361fb8c813..79aa7e6189fa 100644 --- a/crates/biome_tailwind_parser/tests/tailwind_specs/ok/stress/stress-1.txt.snap +++ b/crates/biome_tailwind_parser/tests/tailwind_specs/ok/stress/stress-1.txt.snap @@ -23,13 +23,12 @@ TwRoot { base_token: TW_BASE@0..4 "text" [] [], minus_token: DASH@4..5 "-" [] [], value: TwNamedValue { - value_token: TW_VALUE@5..7 "sm" [] [], + value_token: TW_VALUE@5..8 "sm" [] [Whitespace(" ")], }, modifier: missing (optional), }, excl_token: missing (optional), }, - WHITESPACE@7..8 " " [] [], TwFullCandidate { variants: TwVariantList [], negative_token: missing (optional), @@ -39,13 +38,12 @@ TwRoot { value: TwArbitraryValue { l_brack_token: L_BRACKET@16..17 "[" [] [], value_token: TW_VALUE@17..21 "10px" [] [], - r_brack_token: R_BRACKET@21..22 "]" [] [], + r_brack_token: R_BRACKET@21..23 "]" [] [Whitespace(" ")], }, modifier: missing (optional), }, excl_token: missing (optional), }, - WHITESPACE@22..23 " " [] [], TwFullCandidate { variants: TwVariantList [ TwStaticVariant { @@ -65,13 +63,12 @@ TwRoot { value: TwArbitraryValue { l_brack_token: L_BRACKET@37..38 "[" [] [], value_token: TW_VALUE@38..43 "100px" [] [], - r_brack_token: R_BRACKET@43..44 "]" [] [], + r_brack_token: R_BRACKET@43..45 "]" [] [Whitespace(" ")], }, }, }, excl_token: missing (optional), }, - WHITESPACE@44..45 " " [] [], TwFullCandidate { variants: TwVariantList [ TwStaticVariant { @@ -98,22 +95,20 @@ TwRoot { base_token: TW_BASE@72..76 "text" [] [], minus_token: DASH@76..77 "-" [] [], value: TwNamedValue { - value_token: TW_VALUE@77..84 "red-500" [] [], + value_token: TW_VALUE@77..85 "red-500" [] [Whitespace(" ")], }, modifier: missing (optional), }, excl_token: missing (optional), }, - WHITESPACE@84..85 " " [] [], TwFullCandidate { variants: TwVariantList [], negative_token: missing (optional), candidate: TwStaticCandidate { - base_token: TW_BASE@85..89 "flex" [] [], + base_token: TW_BASE@85..90 "flex" [] [Whitespace(" ")], }, excl_token: missing (optional), }, - WHITESPACE@89..90 " " [] [], TwFullCandidate { variants: TwVariantList [], negative_token: missing (optional), @@ -121,13 +116,12 @@ TwRoot { base_token: TW_BASE@90..95 "items" [] [], minus_token: DASH@95..96 "-" [] [], value: TwNamedValue { - value_token: TW_VALUE@96..102 "center" [] [], + value_token: TW_VALUE@96..103 "center" [] [Whitespace(" ")], }, modifier: missing (optional), }, excl_token: missing (optional), }, - WHITESPACE@102..103 " " [] [], TwFullCandidate { variants: TwVariantList [], negative_token: missing (optional), @@ -135,13 +129,12 @@ TwRoot { base_token: TW_BASE@103..106 "gap" [] [], minus_token: DASH@106..107 "-" [] [], value: TwNamedValue { - value_token: TW_VALUE@107..108 "2" [] [], + value_token: TW_VALUE@107..109 "2" [] [Whitespace(" ")], }, modifier: missing (optional), }, excl_token: missing (optional), }, - WHITESPACE@108..109 " " [] [], TwFullCandidate { variants: TwVariantList [ TwFunctionalVariant { @@ -160,13 +153,12 @@ TwRoot { base_token: TW_BASE@125..132 "opacity" [] [], minus_token: DASH@132..133 "-" [] [], value: TwNamedValue { - value_token: TW_VALUE@133..135 "50" [] [], + value_token: TW_VALUE@133..136 "50" [] [Whitespace(" ")], }, modifier: missing (optional), }, excl_token: missing (optional), }, - WHITESPACE@135..136 " " [] [], TwFullCandidate { variants: TwVariantList [ TwArbitraryVariant { @@ -185,14 +177,14 @@ TwRoot { base_token: TW_BASE@155..161 "cursor" [] [], minus_token: DASH@161..162 "-" [] [], value: TwNamedValue { - value_token: TW_VALUE@162..174 "not-allowed" [] [Newline("\n")], + value_token: TW_VALUE@162..173 "not-allowed" [] [], }, modifier: missing (optional), }, excl_token: missing (optional), }, ], - eof_token: EOF@174..174 "" [] [], + eof_token: EOF@173..174 "" [Newline("\n")] [], } ``` @@ -201,51 +193,48 @@ TwRoot { ``` 0: TW_ROOT@0..174 0: (empty) - 1: TW_CANDIDATE_LIST@0..174 - 0: TW_FULL_CANDIDATE@0..7 + 1: TW_CANDIDATE_LIST@0..173 + 0: TW_FULL_CANDIDATE@0..8 0: TW_VARIANT_LIST@0..0 1: (empty) - 2: TW_FUNCTIONAL_CANDIDATE@0..7 + 2: TW_FUNCTIONAL_CANDIDATE@0..8 0: TW_BASE@0..4 "text" [] [] 1: DASH@4..5 "-" [] [] - 2: TW_NAMED_VALUE@5..7 - 0: TW_VALUE@5..7 "sm" [] [] + 2: TW_NAMED_VALUE@5..8 + 0: TW_VALUE@5..8 "sm" [] [Whitespace(" ")] 3: (empty) 3: (empty) - 1: WHITESPACE@7..8 " " [] [] - 2: TW_FULL_CANDIDATE@8..22 + 1: TW_FULL_CANDIDATE@8..23 0: TW_VARIANT_LIST@8..8 1: (empty) - 2: TW_FUNCTIONAL_CANDIDATE@8..22 + 2: TW_FUNCTIONAL_CANDIDATE@8..23 0: TW_BASE@8..15 "leading" [] [] 1: DASH@15..16 "-" [] [] - 2: TW_ARBITRARY_VALUE@16..22 + 2: TW_ARBITRARY_VALUE@16..23 0: L_BRACKET@16..17 "[" [] [] 1: TW_VALUE@17..21 "10px" [] [] - 2: R_BRACKET@21..22 "]" [] [] + 2: R_BRACKET@21..23 "]" [] [Whitespace(" ")] 3: (empty) 3: (empty) - 3: WHITESPACE@22..23 " " [] [] - 4: TW_FULL_CANDIDATE@23..44 + 2: TW_FULL_CANDIDATE@23..45 0: TW_VARIANT_LIST@23..29 0: TW_STATIC_VARIANT@23..28 0: TW_BASE@23..28 "hover" [] [] 1: COLON@28..29 ":" [] [] 1: (empty) - 2: TW_FUNCTIONAL_CANDIDATE@29..44 + 2: TW_FUNCTIONAL_CANDIDATE@29..45 0: TW_BASE@29..33 "text" [] [] 1: DASH@33..34 "-" [] [] 2: TW_NAMED_VALUE@34..36 0: TW_VALUE@34..36 "xl" [] [] - 3: TW_MODIFIER@36..44 + 3: TW_MODIFIER@36..45 0: SLASH@36..37 "/" [] [] - 1: TW_ARBITRARY_VALUE@37..44 + 1: TW_ARBITRARY_VALUE@37..45 0: L_BRACKET@37..38 "[" [] [] 1: TW_VALUE@38..43 "100px" [] [] - 2: R_BRACKET@43..44 "]" [] [] + 2: R_BRACKET@43..45 "]" [] [Whitespace(" ")] 3: (empty) - 5: WHITESPACE@44..45 " " [] [] - 6: TW_FULL_CANDIDATE@45..84 + 3: TW_FULL_CANDIDATE@45..85 0: TW_VARIANT_LIST@45..72 0: TW_STATIC_VARIANT@45..50 0: TW_BASE@45..50 "hover" [] [] @@ -262,44 +251,40 @@ TwRoot { 2: R_BRACKET@70..71 "]" [] [] 5: COLON@71..72 ":" [] [] 1: (empty) - 2: TW_FUNCTIONAL_CANDIDATE@72..84 + 2: TW_FUNCTIONAL_CANDIDATE@72..85 0: TW_BASE@72..76 "text" [] [] 1: DASH@76..77 "-" [] [] - 2: TW_NAMED_VALUE@77..84 - 0: TW_VALUE@77..84 "red-500" [] [] + 2: TW_NAMED_VALUE@77..85 + 0: TW_VALUE@77..85 "red-500" [] [Whitespace(" ")] 3: (empty) 3: (empty) - 7: WHITESPACE@84..85 " " [] [] - 8: TW_FULL_CANDIDATE@85..89 + 4: TW_FULL_CANDIDATE@85..90 0: TW_VARIANT_LIST@85..85 1: (empty) - 2: TW_STATIC_CANDIDATE@85..89 - 0: TW_BASE@85..89 "flex" [] [] + 2: TW_STATIC_CANDIDATE@85..90 + 0: TW_BASE@85..90 "flex" [] [Whitespace(" ")] 3: (empty) - 9: WHITESPACE@89..90 " " [] [] - 10: TW_FULL_CANDIDATE@90..102 + 5: TW_FULL_CANDIDATE@90..103 0: TW_VARIANT_LIST@90..90 1: (empty) - 2: TW_FUNCTIONAL_CANDIDATE@90..102 + 2: TW_FUNCTIONAL_CANDIDATE@90..103 0: TW_BASE@90..95 "items" [] [] 1: DASH@95..96 "-" [] [] - 2: TW_NAMED_VALUE@96..102 - 0: TW_VALUE@96..102 "center" [] [] + 2: TW_NAMED_VALUE@96..103 + 0: TW_VALUE@96..103 "center" [] [Whitespace(" ")] 3: (empty) 3: (empty) - 11: WHITESPACE@102..103 " " [] [] - 12: TW_FULL_CANDIDATE@103..108 + 6: TW_FULL_CANDIDATE@103..109 0: TW_VARIANT_LIST@103..103 1: (empty) - 2: TW_FUNCTIONAL_CANDIDATE@103..108 + 2: TW_FUNCTIONAL_CANDIDATE@103..109 0: TW_BASE@103..106 "gap" [] [] 1: DASH@106..107 "-" [] [] - 2: TW_NAMED_VALUE@107..108 - 0: TW_VALUE@107..108 "2" [] [] + 2: TW_NAMED_VALUE@107..109 + 0: TW_VALUE@107..109 "2" [] [Whitespace(" ")] 3: (empty) 3: (empty) - 13: WHITESPACE@108..109 " " [] [] - 14: TW_FULL_CANDIDATE@109..135 + 7: TW_FULL_CANDIDATE@109..136 0: TW_VARIANT_LIST@109..125 0: TW_FUNCTIONAL_VARIANT@109..124 0: TW_BASE@109..112 "has" [] [] @@ -310,15 +295,14 @@ TwRoot { 2: R_BRACKET@123..124 "]" [] [] 1: COLON@124..125 ":" [] [] 1: (empty) - 2: TW_FUNCTIONAL_CANDIDATE@125..135 + 2: TW_FUNCTIONAL_CANDIDATE@125..136 0: TW_BASE@125..132 "opacity" [] [] 1: DASH@132..133 "-" [] [] - 2: TW_NAMED_VALUE@133..135 - 0: TW_VALUE@133..135 "50" [] [] + 2: TW_NAMED_VALUE@133..136 + 0: TW_VALUE@133..136 "50" [] [Whitespace(" ")] 3: (empty) 3: (empty) - 15: WHITESPACE@135..136 " " [] [] - 16: TW_FULL_CANDIDATE@136..174 + 8: TW_FULL_CANDIDATE@136..173 0: TW_VARIANT_LIST@136..155 0: TW_ARBITRARY_VARIANT@136..145 0: L_BRACKET@136..137 "[" [] [] @@ -329,13 +313,13 @@ TwRoot { 0: TW_BASE@146..154 "disabled" [] [] 3: COLON@154..155 ":" [] [] 1: (empty) - 2: TW_FUNCTIONAL_CANDIDATE@155..174 + 2: TW_FUNCTIONAL_CANDIDATE@155..173 0: TW_BASE@155..161 "cursor" [] [] 1: DASH@161..162 "-" [] [] - 2: TW_NAMED_VALUE@162..174 - 0: TW_VALUE@162..174 "not-allowed" [] [Newline("\n")] + 2: TW_NAMED_VALUE@162..173 + 0: TW_VALUE@162..173 "not-allowed" [] [] 3: (empty) 3: (empty) - 2: EOF@174..174 "" [] [] + 2: EOF@173..174 "" [Newline("\n")] [] ``` diff --git a/crates/biome_tailwind_parser/tests/tailwind_specs/ok/stress/stress-2.txt.snap b/crates/biome_tailwind_parser/tests/tailwind_specs/ok/stress/stress-2.txt.snap index a108e34170de..fa9a83622d8e 100644 --- a/crates/biome_tailwind_parser/tests/tailwind_specs/ok/stress/stress-2.txt.snap +++ b/crates/biome_tailwind_parser/tests/tailwind_specs/ok/stress/stress-2.txt.snap @@ -23,13 +23,12 @@ TwRoot { base_token: TW_BASE@0..6 "border" [] [], minus_token: DASH@6..7 "-" [] [], value: TwNamedValue { - value_token: TW_VALUE@7..17 "foreground" [] [], + value_token: TW_VALUE@7..18 "foreground" [] [Whitespace(" ")], }, modifier: missing (optional), }, excl_token: missing (optional), }, - WHITESPACE@17..18 " " [] [], TwFullCandidate { variants: TwVariantList [], negative_token: missing (optional), @@ -37,13 +36,12 @@ TwRoot { base_token: TW_BASE@18..22 "text" [] [], minus_token: DASH@22..23 "-" [] [], value: TwNamedValue { - value_token: TW_VALUE@23..33 "foreground" [] [], + value_token: TW_VALUE@23..34 "foreground" [] [Whitespace(" ")], }, modifier: missing (optional), }, excl_token: missing (optional), }, - WHITESPACE@33..34 " " [] [], TwFullCandidate { variants: TwVariantList [], negative_token: missing (optional), @@ -51,13 +49,12 @@ TwRoot { base_token: TW_BASE@34..45 "ring-offset" [] [], minus_token: DASH@45..46 "-" [] [], value: TwNamedValue { - value_token: TW_VALUE@46..56 "background" [] [], + value_token: TW_VALUE@46..57 "background" [] [Whitespace(" ")], }, modifier: missing (optional), }, excl_token: missing (optional), }, - WHITESPACE@56..57 " " [] [], TwFullCandidate { variants: TwVariantList [ TwFunctionalVariant { @@ -74,13 +71,12 @@ TwRoot { base_token: TW_BASE@71..75 "ring" [] [], minus_token: DASH@75..76 "-" [] [], value: TwNamedValue { - value_token: TW_VALUE@76..80 "ring" [] [], + value_token: TW_VALUE@76..81 "ring" [] [Whitespace(" ")], }, modifier: missing (optional), }, excl_token: missing (optional), }, - WHITESPACE@80..81 " " [] [], TwFullCandidate { variants: TwVariantList [], negative_token: missing (optional), @@ -88,13 +84,12 @@ TwRoot { base_token: TW_BASE@81..87 "aspect" [] [], minus_token: DASH@87..88 "-" [] [], value: TwNamedValue { - value_token: TW_VALUE@88..94 "square" [] [], + value_token: TW_VALUE@88..95 "square" [] [Whitespace(" ")], }, modifier: missing (optional), }, excl_token: missing (optional), }, - WHITESPACE@94..95 " " [] [], TwFullCandidate { variants: TwVariantList [], negative_token: missing (optional), @@ -102,13 +97,12 @@ TwRoot { base_token: TW_BASE@95..99 "size" [] [], minus_token: DASH@99..100 "-" [] [], value: TwNamedValue { - value_token: TW_VALUE@100..101 "4" [] [], + value_token: TW_VALUE@100..102 "4" [] [Whitespace(" ")], }, modifier: missing (optional), }, excl_token: missing (optional), }, - WHITESPACE@101..102 " " [] [], TwFullCandidate { variants: TwVariantList [], negative_token: missing (optional), @@ -116,22 +110,20 @@ TwRoot { base_token: TW_BASE@102..109 "rounded" [] [], minus_token: DASH@109..110 "-" [] [], value: TwNamedValue { - value_token: TW_VALUE@110..114 "full" [] [], + value_token: TW_VALUE@110..115 "full" [] [Whitespace(" ")], }, modifier: missing (optional), }, excl_token: missing (optional), }, - WHITESPACE@114..115 " " [] [], TwFullCandidate { variants: TwVariantList [], negative_token: missing (optional), candidate: TwStaticCandidate { - base_token: TW_BASE@115..121 "border" [] [], + base_token: TW_BASE@115..122 "border" [] [Whitespace(" ")], }, excl_token: missing (optional), }, - WHITESPACE@121..122 " " [] [], TwFullCandidate { variants: TwVariantList [ TwStaticVariant { @@ -144,13 +136,12 @@ TwRoot { base_token: TW_BASE@128..135 "outline" [] [], minus_token: DASH@135..136 "-" [] [], value: TwNamedValue { - value_token: TW_VALUE@136..140 "none" [] [], + value_token: TW_VALUE@136..141 "none" [] [Whitespace(" ")], }, modifier: missing (optional), }, excl_token: missing (optional), }, - WHITESPACE@140..141 " " [] [], TwFullCandidate { variants: TwVariantList [ TwFunctionalVariant { @@ -167,13 +158,12 @@ TwRoot { base_token: TW_BASE@155..159 "ring" [] [], minus_token: DASH@159..160 "-" [] [], value: TwNamedValue { - value_token: TW_VALUE@160..161 "2" [] [], + value_token: TW_VALUE@160..162 "2" [] [Whitespace(" ")], }, modifier: missing (optional), }, excl_token: missing (optional), }, - WHITESPACE@161..162 " " [] [], TwFullCandidate { variants: TwVariantList [ TwFunctionalVariant { @@ -190,13 +180,12 @@ TwRoot { base_token: TW_BASE@176..187 "ring-offset" [] [], minus_token: DASH@187..188 "-" [] [], value: TwNamedValue { - value_token: TW_VALUE@188..189 "2" [] [], + value_token: TW_VALUE@188..190 "2" [] [Whitespace(" ")], }, modifier: missing (optional), }, excl_token: missing (optional), }, - WHITESPACE@189..190 " " [] [], TwFullCandidate { variants: TwVariantList [ TwStaticVariant { @@ -209,13 +198,12 @@ TwRoot { base_token: TW_BASE@199..205 "cursor" [] [], minus_token: DASH@205..206 "-" [] [], value: TwNamedValue { - value_token: TW_VALUE@206..217 "not-allowed" [] [], + value_token: TW_VALUE@206..218 "not-allowed" [] [Whitespace(" ")], }, modifier: missing (optional), }, excl_token: missing (optional), }, - WHITESPACE@217..218 " " [] [], TwFullCandidate { variants: TwVariantList [ TwStaticVariant { @@ -228,14 +216,14 @@ TwRoot { base_token: TW_BASE@227..234 "opacity" [] [], minus_token: DASH@234..235 "-" [] [], value: TwNamedValue { - value_token: TW_VALUE@235..238 "50" [] [Newline("\n")], + value_token: TW_VALUE@235..237 "50" [] [], }, modifier: missing (optional), }, excl_token: missing (optional), }, ], - eof_token: EOF@238..238 "" [] [], + eof_token: EOF@237..238 "" [Newline("\n")] [], } ``` @@ -244,41 +232,38 @@ TwRoot { ``` 0: TW_ROOT@0..238 0: (empty) - 1: TW_CANDIDATE_LIST@0..238 - 0: TW_FULL_CANDIDATE@0..17 + 1: TW_CANDIDATE_LIST@0..237 + 0: TW_FULL_CANDIDATE@0..18 0: TW_VARIANT_LIST@0..0 1: (empty) - 2: TW_FUNCTIONAL_CANDIDATE@0..17 + 2: TW_FUNCTIONAL_CANDIDATE@0..18 0: TW_BASE@0..6 "border" [] [] 1: DASH@6..7 "-" [] [] - 2: TW_NAMED_VALUE@7..17 - 0: TW_VALUE@7..17 "foreground" [] [] + 2: TW_NAMED_VALUE@7..18 + 0: TW_VALUE@7..18 "foreground" [] [Whitespace(" ")] 3: (empty) 3: (empty) - 1: WHITESPACE@17..18 " " [] [] - 2: TW_FULL_CANDIDATE@18..33 + 1: TW_FULL_CANDIDATE@18..34 0: TW_VARIANT_LIST@18..18 1: (empty) - 2: TW_FUNCTIONAL_CANDIDATE@18..33 + 2: TW_FUNCTIONAL_CANDIDATE@18..34 0: TW_BASE@18..22 "text" [] [] 1: DASH@22..23 "-" [] [] - 2: TW_NAMED_VALUE@23..33 - 0: TW_VALUE@23..33 "foreground" [] [] + 2: TW_NAMED_VALUE@23..34 + 0: TW_VALUE@23..34 "foreground" [] [Whitespace(" ")] 3: (empty) 3: (empty) - 3: WHITESPACE@33..34 " " [] [] - 4: TW_FULL_CANDIDATE@34..56 + 2: TW_FULL_CANDIDATE@34..57 0: TW_VARIANT_LIST@34..34 1: (empty) - 2: TW_FUNCTIONAL_CANDIDATE@34..56 + 2: TW_FUNCTIONAL_CANDIDATE@34..57 0: TW_BASE@34..45 "ring-offset" [] [] 1: DASH@45..46 "-" [] [] - 2: TW_NAMED_VALUE@46..56 - 0: TW_VALUE@46..56 "background" [] [] + 2: TW_NAMED_VALUE@46..57 + 0: TW_VALUE@46..57 "background" [] [Whitespace(" ")] 3: (empty) 3: (empty) - 5: WHITESPACE@56..57 " " [] [] - 6: TW_FULL_CANDIDATE@57..80 + 3: TW_FULL_CANDIDATE@57..81 0: TW_VARIANT_LIST@57..71 0: TW_FUNCTIONAL_VARIANT@57..70 0: TW_BASE@57..62 "focus" [] [] @@ -287,69 +272,63 @@ TwRoot { 0: TW_VALUE@63..70 "visible" [] [] 1: COLON@70..71 ":" [] [] 1: (empty) - 2: TW_FUNCTIONAL_CANDIDATE@71..80 + 2: TW_FUNCTIONAL_CANDIDATE@71..81 0: TW_BASE@71..75 "ring" [] [] 1: DASH@75..76 "-" [] [] - 2: TW_NAMED_VALUE@76..80 - 0: TW_VALUE@76..80 "ring" [] [] + 2: TW_NAMED_VALUE@76..81 + 0: TW_VALUE@76..81 "ring" [] [Whitespace(" ")] 3: (empty) 3: (empty) - 7: WHITESPACE@80..81 " " [] [] - 8: TW_FULL_CANDIDATE@81..94 + 4: TW_FULL_CANDIDATE@81..95 0: TW_VARIANT_LIST@81..81 1: (empty) - 2: TW_FUNCTIONAL_CANDIDATE@81..94 + 2: TW_FUNCTIONAL_CANDIDATE@81..95 0: TW_BASE@81..87 "aspect" [] [] 1: DASH@87..88 "-" [] [] - 2: TW_NAMED_VALUE@88..94 - 0: TW_VALUE@88..94 "square" [] [] + 2: TW_NAMED_VALUE@88..95 + 0: TW_VALUE@88..95 "square" [] [Whitespace(" ")] 3: (empty) 3: (empty) - 9: WHITESPACE@94..95 " " [] [] - 10: TW_FULL_CANDIDATE@95..101 + 5: TW_FULL_CANDIDATE@95..102 0: TW_VARIANT_LIST@95..95 1: (empty) - 2: TW_FUNCTIONAL_CANDIDATE@95..101 + 2: TW_FUNCTIONAL_CANDIDATE@95..102 0: TW_BASE@95..99 "size" [] [] 1: DASH@99..100 "-" [] [] - 2: TW_NAMED_VALUE@100..101 - 0: TW_VALUE@100..101 "4" [] [] + 2: TW_NAMED_VALUE@100..102 + 0: TW_VALUE@100..102 "4" [] [Whitespace(" ")] 3: (empty) 3: (empty) - 11: WHITESPACE@101..102 " " [] [] - 12: TW_FULL_CANDIDATE@102..114 + 6: TW_FULL_CANDIDATE@102..115 0: TW_VARIANT_LIST@102..102 1: (empty) - 2: TW_FUNCTIONAL_CANDIDATE@102..114 + 2: TW_FUNCTIONAL_CANDIDATE@102..115 0: TW_BASE@102..109 "rounded" [] [] 1: DASH@109..110 "-" [] [] - 2: TW_NAMED_VALUE@110..114 - 0: TW_VALUE@110..114 "full" [] [] + 2: TW_NAMED_VALUE@110..115 + 0: TW_VALUE@110..115 "full" [] [Whitespace(" ")] 3: (empty) 3: (empty) - 13: WHITESPACE@114..115 " " [] [] - 14: TW_FULL_CANDIDATE@115..121 + 7: TW_FULL_CANDIDATE@115..122 0: TW_VARIANT_LIST@115..115 1: (empty) - 2: TW_STATIC_CANDIDATE@115..121 - 0: TW_BASE@115..121 "border" [] [] + 2: TW_STATIC_CANDIDATE@115..122 + 0: TW_BASE@115..122 "border" [] [Whitespace(" ")] 3: (empty) - 15: WHITESPACE@121..122 " " [] [] - 16: TW_FULL_CANDIDATE@122..140 + 8: TW_FULL_CANDIDATE@122..141 0: TW_VARIANT_LIST@122..128 0: TW_STATIC_VARIANT@122..127 0: TW_BASE@122..127 "focus" [] [] 1: COLON@127..128 ":" [] [] 1: (empty) - 2: TW_FUNCTIONAL_CANDIDATE@128..140 + 2: TW_FUNCTIONAL_CANDIDATE@128..141 0: TW_BASE@128..135 "outline" [] [] 1: DASH@135..136 "-" [] [] - 2: TW_NAMED_VALUE@136..140 - 0: TW_VALUE@136..140 "none" [] [] + 2: TW_NAMED_VALUE@136..141 + 0: TW_VALUE@136..141 "none" [] [Whitespace(" ")] 3: (empty) 3: (empty) - 17: WHITESPACE@140..141 " " [] [] - 18: TW_FULL_CANDIDATE@141..161 + 9: TW_FULL_CANDIDATE@141..162 0: TW_VARIANT_LIST@141..155 0: TW_FUNCTIONAL_VARIANT@141..154 0: TW_BASE@141..146 "focus" [] [] @@ -358,15 +337,14 @@ TwRoot { 0: TW_VALUE@147..154 "visible" [] [] 1: COLON@154..155 ":" [] [] 1: (empty) - 2: TW_FUNCTIONAL_CANDIDATE@155..161 + 2: TW_FUNCTIONAL_CANDIDATE@155..162 0: TW_BASE@155..159 "ring" [] [] 1: DASH@159..160 "-" [] [] - 2: TW_NAMED_VALUE@160..161 - 0: TW_VALUE@160..161 "2" [] [] + 2: TW_NAMED_VALUE@160..162 + 0: TW_VALUE@160..162 "2" [] [Whitespace(" ")] 3: (empty) 3: (empty) - 19: WHITESPACE@161..162 " " [] [] - 20: TW_FULL_CANDIDATE@162..189 + 10: TW_FULL_CANDIDATE@162..190 0: TW_VARIANT_LIST@162..176 0: TW_FUNCTIONAL_VARIANT@162..175 0: TW_BASE@162..167 "focus" [] [] @@ -375,41 +353,39 @@ TwRoot { 0: TW_VALUE@168..175 "visible" [] [] 1: COLON@175..176 ":" [] [] 1: (empty) - 2: TW_FUNCTIONAL_CANDIDATE@176..189 + 2: TW_FUNCTIONAL_CANDIDATE@176..190 0: TW_BASE@176..187 "ring-offset" [] [] 1: DASH@187..188 "-" [] [] - 2: TW_NAMED_VALUE@188..189 - 0: TW_VALUE@188..189 "2" [] [] + 2: TW_NAMED_VALUE@188..190 + 0: TW_VALUE@188..190 "2" [] [Whitespace(" ")] 3: (empty) 3: (empty) - 21: WHITESPACE@189..190 " " [] [] - 22: TW_FULL_CANDIDATE@190..217 + 11: TW_FULL_CANDIDATE@190..218 0: TW_VARIANT_LIST@190..199 0: TW_STATIC_VARIANT@190..198 0: TW_BASE@190..198 "disabled" [] [] 1: COLON@198..199 ":" [] [] 1: (empty) - 2: TW_FUNCTIONAL_CANDIDATE@199..217 + 2: TW_FUNCTIONAL_CANDIDATE@199..218 0: TW_BASE@199..205 "cursor" [] [] 1: DASH@205..206 "-" [] [] - 2: TW_NAMED_VALUE@206..217 - 0: TW_VALUE@206..217 "not-allowed" [] [] + 2: TW_NAMED_VALUE@206..218 + 0: TW_VALUE@206..218 "not-allowed" [] [Whitespace(" ")] 3: (empty) 3: (empty) - 23: WHITESPACE@217..218 " " [] [] - 24: TW_FULL_CANDIDATE@218..238 + 12: TW_FULL_CANDIDATE@218..237 0: TW_VARIANT_LIST@218..227 0: TW_STATIC_VARIANT@218..226 0: TW_BASE@218..226 "disabled" [] [] 1: COLON@226..227 ":" [] [] 1: (empty) - 2: TW_FUNCTIONAL_CANDIDATE@227..238 + 2: TW_FUNCTIONAL_CANDIDATE@227..237 0: TW_BASE@227..234 "opacity" [] [] 1: DASH@234..235 "-" [] [] - 2: TW_NAMED_VALUE@235..238 - 0: TW_VALUE@235..238 "50" [] [Newline("\n")] + 2: TW_NAMED_VALUE@235..237 + 0: TW_VALUE@235..237 "50" [] [] 3: (empty) 3: (empty) - 2: EOF@238..238 "" [] [] + 2: EOF@237..238 "" [Newline("\n")] [] ``` diff --git a/crates/biome_tailwind_parser/tests/tailwind_specs/ok/variants/arbitrary-variant.txt.snap b/crates/biome_tailwind_parser/tests/tailwind_specs/ok/variants/arbitrary-variant.txt.snap index ad551bd528ea..a8c6e2d97b8b 100644 --- a/crates/biome_tailwind_parser/tests/tailwind_specs/ok/variants/arbitrary-variant.txt.snap +++ b/crates/biome_tailwind_parser/tests/tailwind_specs/ok/variants/arbitrary-variant.txt.snap @@ -30,14 +30,14 @@ TwRoot { base_token: TW_BASE@6..10 "text" [] [], minus_token: DASH@10..11 "-" [] [], value: TwNamedValue { - value_token: TW_VALUE@11..19 "red-500" [] [Newline("\n")], + value_token: TW_VALUE@11..18 "red-500" [] [], }, modifier: missing (optional), }, excl_token: missing (optional), }, ], - eof_token: EOF@19..19 "" [] [], + eof_token: EOF@18..19 "" [Newline("\n")] [], } ``` @@ -46,8 +46,8 @@ TwRoot { ``` 0: TW_ROOT@0..19 0: (empty) - 1: TW_CANDIDATE_LIST@0..19 - 0: TW_FULL_CANDIDATE@0..19 + 1: TW_CANDIDATE_LIST@0..18 + 0: TW_FULL_CANDIDATE@0..18 0: TW_VARIANT_LIST@0..6 0: TW_ARBITRARY_VARIANT@0..5 0: L_BRACKET@0..1 "[" [] [] @@ -55,13 +55,13 @@ TwRoot { 2: R_BRACKET@4..5 "]" [] [] 1: COLON@5..6 ":" [] [] 1: (empty) - 2: TW_FUNCTIONAL_CANDIDATE@6..19 + 2: TW_FUNCTIONAL_CANDIDATE@6..18 0: TW_BASE@6..10 "text" [] [] 1: DASH@10..11 "-" [] [] - 2: TW_NAMED_VALUE@11..19 - 0: TW_VALUE@11..19 "red-500" [] [Newline("\n")] + 2: TW_NAMED_VALUE@11..18 + 0: TW_VALUE@11..18 "red-500" [] [] 3: (empty) 3: (empty) - 2: EOF@19..19 "" [] [] + 2: EOF@18..19 "" [Newline("\n")] [] ``` diff --git a/crates/biome_tailwind_parser/tests/tailwind_specs/ok/variants/functional-arbirary-param.txt.snap b/crates/biome_tailwind_parser/tests/tailwind_specs/ok/variants/functional-arbirary-param.txt.snap index 5fd9ec1f99c4..987ed10cfcf8 100644 --- a/crates/biome_tailwind_parser/tests/tailwind_specs/ok/variants/functional-arbirary-param.txt.snap +++ b/crates/biome_tailwind_parser/tests/tailwind_specs/ok/variants/functional-arbirary-param.txt.snap @@ -34,14 +34,14 @@ TwRoot { base_token: TW_BASE@16..20 "text" [] [], minus_token: DASH@20..21 "-" [] [], value: TwNamedValue { - value_token: TW_VALUE@21..29 "red-500" [] [Newline("\n")], + value_token: TW_VALUE@21..28 "red-500" [] [], }, modifier: missing (optional), }, excl_token: missing (optional), }, ], - eof_token: EOF@29..29 "" [] [], + eof_token: EOF@28..29 "" [Newline("\n")] [], } ``` @@ -50,8 +50,8 @@ TwRoot { ``` 0: TW_ROOT@0..29 0: (empty) - 1: TW_CANDIDATE_LIST@0..29 - 0: TW_FULL_CANDIDATE@0..29 + 1: TW_CANDIDATE_LIST@0..28 + 0: TW_FULL_CANDIDATE@0..28 0: TW_VARIANT_LIST@0..16 0: TW_FUNCTIONAL_VARIANT@0..15 0: TW_BASE@0..4 "aria" [] [] @@ -62,13 +62,13 @@ TwRoot { 2: R_BRACKET@14..15 "]" [] [] 1: COLON@15..16 ":" [] [] 1: (empty) - 2: TW_FUNCTIONAL_CANDIDATE@16..29 + 2: TW_FUNCTIONAL_CANDIDATE@16..28 0: TW_BASE@16..20 "text" [] [] 1: DASH@20..21 "-" [] [] - 2: TW_NAMED_VALUE@21..29 - 0: TW_VALUE@21..29 "red-500" [] [Newline("\n")] + 2: TW_NAMED_VALUE@21..28 + 0: TW_VALUE@21..28 "red-500" [] [] 3: (empty) 3: (empty) - 2: EOF@29..29 "" [] [] + 2: EOF@28..29 "" [Newline("\n")] [] ``` diff --git a/crates/biome_tailwind_parser/tests/tailwind_specs/ok/variants/functional-named-param.txt.snap b/crates/biome_tailwind_parser/tests/tailwind_specs/ok/variants/functional-named-param.txt.snap index dcd579dbddeb..ad086ddb1700 100644 --- a/crates/biome_tailwind_parser/tests/tailwind_specs/ok/variants/functional-named-param.txt.snap +++ b/crates/biome_tailwind_parser/tests/tailwind_specs/ok/variants/functional-named-param.txt.snap @@ -32,14 +32,14 @@ TwRoot { base_token: TW_BASE@14..18 "text" [] [], minus_token: DASH@18..19 "-" [] [], value: TwNamedValue { - value_token: TW_VALUE@19..27 "red-500" [] [Newline("\n")], + value_token: TW_VALUE@19..26 "red-500" [] [], }, modifier: missing (optional), }, excl_token: missing (optional), }, ], - eof_token: EOF@27..27 "" [] [], + eof_token: EOF@26..27 "" [Newline("\n")] [], } ``` @@ -48,8 +48,8 @@ TwRoot { ``` 0: TW_ROOT@0..27 0: (empty) - 1: TW_CANDIDATE_LIST@0..27 - 0: TW_FULL_CANDIDATE@0..27 + 1: TW_CANDIDATE_LIST@0..26 + 0: TW_FULL_CANDIDATE@0..26 0: TW_VARIANT_LIST@0..14 0: TW_FUNCTIONAL_VARIANT@0..13 0: TW_BASE@0..4 "aria" [] [] @@ -58,13 +58,13 @@ TwRoot { 0: TW_VALUE@5..13 "disabled" [] [] 1: COLON@13..14 ":" [] [] 1: (empty) - 2: TW_FUNCTIONAL_CANDIDATE@14..27 + 2: TW_FUNCTIONAL_CANDIDATE@14..26 0: TW_BASE@14..18 "text" [] [] 1: DASH@18..19 "-" [] [] - 2: TW_NAMED_VALUE@19..27 - 0: TW_VALUE@19..27 "red-500" [] [Newline("\n")] + 2: TW_NAMED_VALUE@19..26 + 0: TW_VALUE@19..26 "red-500" [] [] 3: (empty) 3: (empty) - 2: EOF@27..27 "" [] [] + 2: EOF@26..27 "" [Newline("\n")] [] ``` diff --git a/crates/biome_tailwind_parser/tests/tailwind_specs/ok/variants/hover.txt.snap b/crates/biome_tailwind_parser/tests/tailwind_specs/ok/variants/hover.txt.snap index 890331b6280c..224684d92dd5 100644 --- a/crates/biome_tailwind_parser/tests/tailwind_specs/ok/variants/hover.txt.snap +++ b/crates/biome_tailwind_parser/tests/tailwind_specs/ok/variants/hover.txt.snap @@ -28,14 +28,14 @@ TwRoot { base_token: TW_BASE@6..10 "text" [] [], minus_token: DASH@10..11 "-" [] [], value: TwNamedValue { - value_token: TW_VALUE@11..19 "red-500" [] [Newline("\n")], + value_token: TW_VALUE@11..18 "red-500" [] [], }, modifier: missing (optional), }, excl_token: missing (optional), }, ], - eof_token: EOF@19..19 "" [] [], + eof_token: EOF@18..19 "" [Newline("\n")] [], } ``` @@ -44,20 +44,20 @@ TwRoot { ``` 0: TW_ROOT@0..19 0: (empty) - 1: TW_CANDIDATE_LIST@0..19 - 0: TW_FULL_CANDIDATE@0..19 + 1: TW_CANDIDATE_LIST@0..18 + 0: TW_FULL_CANDIDATE@0..18 0: TW_VARIANT_LIST@0..6 0: TW_STATIC_VARIANT@0..5 0: TW_BASE@0..5 "hover" [] [] 1: COLON@5..6 ":" [] [] 1: (empty) - 2: TW_FUNCTIONAL_CANDIDATE@6..19 + 2: TW_FUNCTIONAL_CANDIDATE@6..18 0: TW_BASE@6..10 "text" [] [] 1: DASH@10..11 "-" [] [] - 2: TW_NAMED_VALUE@11..19 - 0: TW_VALUE@11..19 "red-500" [] [Newline("\n")] + 2: TW_NAMED_VALUE@11..18 + 0: TW_VALUE@11..18 "red-500" [] [] 3: (empty) 3: (empty) - 2: EOF@19..19 "" [] [] + 2: EOF@18..19 "" [Newline("\n")] [] ``` diff --git a/crates/biome_tailwind_parser/tests/tailwind_specs/ok/variants/hover_focus.txt.snap b/crates/biome_tailwind_parser/tests/tailwind_specs/ok/variants/hover_focus.txt.snap index c4e98aa17f5e..6ed352220785 100644 --- a/crates/biome_tailwind_parser/tests/tailwind_specs/ok/variants/hover_focus.txt.snap +++ b/crates/biome_tailwind_parser/tests/tailwind_specs/ok/variants/hover_focus.txt.snap @@ -32,14 +32,14 @@ TwRoot { base_token: TW_BASE@12..16 "text" [] [], minus_token: DASH@16..17 "-" [] [], value: TwNamedValue { - value_token: TW_VALUE@17..25 "red-500" [] [Newline("\n")], + value_token: TW_VALUE@17..24 "red-500" [] [], }, modifier: missing (optional), }, excl_token: missing (optional), }, ], - eof_token: EOF@25..25 "" [] [], + eof_token: EOF@24..25 "" [Newline("\n")] [], } ``` @@ -48,8 +48,8 @@ TwRoot { ``` 0: TW_ROOT@0..25 0: (empty) - 1: TW_CANDIDATE_LIST@0..25 - 0: TW_FULL_CANDIDATE@0..25 + 1: TW_CANDIDATE_LIST@0..24 + 0: TW_FULL_CANDIDATE@0..24 0: TW_VARIANT_LIST@0..12 0: TW_STATIC_VARIANT@0..5 0: TW_BASE@0..5 "hover" [] [] @@ -58,13 +58,13 @@ TwRoot { 0: TW_BASE@6..11 "focus" [] [] 3: COLON@11..12 ":" [] [] 1: (empty) - 2: TW_FUNCTIONAL_CANDIDATE@12..25 + 2: TW_FUNCTIONAL_CANDIDATE@12..24 0: TW_BASE@12..16 "text" [] [] 1: DASH@16..17 "-" [] [] - 2: TW_NAMED_VALUE@17..25 - 0: TW_VALUE@17..25 "red-500" [] [Newline("\n")] + 2: TW_NAMED_VALUE@17..24 + 0: TW_VALUE@17..24 "red-500" [] [] 3: (empty) 3: (empty) - 2: EOF@25..25 "" [] [] + 2: EOF@24..25 "" [Newline("\n")] [] ``` diff --git a/crates/biome_tailwind_parser/tests/tailwind_specs/ok/variants/starts-with-number.txt.snap b/crates/biome_tailwind_parser/tests/tailwind_specs/ok/variants/starts-with-number.txt.snap index ab49c10f74dd..a441060349ae 100644 --- a/crates/biome_tailwind_parser/tests/tailwind_specs/ok/variants/starts-with-number.txt.snap +++ b/crates/biome_tailwind_parser/tests/tailwind_specs/ok/variants/starts-with-number.txt.snap @@ -25,12 +25,12 @@ TwRoot { ], negative_token: missing (optional), candidate: TwStaticCandidate { - base_token: TW_BASE@4..10 "table" [] [Newline("\n")], + base_token: TW_BASE@4..9 "table" [] [], }, excl_token: missing (optional), }, ], - eof_token: EOF@10..10 "" [] [], + eof_token: EOF@9..10 "" [Newline("\n")] [], } ``` @@ -39,16 +39,16 @@ TwRoot { ``` 0: TW_ROOT@0..10 0: (empty) - 1: TW_CANDIDATE_LIST@0..10 - 0: TW_FULL_CANDIDATE@0..10 + 1: TW_CANDIDATE_LIST@0..9 + 0: TW_FULL_CANDIDATE@0..9 0: TW_VARIANT_LIST@0..4 0: TW_STATIC_VARIANT@0..3 0: TW_BASE@0..3 "2xl" [] [] 1: COLON@3..4 ":" [] [] 1: (empty) - 2: TW_STATIC_CANDIDATE@4..10 - 0: TW_BASE@4..10 "table" [] [Newline("\n")] + 2: TW_STATIC_CANDIDATE@4..9 + 0: TW_BASE@4..9 "table" [] [] 3: (empty) - 2: EOF@10..10 "" [] [] + 2: EOF@9..10 "" [Newline("\n")] [] ``` diff --git a/crates/biome_tailwind_syntax/src/generated/nodes.rs b/crates/biome_tailwind_syntax/src/generated/nodes.rs index af06a6704418..125ea6a398b7 100644 --- a/crates/biome_tailwind_syntax/src/generated/nodes.rs +++ b/crates/biome_tailwind_syntax/src/generated/nodes.rs @@ -2133,7 +2133,7 @@ impl Serialize for TwCandidateList { seq.end() } } -impl AstSeparatedList for TwCandidateList { +impl AstNodeList for TwCandidateList { type Language = Language; type Node = AnyTwFullCandidate; fn syntax_list(&self) -> &SyntaxList { @@ -2146,19 +2146,19 @@ impl AstSeparatedList for TwCandidateList { impl Debug for TwCandidateList { fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result { f.write_str("TwCandidateList ")?; - f.debug_list().entries(self.elements()).finish() + f.debug_list().entries(self.iter()).finish() } } -impl IntoIterator for TwCandidateList { - type Item = SyntaxResult; - type IntoIter = AstSeparatedListNodesIterator; +impl IntoIterator for &TwCandidateList { + type Item = AnyTwFullCandidate; + type IntoIter = AstNodeListIterator; fn into_iter(self) -> Self::IntoIter { self.iter() } } -impl IntoIterator for &TwCandidateList { - type Item = SyntaxResult; - type IntoIter = AstSeparatedListNodesIterator; +impl IntoIterator for TwCandidateList { + type Item = AnyTwFullCandidate; + type IntoIter = AstNodeListIterator; fn into_iter(self) -> Self::IntoIter { self.iter() } diff --git a/crates/biome_tailwind_syntax/src/lib.rs b/crates/biome_tailwind_syntax/src/lib.rs index 56d2e7aaaae7..0e0014d566dc 100644 --- a/crates/biome_tailwind_syntax/src/lib.rs +++ b/crates/biome_tailwind_syntax/src/lib.rs @@ -68,7 +68,7 @@ impl biome_rowan::SyntaxKind for TailwindSyntaxKind { } fn is_trivia(self) -> bool { - matches!(self, Self::NEWLINE) + matches!(self, Self::NEWLINE | Self::WHITESPACE) } fn to_string(&self) -> Option<&'static str> { @@ -81,10 +81,9 @@ impl TryFrom for TriviaPieceKind { fn try_from(value: TailwindSyntaxKind) -> Result { if value.is_trivia() { - // We intentionally don't consider whitespace to be trivia because it's a required part of the syntax. - // There must be spaces between Candidates in order for tailwind to parse them. match value { TailwindSyntaxKind::NEWLINE => Ok(Self::Newline), + TailwindSyntaxKind::WHITESPACE => Ok(Self::Whitespace), _ => unreachable!("Not Trivia"), } } else { diff --git a/xtask/codegen/tailwind.ungram b/xtask/codegen/tailwind.ungram index 2eedcb30f852..0367d1e6fa2e 100644 --- a/xtask/codegen/tailwind.ungram +++ b/xtask/codegen/tailwind.ungram @@ -52,7 +52,7 @@ TwRoot = candidates: TwCandidateList eof: 'EOF' -TwCandidateList = (AnyTwFullCandidate (' ' AnyTwFullCandidate)* ' '?) +TwCandidateList = AnyTwFullCandidate* AnyTwFullCandidate = TwFullCandidate | TwBogusCandidate