Guarding
Guarding is a guardians for code, architecture, layered. Using git hooks and DSL for design guard rules.
todo:
- guarding DSL design
- setup projects
- parser
- tree-sitter
- parser
- interface / trait supports
- languages
- Java
- JavaScript
- TypeScript
- Rust
Others:
- ArchUnit code generator?
- git hooks for staged files (low-priority, some-languages has custom git hooks)
Usage
- install
cargo install guarding
- create
guarding.guarding
file
package(".")::file.len should < 200;
package(".")::file.len should > 50;
- run
guarding .
Development
workflow:
- parsing guarding rules
- parsing source code to models
- capture rule with models
DSL capture logic:
- filter models from
rule_level
withrule_scope
- run expression
- run assert
Queries Samples: https://github.com/nvim-treesitter/nvim-treesitter/tree/master/queries
Document
Guarding - Class or Struct function-name
for Java, JavaScript
# 类::名 包含 "Controller";
# 中文分词:("..myapp..") 类名称中包含 "Controller"
class("..myapp..")::function.name should contains("Model");
# or
class("..myapp..")::function.name contains("");
for Rust and Golang
struct("..myapp..")::function.name should contains("Model");
# or
struct("..myapp..")::function.name contains("");
License
This code is distributed under the MIT license. See LICENSE
in this directory.