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

Method run

crates/csskit/src/commands/min.rs:29–93  ·  view source on GitHub ↗
(&self, config: GlobalConfig)

Source from the content-addressed store, hash-verified

27
28impl Min {
29 pub fn run(&self, config: GlobalConfig) -> CliResult {
30 let Min { content, output, check } = self;
31 let color = config.colors() && output.is_none() && !*check;
32 let bump = Bump::default();
33 let start = std::time::Instant::now();
34 if *check && output.is_some() {
35 eprintln!("Ignoring output option, because check was passed");
36 }
37 let mut checks = 0;
38 for (file_name, mut source) in content.sources()? {
39 let mut source_string = String::new();
40 source.read_to_string(&mut source_string)?;
41 let source_text = source_string.as_str();
42 let lexer = Lexer::new(&CssAtomSet::ATOMS, source_text);
43 let mut parser = Parser::new(&bump, source_text, lexer);
44 let mut result = parser.parse_entirely::<StyleSheet>().with_trivia();
45 if let Some(ref mut stylesheet) = result.output {
46 let mut transformer =
47 Transformer::new_in(&bump, CssMinifierFeature::all_bits(), &CssAtomSet::ATOMS, source_text);
48 transformer.transform(stylesheet);
49 let overlays = transformer.overlays();
50
51 let mut str = String::new();
52 if color {
53 let mut highlighter = TokenHighlighter::new();
54 let _ = stylesheet.accept(&mut highlighter);
55 let ansi = AnsiHighlightCursorStream::new(&mut str, &highlighter, DefaultAnsiTheme);
56 {
57 let mut stream = CursorOverlaySink::new(
58 source_text,
59 &overlays,
60 CursorCompactWriteSink::new(source_text, ansi),
61 );
62 result.to_cursors(&mut stream);
63 }
64 } else {
65 {
66 let mut stream = CursorOverlaySink::new(
67 source_text,
68 &overlays,
69 CursorCompactWriteSink::new(source_text, &mut str),
70 );
71 result.to_cursors(&mut stream);
72 }
73 };
74 if *check {
75 if str != source_text {
76 println!("{str}");
77 checks += 1;
78 }
79 } else if let Some(file) = output {
80 std::fs::write(file, str.as_bytes())?;
81 } else {
82 println!("{str}");
83 }
84 } else {
85 for compact_err in result.errors {
86 let report = crate::commands::format_diagnostic_error(&compact_err, &source_string, file_name);

Callers

nothing calls this directly

Calls 10

format_diagnostic_errorFunction · 0.85
ErrClass · 0.85
colorsMethod · 0.80
sourcesMethod · 0.80
with_triviaMethod · 0.80
transformMethod · 0.80
overlaysMethod · 0.80
acceptMethod · 0.80
as_strMethod · 0.45
to_cursorsMethod · 0.45

Tested by

no test coverage detected