5 个版本
0.2.6 | 2021 年 10 月 22 日 |
---|---|
0.2.3 | 2021 年 8 月 4 日 |
0.2.1 | 2021 年 5 月 21 日 |
0.2.0 | 2021 年 5 月 21 日 |
0.1.1 | 2021 年 5 月 13 日 |
1038 在 文本处理
90KB
2K SLoC
Guarding
Guarding 是代码、架构、分层的守护者。使用 git hooks 和 DSL 设计守护规则。
灵感来源于 ArchUnit
用法
使用 CLI
- 安装
cargo install guarding
- 创建
guarding.guarding
文件
package(".")::file.len should < 200;
package(".")::file.len should > 50;
- 运行
guarding .
使用 API
guarding_adapter
,FFI 适配器,提供 Guarding API,guarding_core
,核心守护模型,guarding_ident
,识别不同语言:Java、JavaScript、Rust,guarding_parser
解析 Guarding DSL
开发
工作流程
- 解析守护规则
- 将源代码解析为模型
- 使用模型捕获规则
DSL 捕获逻辑
- 使用
rule_level
和rule_scope
过滤模型 - 运行表达式
- 运行断言
查询示例: https://github.com/nvim-treesitter/nvim-treesitter/tree/master/queries
Guarding - 类或结构体函数名
针对包
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";
针对 Java、JavaScript
# 类::名 包含 "Controller";
# 中文分词:("..myapp..") 类名称中包含 "Controller"
class("..myapp..")::function.name should contains("Model");
# or
class("..myapp..")::function.name contains("");
针对 Rust 和 Golang
struct("..myapp..")::function.name should contains("Model");
# or
struct("..myapp..")::function.name contains("");
待办事项
待办事项
- 模板
-
include(standard.guarding)
语法
-
- 过滤
- 按包标识符过滤
- 按正则表达式过滤
- 按实现过滤
- 按扩展过滤
- 按特质过滤
- 限制实现命名
- 限制文件数量
- 限制包的子包大小(例如,Clean Architecture)。
- 断言
- 大小/长度比较
- 字符串比较
- 包含
- 以...开始
- 以...结束
- 包操作
- 访问
- 位于
- 依赖
- 语言
- Java
- JavaScript(进行中)
- TypeScript
- Rust(进行中)
- 类 & 函数
- 导入
- 基本导入
- mod导入重构
- 包转换
许可证
本代码根据MIT许可证分发。请参阅此目录中的LICENSE
。
依赖关系
约18-28MB
约569K SLoC