Skip to content

Commit 7e310f8

Browse files
authored
fix(turbopack): Improve error message for PURE selector error (#80068)
### What? Use CSS string for CSS errors instead of Rust debug representation, and remove `lightningcss` text from the error message. ### Why? We don't need them.
1 parent 9c1f272 commit 7e310f8

File tree

4 files changed

+16
-11
lines changed

4 files changed

+16
-11
lines changed

test/development/acceptance-app/ReactRefreshLogBox.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -464,7 +464,7 @@ describe('ReactRefreshLogBox app', () => {
464464
"label": "Build Error",
465465
"source": "./index.module.css
466466
Parsing css source code failed
467-
Selector is not pure (pure selectors must contain at least one local class or id), (lightningcss, Selector(button, specificity = 0x1))
467+
Selector "button" is not pure. Pure selectors must contain at least one local class or id.
468468
Example import traces:
469469
#1:
470470
./index.module.css [app-client]

test/development/acceptance/ReactRefreshLogBox.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -602,7 +602,7 @@ describe('ReactRefreshLogBox', () => {
602602
"label": "Build Error",
603603
"source": "./index.module.css
604604
Parsing css source code failed
605-
Selector is not pure (pure selectors must contain at least one local class or id), (lightningcss, Selector(button, specificity = 0x1))
605+
Selector "button" is not pure. Pure selectors must contain at least one local class or id.
606606
Example import traces:
607607
client:
608608
./index.module.css

test/integration/css-features/test/css-modules.test.js

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -58,9 +58,7 @@ describe('Custom Properties: Fail for global element in CSS Modules', () => {
5858
expect(code).not.toBe(0)
5959
if (process.env.IS_TURBOPACK_TEST) {
6060
expect(stderr).toContain('pages/styles.module.css')
61-
expect(stderr).toContain(
62-
'Selector is not pure (pure selectors must contain at least one local class or id)'
63-
)
61+
expect(stderr).toContain('Selector "h1" is not pure')
6462
} else {
6563
expect(stderr).toContain('Failed to compile')
6664
expect(stderr).toContain('pages/styles.module.css')

turbopack/crates/turbopack-css/src/process.rs

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ use lightningcss::{
55
css_modules::{CssModuleExport, CssModuleExports, Pattern, Segment},
66
stylesheet::{ParserOptions, PrinterOptions, StyleSheet, ToCssResult},
77
targets::{Features, Targets},
8+
traits::ToCss,
89
values::url::Url,
910
visit_types,
1011
visitor::Visit,
@@ -523,8 +524,11 @@ impl CssError {
523524
CssError::CssSelectorInModuleNotPure { selector } => {
524525
ParsingIssue {
525526
file,
526-
msg: format!("{CSS_MODULE_ERROR}, (lightningcss, {selector})").into(),
527-
527+
msg: format!(
528+
"Selector \"{selector}\" is not pure. Pure selectors must contain at \
529+
least one local class or id."
530+
)
531+
.into(),
528532
source: None,
529533
}
530534
.resolved_cell()
@@ -534,9 +538,6 @@ impl CssError {
534538
}
535539
}
536540

537-
const CSS_MODULE_ERROR: &str =
538-
"Selector is not pure (pure selectors must contain at least one local class or id)";
539-
540541
/// We only visit top-level selectors.
541542
impl lightningcss::visitor::Visitor<'_> for CssValidator {
542543
type Error = ();
@@ -578,8 +579,14 @@ impl lightningcss::visitor::Visitor<'_> for CssValidator {
578579
}
579580

580581
if is_selector_problematic(selector) {
582+
let selector_string = selector
583+
.to_css_string(PrinterOptions {
584+
minify: false,
585+
..Default::default()
586+
})
587+
.expect("selector.to_css_string should not fail");
581588
self.errors.push(CssError::CssSelectorInModuleNotPure {
582-
selector: format!("{selector:?}"),
589+
selector: selector_string,
583590
});
584591
}
585592

0 commit comments

Comments
 (0)