1pub mod capture;
2pub mod compactor;
3pub mod filter;
4
5#[derive(Debug, Clone, PartialEq, Eq)]
6pub enum SignalKind {
7 Build,
8 Test,
9 Lint,
10 Query,
11 Script,
12 Package,
13 Infra,
14 Database,
15 System,
16 Unknown,
17}
18
19impl SignalKind {
20 pub fn from_program(program: &str, args: &[String]) -> Self {
21 let prog = program.split('/').next_back().unwrap_or(program);
22 match prog {
23 "git" | "gh" | "jj" => Self::Query,
24 "cargo" => {
25 let sub = args.first().map(|s| s.as_str()).unwrap_or("");
26 match sub {
27 "test" | "nextest" => Self::Test,
28 "build" | "check" | "clippy" => Self::Build,
29 _ => Self::Build,
30 }
31 }
32 "go" => {
33 let sub = args.first().map(|s| s.as_str()).unwrap_or("");
34 if sub == "test" {
35 Self::Test
36 } else {
37 Self::Build
38 }
39 }
40 "make" | "cmake" | "bazel" | "gradle" | "mvn" => Self::Build,
41 "npm" | "pnpm" | "yarn" | "bun" | "pip" => Self::Package,
42 "pytest" | "jest" | "vitest" | "rspec" => Self::Test,
43 "eslint" | "ruff" | "mypy" | "golangci-lint" | "clippy" => Self::Lint,
44 "docker" | "kubectl" | "terraform" | "aws" | "helm" => Self::Infra,
45 "psql" | "mysql" | "sqlite3" | "prisma" => Self::Database,
46 "ls" | "find" | "grep" | "cat" | "env" => Self::System,
47 _ => Self::Unknown,
48 }
49 }
50}