You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
feat: make all 10 language grammars individually feature-gated
All tree-sitter language grammars (Rust, TypeScript, JavaScript,
Python, Go, Java, C, C++, Ruby, C#) are now individually toggleable
via Cargo feature flags (lang-rust, lang-typescript, etc.) and all
enabled by default. Users can build with --no-default-features and
selectively enable only the languages they need.
- Gate all query constants and match arms with #[cfg(feature = ...)]
- Gate test imports and helpers behind #[cfg(any(all 10 features))]
- Update README, DOCS, and CLAUDE.md with language feature docs
- Update test count to 295
All 10 languages enabled by default. To build with only the core 5, use `--no-default-features`. Individual languages can be toggled via feature flags: `lang-java`, `lang-c`, `lang-cpp`, `lang-ruby`, `lang-csharp`.
102
+
All 10 languages are individually feature-gated (`lang-rust`, `lang-typescript`, `lang-javascript`, `lang-python`, `lang-go`, `lang-java`, `lang-c`, `lang-cpp`, `lang-ruby`, `lang-csharp`) and enabled by default. Build with `--no-default-features --features lang-rust,lang-go` to include only specific languages.
Copy file name to clipboardExpand all lines: DOCS.md
+28-11Lines changed: 28 additions & 11 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -518,17 +518,34 @@ CommitBee detects whether it's running in an interactive terminal. In non-intera
518
518
519
519
## 🌳 Supported Languages
520
520
521
-
CommitBee uses tree-sitter to parse source files and extract semantic symbols. Currently supported:
521
+
CommitBee uses tree-sitter to parse source files and extract semantic symbols. All 10 languages are enabled by default and individually toggleable via Cargo feature flags.
**Files in unsupported languages still work** — they're included in the diff context, they just don't get semantic symbol extraction. The commit message will still be based on the actual diff content; it just won't know which specific functions or types changed.
548
+
**Files in unsupported or disabled languages still work** — they're included in the diff context, they just don't get semantic symbol extraction. The commit message will still be based on the actual diff content; it just won't know which specific functions or types changed.
532
549
533
550
### Symbol Tracking
534
551
@@ -662,7 +679,7 @@ No panics in user-facing code paths. The sanitizer and validator are tested with
662
679
663
680
### Testing Strategy
664
681
665
-
CommitBee has 202 tests across multiple strategies:
682
+
CommitBee has 295 tests across multiple strategies:
666
683
667
684
| Strategy | What It Covers |
668
685
| --- | --- |
@@ -675,7 +692,7 @@ CommitBee has 202 tests across multiple strategies:
675
692
Run them:
676
693
677
694
```bash
678
-
cargo test# All 202 tests
695
+
cargo test# All 295 tests
679
696
cargo test --test sanitizer # Just sanitizer tests
680
697
cargo test --test integration # LLM provider mocks
681
698
COMMITBEE_LOG=debug cargo test -- --nocapture # With logging
Copy file name to clipboardExpand all lines: README.md
+9-3Lines changed: 9 additions & 3 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -25,7 +25,7 @@ Most tools in this space pipe raw `git diff` to an LLM and hope for the best. Co
25
25
26
26
CommitBee uses tree-sitter to parse both the staged and HEAD versions of every changed file — in parallel across CPU cores. It extracts 10 symbol types (functions, methods, structs, enums, traits, impls, classes, interfaces, constants, type aliases) and maps diff hunks to their spans. The LLM doesn't see "lines 42-58 changed" — it sees "the `validate()` function in `sanitizer.rs` was modified, and a new `retry()` method was added." Symbols are tracked in three states: **added**, **removed**, and **modified-signature**.
27
27
28
-
Supported languages: **Rust, TypeScript, JavaScript, Python, Go**. Files in other languages still get full diff context — just without symbol extraction.
28
+
Supported languages: **Rust, TypeScript, JavaScript, Python, Go, Java, C, C++, Ruby, C#** — all enabled by default, individually toggleable via Cargo feature flags. Files in other languages still get full diff context — just without symbol extraction.
29
29
30
30
### 🧠 It reasons about what changed
31
31
@@ -96,7 +96,7 @@ When your staged changes mix independent work (a bugfix in one module + a refact
See [Testing Strategy](DOCS.md#testing-strategy) for the full breakdown.
@@ -226,9 +226,15 @@ See [Testing Strategy](DOCS.md#testing-strategy) for the full breakdown.
226
226
227
227
### 🔎 `v0.4.0` — See Everything (current)
228
228
229
+
-**10-language tree-sitter support** — Added Java, C, C++, Ruby, and C# to the existing Rust, TypeScript, JavaScript, Python, and Go. All languages are individually feature-gated and enabled by default. Disable any with `--no-default-features` + selective `--features lang-rust,lang-go,...`.
230
+
-**Custom prompt templates** — User-defined templates with `{{type}}`, `{{scope}}`, `{{subject}}`, `{{body}}` variables via `template_path` config.
231
+
-**Multi-language commit messages** — Generate messages in any language with `--locale` flag or `locale` config (e.g., `--locale de` for German).
232
+
-**Commit history style learning** — Learns from recent commit history to match your project's style (`learn_from_history`, `history_sample_size` config).
229
233
-**Rename detection** — Detects file renames with similarity percentage via `git diff --find-renames`, displayed as `old → new (N% similar)` in prompts and split suggestions. Configurable threshold (default 70%, set to 0 to disable).
230
234
-**Expanded secret scanning** — 25 built-in patterns across 13 categories (cloud providers, AI/ML, source control, communication, payment, database, cryptographic, generic). Pluggable engine: add custom regex patterns or disable built-ins by name via config.
231
235
-**Progress indicators** — Contextual `indicatif` spinners during pipeline phases (analyzing, scanning, generating). Auto-suppressed in non-TTY environments (git hooks, pipes).
236
+
-**Evaluation harness** — `cargo test --features eval` for structured LLM output quality benchmarking.
237
+
-**Fuzz testing** — `cargo-fuzz` targets for sanitizer and diff parser robustness.
0 commit comments