Skip to main content

lean_ctx_patterns/
prettier.rs

1// SPDX-License-Identifier: Apache-2.0
2
3pub fn compress(output: &str) -> Option<String> {
4    let trimmed = output.trim();
5    if trimmed.is_empty() {
6        return Some("ok (formatted)".to_string());
7    }
8
9    if trimmed.contains("All matched files use Prettier code style") {
10        return Some("ok (all formatted)".to_string());
11    }
12
13    let unformatted: Vec<&str> = trimmed
14        .lines()
15        .filter(|l| {
16            let t = l.trim();
17            !t.is_empty()
18                && !t.starts_with("Checking")
19                && !t.starts_with("All matched")
20                && !t.contains("[warn]")
21                && !t.contains("[error]")
22                && t.contains('.')
23        })
24        .collect();
25
26    let warnings: Vec<&str> = trimmed.lines().filter(|l| l.contains("[warn]")).collect();
27
28    if !unformatted.is_empty() {
29        let files: Vec<String> = unformatted.iter().map(|l| l.trim().to_string()).collect();
30        return Some(format!(
31            "{} files need formatting:\n{}",
32            files.len(),
33            files.join("\n")
34        ));
35    }
36
37    if !warnings.is_empty() {
38        return Some(format!("{} warnings", warnings.len()));
39    }
40
41    if trimmed.lines().count() <= 5 {
42        return Some(trimmed.to_string());
43    }
44
45    let lines: Vec<&str> = trimmed.lines().collect();
46    Some(format!(
47        "{}\n{}",
48        lines[..5].join("\n"),
49        super::elision_marker(lines.len() - 5)
50    ))
51}