(&self, config: GlobalConfig)
| 27 | |
| 28 | impl 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); |
nothing calls this directly
no test coverage detected