MCPcopy Create free account
hub / github.com/csskit/csskit / extract_colors

Function extract_colors

crates/csskit/src/commands/colors.rs:17–39  ·  view source on GitHub ↗
(src: &str, bump: &Bump)

Source from the content-addressed store, hash-verified

15use std::collections::HashSet;
16
17fn extract_colors(src: &str, bump: &Bump) -> Result<Vec<(Color, Span)>, Vec<Diagnostic>> {
18 let mut visitor = ColorExtractor::new();
19
20 // Try parsing as a bare list of colors first.
21 let lexer = Lexer::new(&CssAtomSet::ATOMS, src);
22 let mut parser = Parser::new(bump, src, lexer);
23 let result = parser.parse_entirely::<bumpalo::collections::Vec<ASTColor>>();
24 if let Some(output) = result.output.filter(|_| result.errors.is_empty()) {
25 let _ = output.accept(&mut visitor);
26 return Ok(visitor.colors);
27 }
28
29 // Fall back to full stylesheet parse.
30 let lexer = Lexer::new(&CssAtomSet::ATOMS, src);
31 let mut parser = Parser::new(bump, src, lexer);
32 let result = parser.parse_entirely::<StyleSheet>();
33 if let Some(stylesheet) = result.output {
34 let _ = stylesheet.accept(&mut visitor);
35 Ok(visitor.colors)
36 } else {
37 Err(result.errors.to_vec())
38 }
39}
40
41struct ColorExtractor {
42 colors: Vec<(Color, Span)>,

Callers 1

Calls 3

ErrClass · 0.85
acceptMethod · 0.80
is_emptyMethod · 0.45

Tested by

no test coverage detected