Splice
Span-safe refactoring kernel for 7 languages using tree-sitter and SQLiteGraph.
Version: 2.0.0 License: GPL-3.0-or-later
What This Is
Splice is a command-line tool that performs byte-accurate, AST-validated refactoring operations on code in 7 languages: Rust, Python, C, C++, Java, JavaScript, and TypeScript. It can replace function bodies, delete symbols, apply batch changes, perform pattern replacements, and undo operations.
v2.0 Features
Splice v2.0 introduces comprehensive improvements across safety, output structure, validation, and observability:
- Structured JSON Output: All operations return structured JSON with explicit fields (execution_id, match_id, span_id) for programmatic consumption
- Span-Aware Metadata: Line and column coordinates in all output for precise code location tracking
- Deterministic Ordering: All operations (spans, matches, errors, steps) return sorted results for reproducibility
- Validation Hooks: Pre/post-operation checksums verify code integrity at every step
- Execution Logging: Complete audit trail in
.splice/operations.dbwith timestamps, durations, and command-line capture - SQLiteGraph v1.0: Native V2 backend for improved performance and reliability
- Magellan Integration: Code indexing and label-based symbol discovery for all 7 languages
- Enhanced Safety: Eliminated unwrap() calls, comprehensive error handling, atomic rollback on failures
What This Is NOT
- An IDE or LSP server - Use Rust Analyzer, IntelliJ, PyCharm, VSCode, or your editor
- A general-purpose refactoring tool - Focused on specific operations
- A complete solution - It's a focused tool for specific jobs
- Production-hardened - Use with version control
What It Does
- patch: Replace function bodies, class definitions, enum variants with validation (single or batch)
- delete: Remove symbol definitions and all references (cross-file, Rust-only)
- apply-files: Multi-file pattern replacement with AST confirmation
- query: Query symbols by labels using Magellan integration (NEW)
- get: Get code chunks from the database without re-reading files (NEW)
- undo: Restore files from backup manifest
- plan: Orchestrate multi-step refactors via JSON plans
- preview: Inspect changes before applying (dry-run mode)
- backup: Create backups with automatic restore capability
- Validates syntax with tree-sitter after every operation
- Validates compilation with language-specific compilers
- Rolls back atomically on any failure
Supported Languages
| Language | Extensions | Delete | Patch | Validation |
|---|---|---|---|---|
| Rust | .rs |
Full | Full | cargo check |
| Python | .py |
Basic | Full | python -m py_compile |
| C | .c, .h |
Basic | Full | gcc -fsyntax-only |
| C++ | .cpp, .hpp, .cc, .cxx |
Basic | Full | g++ -fsyntax-only |
| Java | .java |
Basic | Full | javac |
| JavaScript | .js, .mjs, .cjs |
Basic | Full | node --check |
| TypeScript | .ts, .tsx |
Basic | Full | tsc --noEmit |
Delete modes:
- Full: Finds all references across files (Rust only)
- Basic: Deletes definition only, no reference finding (other languages)
Installation
Or from source:
Quick Start
Delete a Symbol (Rust)
Delete a function and all its references:
Output (structured JSON):
Patch a Symbol (Rust)
Replace a function body:
Patch a Symbol (Python)
Patch a Symbol (TypeScript)
Multi-Step Plan
Batch Patch
Apply multiple patches at once from a JSON file:
Pattern Replace
Replace a pattern across multiple files:
# Replace "42" with "99" in all Python files
# With validation and backup
Preview Mode
Inspect changes before applying:
Backup and Undo
Create a backup before changes:
Restore from backup:
Query Symbols by Label (Magellan Integration)
# List all available labels
# Find all Rust functions
# Show code for each result
Get Code Chunks (Magellan Integration)
# Get code by byte span without re-reading the file
Commands
splice delete
Remove a symbol definition and all its references.
Optional Arguments:
--kind <KIND>: Symbol kind filter--language <LANG>: Language override--analyzer <MODE>: Validation mode (off, os, path)--create-backup: Create backup before deleting--operation-id <ID>: Custom operation ID for auditing--metadata <JSON>: Optional metadata attachment
Rust-specific features:
- Finds references across the entire workspace
- Tracks imports and re-exports
- Handles shadowing correctly
- Cross-file reference resolution
Other languages:
- Deletes the symbol definition only
- Use with
--languageflag or auto-detection from file extension
splice patch
Apply a patch to a symbol's span.
Optional Arguments:
--kind <KIND>: Symbol kind filter (function, method, class, struct, interface, enum, trait, impl, module, variable, constructor, type-alias)--language <LANG>: Language override (rust, python, c, cpp, java, java-script, type-script)--analyzer <MODE>: Validation mode (off, os, path)--preview: Run in preview mode without modifying files--batch <FILE>: JSON file describing batch replacements--create-backup: Create backup before patching--operation-id <ID>: Custom operation ID for auditing--metadata <JSON>: Optional metadata attachment
splice apply-files
Apply a pattern replacement to multiple files.
Required Arguments:
--glob <GLOB>: Glob pattern for matching files (e.g.,tests/**/*.rs,src/**/*.py)--find <PATTERN>: Text pattern to find--replace <REPLACEMENT>: Replacement text
Optional Arguments:
--language <LANG>: Language override (auto-detected from extension by default)--no-validate: Skip validation gates--create-backup: Create backup before applying--operation-id <ID>: Custom operation ID for auditing--metadata <JSON>: Optional metadata attachment
splice undo
Undo a previous operation by restoring from a backup manifest.
splice plan
Execute a multi-step refactoring plan.
splice query
Query symbols by labels using Magellan integration.
Optional Arguments:
--db <FILE>: Path to the Magellan database (required)--label <LABEL>: Label to query (can be specified multiple times for AND semantics)--list: List all available labels with counts--count: Count entities with specified label(s)--show-code: Show source code for each result
Available labels:
- Language labels:
rust,python,javascript,typescript,c,cpp,java - Symbol kind labels:
fn,method,struct,class,enum,interface,module,union,namespace,typealias
splice get
Get code chunks from the database using Magellan integration.
Required Arguments:
--db <FILE>: Path to the Magellan database--file <PATH>: File path--start <N>: Start byte offset--end <N>: End byte offset
splice log
Query the execution audit trail from .splice/operations.db.
# Show recent operations
# Filter by operation type
# Filter by status
# Filter by date range
# Query specific execution
# Show statistics
# JSON output for programmatic access
Optional Arguments:
--operation-type <TYPE>: Filter by operation type (patch, delete, plan, apply-files)--status <STATUS>: Filter by status (success, failure, partial)--after <DATE>: Show operations after this date (ISO8601 format)--before <DATE>: Show operations before this date (ISO8601 format)--execution-id <ID>: Query specific execution by ID--format <FORMAT>: Output format (table, json) - default: table--stats: Show statistics summary instead of individual operations--limit <N>: Limit number of results (default: 50)
Output Fields:
- execution_id: Unique identifier for each operation
- operation_type: Type of operation performed
- status: Success/failure status
- timestamp: ISO8601 timestamp when operation started
- duration_ms: Operation duration in milliseconds
- command_line: Full command-line invocation
- workspace: Working directory path
- affected_files: Number of files modified
Documentation
- manual.md - Complete user manual
- CHANGELOG.md - Version history
- docs/DIAGNOSTICS_HUMAN_LLM.md - CLI diagnostics contract for humans and LLMs, including rust-analyzer and multi-language validation output
Requirements
- Rust 1.70+ (for building)
- Language-specific compilers (for validation):
- Rust:
cargo - Python:
python - C/C++:
gcc/g++ - Java:
javac - JavaScript:
node - TypeScript:
tsc
- Rust:
Architecture
- src/cli/ - CLI argument parsing
- src/ingest/ - Symbol parsing for 7 languages
- src/graph/ - SQLiteGraph integration with Native V2 backend
- src/resolve/ - Symbol resolution and reference finding
- src/patch/ - Span-safe replacement + validation + batch operations + pattern replace + backup
- src/validate/ - Tree-sitter + compiler validation gates with checksum verification
- src/plan/ - JSON plan orchestration with deterministic ordering
- src/execution/ - Execution logging audit trail with operations.db
- src/output/ - Structured JSON output with v2.0 schema
- src/checksum/ - SHA-256 checksum computation for verification hooks
Validation Gates
Every operation passes:
- UTF-8 boundary validation
- Pre-operation checksum computation (SHA-256)
- Tree-sitter reparse (syntax check)
- Language-specific compiler check (cargo check, python -m py_compile, etc.)
- Post-operation checksum verification
- Atomic rollback on any failure
All operations are logged to .splice/operations.db with timestamps, durations, and command-line capture for complete auditability.
Testing
Test Coverage: 215+ tests passing, including:
- 171 unit tests for core functionality
- 26 Magellan integration tests for all 7 languages
- 18 cross-language compatibility tests
- End-to-end refactoring workflow tests
Feedback
If you use this tool and find a bug or miss a feature that would be useful, drop a line. It's appreciated.
License
GPL-3.0-or-later
Disclaimer
This software modifies source code. Always commit your changes before running Splice.