diff --git a/src/error.rs b/src/error.rs index 4cca1069..6f87f5d4 100644 --- a/src/error.rs +++ b/src/error.rs @@ -364,7 +364,10 @@ pub enum MinifyErrorKind { custom_media_loc: Location, }, /// A CSS module selector did not contain at least one class or id selector. - ImpureCSSModuleSelector, + ImpureCSSModuleSelector { + /// The impure selector. + selector: String, + }, } impl fmt::Display for MinifyErrorKind { @@ -377,9 +380,10 @@ impl fmt::Display for MinifyErrorKind { f, "Boolean logic with media types in @custom-media rules is not supported by Lightning CSS" ), - ImpureCSSModuleSelector => write!( + ImpureCSSModuleSelector { selector } => write!( f, - "A selector in CSS modules should contain at least one class or ID selector" + "Selector \"{}\" is not pure. Pure selectors must contain at least one local class or id.", + selector ), } } diff --git a/src/lib.rs b/src/lib.rs index bcd47649..11e9ac99 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -7062,22 +7062,30 @@ mod tests { minify_error_test_with_options( "div {width: 20px}", - MinifyErrorKind::ImpureCSSModuleSelector, + MinifyErrorKind::ImpureCSSModuleSelector { + selector: "div".to_string(), + }, pure_css_module_options.clone(), ); minify_error_test_with_options( ":global(.foo) {width: 20px}", - MinifyErrorKind::ImpureCSSModuleSelector, + MinifyErrorKind::ImpureCSSModuleSelector { + selector: ".foo".to_string(), + }, pure_css_module_options.clone(), ); minify_error_test_with_options( "[foo=bar] {width: 20px}", - MinifyErrorKind::ImpureCSSModuleSelector, + MinifyErrorKind::ImpureCSSModuleSelector { + selector: "[foo=\"bar\"]".to_string(), + }, pure_css_module_options.clone(), ); minify_error_test_with_options( "div, .foo {width: 20px}", - MinifyErrorKind::ImpureCSSModuleSelector, + MinifyErrorKind::ImpureCSSModuleSelector { + selector: "div, .foo".to_string(), + }, pure_css_module_options.clone(), ); minify_test_with_options( @@ -7127,7 +7135,9 @@ mod tests { ); minify_error_test_with_options( "html { .foo { span { color: red; } } }", - MinifyErrorKind::ImpureCSSModuleSelector, + MinifyErrorKind::ImpureCSSModuleSelector { + selector: "html".to_string(), + }, pure_css_module_options.clone(), ); minify_test_with_options( @@ -7137,17 +7147,23 @@ mod tests { ); minify_error_test_with_options( "@scope (div) { .foo { color: red } }", - MinifyErrorKind::ImpureCSSModuleSelector, + MinifyErrorKind::ImpureCSSModuleSelector { + selector: "div".to_string(), + }, pure_css_module_options.clone(), ); minify_error_test_with_options( "@scope (.a) to (div) { .foo { color: red } }", - MinifyErrorKind::ImpureCSSModuleSelector, + MinifyErrorKind::ImpureCSSModuleSelector { + selector: "div".to_string(), + }, pure_css_module_options.clone(), ); minify_error_test_with_options( "@scope (.a) to (.b) { div { color: red } }", - MinifyErrorKind::ImpureCSSModuleSelector, + MinifyErrorKind::ImpureCSSModuleSelector { + selector: "div".to_string(), + }, pure_css_module_options.clone(), ); minify_test_with_options( diff --git a/src/rules/scope.rs b/src/rules/scope.rs index ab7d1004..9bff25d7 100644 --- a/src/rules/scope.rs +++ b/src/rules/scope.rs @@ -43,7 +43,9 @@ impl<'i, T: Clone> ScopeRule<'i, T> { if let Some(scope_start) = &self.scope_start { if !scope_start.0.iter().all(is_pure_css_modules_selector) { return Err(MinifyError { - kind: crate::error::MinifyErrorKind::ImpureCSSModuleSelector, + kind: crate::error::MinifyErrorKind::ImpureCSSModuleSelector { + selector: scope_start.to_string(), + }, loc: self.loc, }); } @@ -52,7 +54,9 @@ impl<'i, T: Clone> ScopeRule<'i, T> { if let Some(scope_end) = &self.scope_end { if !scope_end.0.iter().all(is_pure_css_modules_selector) { return Err(MinifyError { - kind: crate::error::MinifyErrorKind::ImpureCSSModuleSelector, + kind: crate::error::MinifyErrorKind::ImpureCSSModuleSelector { + selector: scope_end.to_string(), + }, loc: self.loc, }); } diff --git a/src/rules/style.rs b/src/rules/style.rs index ce3cd459..33b74c62 100644 --- a/src/rules/style.rs +++ b/src/rules/style.rs @@ -75,7 +75,9 @@ impl<'i, T: Clone> StyleRule<'i, T> { if context.pure_css_modules { if !self.selectors.0.iter().all(is_pure_css_modules_selector) { return Err(MinifyError { - kind: crate::error::MinifyErrorKind::ImpureCSSModuleSelector, + kind: crate::error::MinifyErrorKind::ImpureCSSModuleSelector { + selector: self.selectors.to_string(), + }, loc: self.loc, }); }