From 92e9888516caf3d1e3a3bbea04e621b4e4f41fff Mon Sep 17 00:00:00 2001 From: ahabhgk Date: Mon, 17 Jun 2024 13:41:17 +0800 Subject: [PATCH] fix: find url in minimized css --- src/dependencies.rs | 13 +++++-------- src/lexer.rs | 18 ++++++++++++++++++ tests/test.rs | 14 ++++++++++++++ 3 files changed, 37 insertions(+), 8 deletions(-) diff --git a/src/dependencies.rs b/src/dependencies.rs index 694a6bc..35fbae9 100644 --- a/src/dependencies.rs +++ b/src/dependencies.rs @@ -1764,14 +1764,11 @@ impl<'s, D: HandleDependency<'s>, W: HandleWarning<'s>> Visitor<'s> for LexDepen self.exit_font_palette_property(); } } - - self.is_next_rule_prelude = self.is_next_nested_syntax(lexer)?; } + self.is_next_rule_prelude = self.is_next_nested_syntax(lexer)?; } Scope::TopLevel => { - if self.mode_data.is_some() { - self.is_next_rule_prelude = self.is_next_nested_syntax(lexer)?; - } + self.is_next_rule_prelude = self.is_next_nested_syntax(lexer)?; } } Some(()) @@ -2047,6 +2044,7 @@ impl<'s, D: HandleDependency<'s>, W: HandleWarning<'s>> Visitor<'s> for LexDepen } _ => return Some(()), } + self.is_next_rule_prelude = self.is_next_nested_syntax(lexer)?; if let Some(mode_data) = &mut self.mode_data { if mode_data.is_pure_mode() && mode_data.pure_global.is_some() { let pure_global_start = mode_data.pure_global.unwrap(); @@ -2069,7 +2067,6 @@ impl<'s, D: HandleDependency<'s>, W: HandleWarning<'s>> Visitor<'s> for LexDepen self.balanced.update_property_mode(mode_data); self.balanced.pop_mode_pseudo_class(mode_data); - self.is_next_rule_prelude = self.is_next_nested_syntax(lexer)?; if self.is_next_rule_prelude && self.block_nesting_level == 0 { let mode_data = self.mode_data.as_mut().unwrap(); mode_data.composes_local_classes.reset_to_initial(); @@ -2109,11 +2106,11 @@ impl<'s, D: HandleDependency<'s>, W: HandleWarning<'s>> Visitor<'s> for LexDepen } if self.block_nesting_level == 0 { self.scope = Scope::TopLevel; + self.is_next_rule_prelude = true; if let Some(mode_data) = &mut self.mode_data { - self.is_next_rule_prelude = true; mode_data.composes_local_classes.reset_to_initial(); } - } else if self.mode_data.is_some() { + } else { self.is_next_rule_prelude = self.is_next_nested_syntax(lexer)?; } } diff --git a/src/lexer.rs b/src/lexer.rs index 5b7a2dc..39ed7b0 100644 --- a/src/lexer.rs +++ b/src/lexer.rs @@ -957,4 +957,22 @@ mod tests { "#}, ); } + + #[test] + fn parse_minimized_urls() { + assert_lexer_snapshot( + "body{background:url(./image.png)}", + indoc! {r#" + ident: body + left_curly: { + ident: background + pseudo_function: :url( + class: . + ident: image + class: .png + right_parenthesis: ) + right_curly: } + "#}, + ); + } } diff --git a/tests/test.rs b/tests/test.rs index 94043ce..f84b150 100644 --- a/tests/test.rs +++ b/tests/test.rs @@ -344,6 +344,20 @@ fn url() { assert_eq!(dependencies.len(), 2); } +#[test] +fn url_2() { + let input = "body{background-image:url(./img.png)}"; + let (dependencies, warnings) = collect_dependencies(input, Mode::Css); + assert!(warnings.is_empty()); + assert_url_dependency( + input, + &dependencies[0], + "./img.png", + UrlRangeKind::Function, + "url(./img.png)", + ); +} + #[test] fn duplicate_url() { let input = indoc! {r#"