blockwatch-0.1.14 is not a library.
Visit the last successful build:
blockwatch-0.2.25
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 = ;
// </block>
README.md:
- -
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
Run as a pre-commit hook
Ensure blockwatch is installed and available in your PATH.
Using pre-commit framework
Add the following to your .pre-commit-config.yaml:
repos:
- repo: local
hooks:
- id: blockwatch
name: blockwatch
entry: bash -c 'git diff --cached --patch --unified=0 | blockwatch'
language: system
stages:
pass_filenames: false
Install
From source
cargo install blockwatch
Prebuilt binary
See https://github.com/mennanov/blockwatch/releases
Supported languages
- C/C++ (
.c,.cpp,.cc,.h) - C# (
.cs) - Golang (
.go) - HTML (
.html,.htm) - Java (
.java) - JavaScript (
.js,.jsx) - Markdown (
.md,.markdown) - PHP (
.php,.phtml) - Python (
.py,.pyi) - Rust (
.rs) - SQL (
.sql) - TOML (
.toml) - TypeScript (+TSX) (
.ts,.d.ts,.tsx) - XML (
.xml) - YAML (
.yaml,.yml)
Custom file extensions
Map unsupported file extensions to supported ones:
git diff --patch | blockwatch -E xhtml=xml -E unsupported=supported
More examples
Blocks may reference blocks in the same file
// <block name="foo" affects=":bar, :buzz">
// </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">
// </block>
// <block name="bar" affects=":foo">
// </block>
Blocks can be nested
// <block name="entire-file">
// <block name="small-block">
// </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