12 releases
Uses new Rust 2024
new 0.1.11 | Apr 14, 2025 |
---|---|
0.1.10 | Apr 14, 2025 |
#84 in Text processing
1,046 downloads per month
92KB
2.5K
SLoC
blockwatch
Linter that tracks changes between dependent blocks of code.
How
Declare the blocks in the comments of the source file.
Validate by running git diff --patch | blockwatch
:
Example
Whenever some block is modified then all its affected blocks (possibly in different files) should also be updated.
main.rs
:
// <block affects="README.md:supported-languages">
const SUPPORTED_LANGUAGES = ["rust", "java", "python"];
// </block>
README.md
:
## Supported languages
[//]: # (<block name="supported-languages">)
- Java
- Rust
[//]: # (</block>)
If the block in main.rs
is modified (e.g. added python
to the list) then the following command will produce an
error:
git diff --patch | blockwatch
Run as a GitHub Action
Add the following to your workflow .yml
file:
jobs:
blockwatch:
runs-on: ubuntu-latest
steps:
- uses: mennanov/blockwatch-action@v1
Install
From source
cargo install blockwatch
Prebuilt binary
See https://github.com/mennanov/blockwatch/releases
Supported languages
- C/C++
- Golang
- Java
- JavaScript
- Markdown
- Python
- Rust
- TOML
- TypeScript (+TSX)
- XML
- YAML
More examples
Blocks may reference blocks in the same file
// <block name="foo" affects=":bar, :buzz">
fn main() {
println!("Blocks can affect multiple other blocks declared in the same file");
println!("Just omit the file name in the 'affects' attribute");
}
// </block>
// <block name="bar">
// Some other piece of code.
// </block>
// <block name="buzz">
// One more.
// </block>
``
Blocks may reference each other
// <block name="foo" affects=":bar">
fn foo() {
println!("Hello");
}
// </block>
// <block name="bar" affects=":foo">
fn bar() {
println!("Hi!");
}
// </block>
Blocks can be nested
// <block name="entire-file">
fn foo() {
println!("Hello");
}
// <block name="small-block">
fn bar() {
println!("Hi!");
}
// </block>
// </block>
Known limitations
- deleted blocks are ignored
- blocks declared in unsupported languages are ignored
- multiple blocks can't be declared in a single line:
<block><block>will not work</block/</block>
Contributing
Adding a language support
Follow the pull request for Python as an example.
Run tests
cargo test
Dependencies
~75MB
~2M SLoC