Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 15 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,21 @@

## [Unreleased]

### Added

- **Oracle PL/SQL support**: `.pls`, `.pks`, `.pkb`, `.prc`, `.fnc`, `.trg`, and `.plsql`
file extensions are parsed via a dedicated regex parser (no tree-sitter grammar exists for
Oracle PL/SQL). Extracts PACKAGE specs, PACKAGE BODYs with member PROCEDURE/FUNCTION nodes,
standalone PROCEDUREs and FUNCTIONs, TRIGGERs with event and table metadata, and TYPE
definitions. Emits CALLS edges for inter-package calls (Oracle built-in system packages such
as `DBMS_*` and `UTL_*` are suppressed to reduce noise) and IMPORTS_FROM edges for FROM/JOIN
table references and trigger target tables. `.sql` files whose first 500 bytes match an Oracle
object keyword (`PACKAGE`, `TRIGGER`, `PROCEDURE`, `FUNCTION`, `TYPE`) are auto-routed to the
PL/SQL parser. Wrapped (obfuscated) Oracle files are silently skipped. Adds 24 tests and
`tests/fixtures/sample.plsql`. Files must be present on disk — no Oracle database connection
is required; export your objects from SQL Developer, TOAD, or version control before running
`code-review-graph build`.

## [2.3.5] - 2026-05-25

**Real-time token savings, visible to humans.** The estimated context-savings
Expand Down
16 changes: 14 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -113,7 +113,7 @@ Large monorepos are where token waste is most painful. The graph cuts through th
<img src="diagrams/diagram9_language_coverage.png" alt="Language coverage organized by category: Web, Backend, Systems, Mobile, Scripting, Config, plus Jupyter and Databricks notebook support" width="90%" />
</p>

Parser support covers functions, classes, imports, call sites, inheritance, and test detection across the current parser surface, using Tree-sitter where available and targeted fallbacks where needed. Current support includes Python, JavaScript/TypeScript/TSX, Go, Rust, Java, C/C++, C#, Ruby, Kotlin, Swift, PHP, Scala, Solidity, Dart, R, Perl, Lua/Luau, Objective-C, shell scripts, Elixir, Zig, PowerShell, Julia, ReScript, GDScript, Nix, Verilog/SystemVerilog, SQL, Vue/Svelte SFCs, Astro files parsed through the TypeScript parser, Jupyter/Databricks notebooks (`.ipynb`), and Perl XS files (`.xs`).
Parser support covers functions, classes, imports, call sites, inheritance, and test detection across the current parser surface, using Tree-sitter where available and targeted fallbacks where needed. Current support includes Python, JavaScript/TypeScript/TSX, Go, Rust, Java, C/C++, C#, Ruby, Kotlin, Swift, PHP, Scala, Solidity, Dart, R, Perl, Lua/Luau, Objective-C, shell scripts, Elixir, Zig, PowerShell, Julia, ReScript, GDScript, Nix, Verilog/SystemVerilog, SQL, Oracle PL/SQL, Vue/Svelte SFCs, Astro files parsed through the TypeScript parser, Jupyter/Databricks notebooks (`.ipynb`), and Perl XS files (`.xs`).

---

Expand Down Expand Up @@ -198,7 +198,7 @@ Blast-radius analysis reaches 100% recall on every one of the 13 evaluation comm
| Feature | Details |
|---------|---------|
| **Incremental updates** | Re-parses only changed files. Subsequent updates complete in under 2 seconds. |
| **Broad language + notebook support** | Python, JavaScript/TypeScript/TSX, Go, Rust, Java, C/C++, C#, Ruby, Kotlin, Swift, PHP, Scala, Solidity, Dart, R, Perl, Lua/Luau, Objective-C, shell scripts, Elixir, Zig, PowerShell, Julia, ReScript, GDScript, Nix, Verilog/SystemVerilog, SQL, Vue/Svelte SFCs, Astro files parsed through the TypeScript parser, Jupyter/Databricks (.ipynb), and Perl XS (.xs) |
| **Broad language + notebook support** | Python, JavaScript/TypeScript/TSX, Go, Rust, Java, C/C++, C#, Ruby, Kotlin, Swift, PHP, Scala, Solidity, Dart, R, Perl, Lua/Luau, Objective-C, shell scripts, Elixir, Zig, PowerShell, Julia, ReScript, GDScript, Nix, Verilog/SystemVerilog, SQL, Oracle PL/SQL, Vue/Svelte SFCs, Astro files parsed through the TypeScript parser, Jupyter/Databricks (.ipynb), and Perl XS (.xs) |
| **Blast-radius analysis** | Shows which functions, classes, and files are likely affected by a change |
| **Auto-update hooks** | Hooks and watch mode can update the graph on file saves and supported commit hooks |
| **Semantic search** | Optional vector embeddings via sentence-transformers, Google Gemini, MiniMax, or any OpenAI-compatible endpoint (real OpenAI, Azure, new-api, LiteLLM, vLLM, LocalAI) |
Expand Down Expand Up @@ -562,6 +562,18 @@ pip install -e ".[dev]"
pytest
```

<details>
<summary><strong>Oracle PL/SQL projects</strong></summary>
<br>

Oracle PL/SQL objects live inside the database, not the filesystem. To use `code-review-graph` with an Oracle codebase you need the source files checked out locally first — export them from **SQL Developer** (Tools → Export DDL), **TOAD** (Schema Browser → Script), or pull them from your version-control repository.

The parser recognises these Oracle-specific extensions automatically: `.pks` (package spec), `.pkb` (package body), `.prc` (procedure), `.fnc` (function), `.trg` (trigger), `.pls` / `.plsql` (generic PL/SQL). Plain `.sql` files are also detected when their first lines contain an Oracle object keyword (`PACKAGE`, `TRIGGER`, `PROCEDURE`, `FUNCTION`, `TYPE`).

Folder layout does not matter — any directory structure is scanned recursively. Wrapped (obfuscated) files are silently skipped. No Oracle database connection is required at any point.

</details>

<details>
<summary><strong>Adding a new language</strong></summary>
<br>
Expand Down
Loading