Skip to main content

bctx_forge/signal/
mod.rs

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}