From ac2a0c9120abe46ae48218d6dc1f73b1c954de0b Mon Sep 17 00:00:00 2001 From: Robin Malfait Date: Wed, 5 Feb 2025 19:21:16 +0100 Subject: [PATCH] detect all variables that start with `--` This was already the case before, but we were also verifying that it was preceded by `var(`. Let's remove that code to make sure code like this works: ```js let var = '--my-var'; let style = bla.getPropertyValue(var); ``` --- crates/oxide/src/parser.rs | 41 ++++++++------------------------------ 1 file changed, 8 insertions(+), 33 deletions(-) diff --git a/crates/oxide/src/parser.rs b/crates/oxide/src/parser.rs index 35ea42757718..9cd702d477f3 100644 --- a/crates/oxide/src/parser.rs +++ b/crates/oxide/src/parser.rs @@ -159,7 +159,7 @@ impl<'a> Extractor<'a> { } while !candidate.is_empty() { - match Extractor::is_valid_candidate_string(candidate, self.input, self.idx_start) { + match Extractor::is_valid_candidate_string(candidate) { ValidationResult::Valid => return ParseAction::SingleCandidate(candidate), ValidationResult::Restart => return ParseAction::RestartAt(self.idx_start + 1), _ => {} @@ -240,11 +240,7 @@ impl<'a> Extractor<'a> { } #[inline(always)] - fn is_valid_candidate_string( - candidate: &'a [u8], - input: &[u8], - start_idx: usize, - ) -> ValidationResult { + fn is_valid_candidate_string(candidate: &'a [u8]) -> ValidationResult { // Reject candidates that start with a capital letter if candidate[0].is_ascii_uppercase() { return ValidationResult::Invalid; @@ -307,14 +303,6 @@ impl<'a> Extractor<'a> { } } - // CSS variables must be preceded by `var(` to be considered a valid CSS variable candidate - if candidate.starts_with(b"--") { - match input.get(start_idx - 4..start_idx) { - Some(b"var(") => return ValidationResult::Valid, - _ => return ValidationResult::Invalid, - } - } - let split_candidate = Extractor::split_candidate(candidate); let mut offset = 0; @@ -1738,44 +1726,31 @@ mod test { ); } - #[test] - fn test_css_variables_must_be_preceded_by_var_open_paren() { - let candidates = run("[--do-not-emit:true]", false); - assert_eq!( - candidates, - // Looks little funky, but `--do-not-emit` on its own is not emitted - vec!["[--do-not-emit:true]", "--do-not-emit:true"] - ); - - let candidates = run("
", false); - assert_eq!(candidates, vec!["div", "style", "true"]); - } - #[test] fn test_is_valid_candidate_string() { assert_eq!( - Extractor::is_valid_candidate_string(b"foo", b"", 0), + Extractor::is_valid_candidate_string(b"foo"), ValidationResult::Valid ); assert_eq!( - Extractor::is_valid_candidate_string(b"foo-(--color-red-500)", b"", 0), + Extractor::is_valid_candidate_string(b"foo-(--color-red-500)"), ValidationResult::Valid ); assert_eq!( - Extractor::is_valid_candidate_string(b"bg-[url(foo)]", b"", 0), + Extractor::is_valid_candidate_string(b"bg-[url(foo)]"), ValidationResult::Valid ); assert_eq!( - Extractor::is_valid_candidate_string(b"group-foo/(--bar)", b"", 0), + Extractor::is_valid_candidate_string(b"group-foo/(--bar)"), ValidationResult::Valid ); assert_eq!( - Extractor::is_valid_candidate_string(b"foo(\"bg-red-500\")", b"", 0), + Extractor::is_valid_candidate_string(b"foo(\"bg-red-500\")"), ValidationResult::Restart ); assert_eq!( - Extractor::is_valid_candidate_string(b"foo-(", b"", 0), + Extractor::is_valid_candidate_string(b"foo-("), ValidationResult::Restart ); }