injm
A CLI tool that injects content into marked regions in source files.
Table of Contents
Installation
Cargo
Nix
Download Binary
Download the latest binary for your platform from GitHub Releases.
Usage
Mark a region in your source file with injm begin and injm end comments:
dest.rs
Then pipe content into injm:
|
Result:
dest.rs
Running injm again will replace the content between the markers:
|
Inject into a Specific Region
Give a region an output ID with >id, then target it with --id:
dest.rs
Inject into a specific region:
|
Inject into multiple regions at once:
|
If --id is not specified, only regions without an ID are injected; regions with a >id are left untouched.
Sync Between Files
Instead of piping from stdin, copy content between files with --input.
Mark the source region with <id (the content to read) and the destination
region with >id (where it goes):
src.rs
dest.rs
Then sync:
dest.rs becomes:
A region may read from several sources by listing multiple <id markers.
If a >id in the output has no matching <id in the input, injm reports
the missing ID and exits with an error.
Dry Run
Preview the result without writing to the file:
|
Supported Languages
injm uses tree-sitter to parse source files, so markers are detected from actual comment nodes — not from string literals or other non-comment content.
Supports any language recognized by tree-sitter-language-pack, including:
- Rust, C, C++
- Python, Ruby
- JavaScript, TypeScript
- Go, Java
- And 300+ more
Roadmap
See ROADMAP.md.
License
MIT
Acknowledgement
- clap-rs/clap: A full featured, fast Command Line Argument Parser for Rust
- xberg-io/tree-sitter-language-pack: Comprehensive tree-sitter grammar compilation with polyglot bindings — Rust, Python, Node.js, Go, Java, Ruby, Elixir, PHP, C#, WASM, Dart, Kotlin-Android, Swift, Zig, and CLI. 306+ languages.