5 releases
0.2.6 | Oct 22, 2021 |
---|---|
0.2.3 | Aug 4, 2021 |
0.2.1 | May 21, 2021 |
0.2.0 | May 21, 2021 |
0.1.1 | May 13, 2021 |
#990 in Text processing
90KB
2K
SLoC
Guarding
Guarding is a guardians for code, architecture, layered. Using git hooks and DSL for design guard rules.
Inspired by ArchUnit
Usage
use CLI
- install
cargo install guarding
- create
guarding.guarding
file
package(".")::file.len should < 200;
package(".")::file.len should > 50;
- run
guarding .
use API
guarding_adapter
, FFI adapter, provide Guarding api,guarding_core
, core guarding model,guarding_ident
, identify different language: Java, JavaScript, Rustguarding_parser
parsing Guarding DSL
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
Guarding - Class or Struct function-name
for packages:
class(implementation "BaseParser")::name should endsWith "Parser";
class("java.util.Map") only accessed(["com.phodal.pepper.refactor.staticclass"]);
class(implementation "BaseParser")::name should not contains "Lexer";
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("");
Todos
todo:
- template
-
include(standard.guarding)
syntax
-
- filter
- filter by package identifier
- filter by regex
- filter by implementation
- filter by extends
- filter by trait
- limit impl naming
- limit files num
- limit package's sub-package size (for example, Clean Architecture).
- assert
- comparison for size / len
- string comparison
- contains
- startsWith
- endsWith
- package ops
- accessed
- resideIn
- dependBy
- languages
- Java
- JavaScript (on Going)
- TypeScript
- Rust (on Going)
- class & functions
- imports
- basic import
- mods import restructure
- package convert
License
This code is distributed under the MIT license. See LICENSE
in this directory.
Dependencies
~18–27MB
~565K SLoC