tldr_cli/commands/bugbot/parsers/
mod.rs1pub mod cargo;
7pub mod cargo_audit;
8pub mod checkstyle;
9pub mod cppcheck;
10pub mod eslint;
11pub mod golangci_lint;
12pub mod ktlint;
13pub mod luacheck;
14pub mod phpstan;
15pub mod pyright;
16pub mod rubocop;
17pub mod ruff;
18pub mod swiftlint;
19
20use super::tools::L1Finding;
21
22#[derive(Debug)]
24pub enum ParseError {
25 Json(serde_json::Error),
27 Format(String),
29}
30
31impl std::fmt::Display for ParseError {
32 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
33 match self {
34 ParseError::Json(e) => write!(f, "JSON parse error: {}", e),
35 ParseError::Format(s) => write!(f, "Format error: {}", s),
36 }
37 }
38}
39
40impl std::error::Error for ParseError {}
41
42impl From<serde_json::Error> for ParseError {
43 fn from(e: serde_json::Error) -> Self {
44 ParseError::Json(e)
45 }
46}
47
48pub fn parse_tool_output(parser_name: &str, stdout: &str) -> Result<Vec<L1Finding>, ParseError> {
53 match parser_name {
54 "cargo" => Ok(cargo::parse_cargo_output(stdout)),
55 "cargo-audit" => cargo_audit::parse_cargo_audit_output(stdout),
56 "checkstyle" => Ok(checkstyle::parse_checkstyle_output(stdout)?),
57 "cppcheck" => Ok(cppcheck::parse_cppcheck_output(stdout)?),
58 "eslint" => eslint::parse_eslint_output(stdout),
59 "golangci-lint" => golangci_lint::parse_golangci_lint_output(stdout),
60 "ktlint" => ktlint::parse_ktlint_output(stdout),
61 "luacheck" => Ok(luacheck::parse_luacheck_output(stdout)?),
62 "phpstan" => phpstan::parse_phpstan_output(stdout),
63 "pyright" => pyright::parse_pyright_output(stdout),
64 "rubocop" => rubocop::parse_rubocop_output(stdout),
65 "ruff" => ruff::parse_ruff_output(stdout),
66 "swiftlint" => swiftlint::parse_swiftlint_output(stdout),
67 _ => Err(ParseError::Format(format!("Unknown parser: {}", parser_name))),
68 }
69}