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

Method run

crates/csskit/src/commands/extract.rs:181–255  ·  view source on GitHub ↗

Run the command: loop files, parse, extract, render.

(&self, config: GlobalConfig)

Source from the content-addressed store, hash-verified

179
180 /// Run the command: loop files, parse, extract, render.
181 fn run(&self, config: GlobalConfig) -> CliResult {
182 let bump = Bump::default();
183 let mut envelopes: Vec<FileEnvelope<Self::Row>> = Vec::new();
184 let mut first_file = true;
185
186 for (filename, mut source) in self.input().sources()? {
187 let mut src = String::new();
188 if let Err(e) = source.read_to_string(&mut src) {
189 match self.format() {
190 OutputFormat::Json => {
191 envelopes.push(FileEnvelope::err(
192 filename,
193 ErrorRecord { kind: ErrorKind::Io, message: e.to_string() },
194 ));
195 }
196 OutputFormat::Text => {
197 eprintln!("{filename}: {e}");
198 }
199 }
200 continue;
201 }
202
203 let mut ctx = Self::FileContext::default();
204 let mut on_stylesheet = |ss: &StyleSheet| {
205 if matches!(self.format(), OutputFormat::Text) {
206 ctx = self.build_context(ss, &src);
207 }
208 };
209
210 match self.parse_and_extract_file(filename, &src, &bump, &mut on_stylesheet) {
211 Ok(rows) => match self.format() {
212 OutputFormat::Text => {
213 if rows.is_empty() {
214 self.on_no_results(filename);
215 } else {
216 if !first_file {
217 println!();
218 }
219 first_file = false;
220 if self.show_file_header() {
221 if config.colors() {
222 println!("{}", crate::magenta(filename));
223 } else {
224 println!("{}", filename);
225 }
226 }
227 self.render_file_preamble(filename, rows.len(), config.colors());
228 for (span, row) in &rows {
229 self.render_text(&ctx, filename, &src, *span, row, config.colors());
230 }
231 }
232 }
233 OutputFormat::Json => {
234 let records = rows
235 .into_iter()
236 .map(|(span, data)| Record { location: Location::from_span(span, &src), data })
237 .collect();
238 envelopes.push(FileEnvelope::ok(filename, records));

Callers

nothing calls this directly

Implementers 3

specificity.rscrates/csskit/src/commands/specificity
colors.rscrates/csskit/src/commands/colors.rs
find.rscrates/csskit/src/commands/find.rs

Calls 14

sourcesMethod · 0.80
colorsMethod · 0.80
collectMethod · 0.80
into_iterMethod · 0.80
inputMethod · 0.45
formatMethod · 0.45
build_contextMethod · 0.45
is_emptyMethod · 0.45
on_no_resultsMethod · 0.45
show_file_headerMethod · 0.45
render_file_preambleMethod · 0.45

Tested by

no test coverage detected