Parse, evaluate, explain, and audit .gitattributes rules in MoonBit
Dependencies
moon add Xpeng/moongitattrsgit clone https://github.com/pxgt/moongitattrs.git
cd moongitattrs
moon test --target all
moon run cmd/mainlet rules = @moongitattrs.parse(
#|[attr]docs text diff
#|*.md docs eol=lf
#|assets/** binary
#|
)
let result = rules.evaluate("README.md")
println(result.to_text())path: README.md
attributes:
diff: set (.gitattributes:2, *.md)
docs: set (.gitattributes:2, *.md)
eol: lf (.gitattributes:2, *.md)
text: set (.gitattributes:2, *.md)let rules = @moongitattrs.parse_sources([
@moongitattrs.AttributeSource::new(".gitattributes", "* text=auto\n"),
@moongitattrs.AttributeSource::new(
"docs/.gitattributes",
"*.md eol=lf\n",
base_dir="docs",
),
@moongitattrs.AttributeSource::new(
".git/info/attributes",
"README.md export-subst\n",
),
])# 查看某个路径的最终属性
moon run cmd/main -- explain examples/sample.gitattributes README.md
# 输出机器可读 JSON
moon run cmd/main -- explain-json examples/sample.gitattributes README.md
# 检查配置;发现 error 时退出码为 2
moon run cmd/main -- audit examples/sample.gitattributes
# 单独验证一个模式
moon run cmd/main -- match "docs/**" "docs/guide.md"| 代码 | 含义 |
|---|---|
| MGA001–MGA008 | 解析、模式或宏定义诊断 |
| MGA101 | 同一条规则重复设置同一属性 |
| MGA102 | 使用 Git 保留的 builtin_* 名称 |
| MGA103–MGA104 | eol 值或写法可疑 |
| MGA105 | 以不会展开的状态使用属性宏 |
| MGA106 | binary 与 text 在同一规则中冲突 |
moon fmt --check
moon info --target all
moon check --target all --deny-warn --warn-list +73
moon test --target all --deny-warn --warn-list +73
moon run cmd/main
moon package --frozenpub(all) struct MacroDefinition {
name : String
assignments : Array[Assignment]
source : String
line : Int
} derive(Eq, ToJson, Debug)pub(all) struct ResolvedAttribute {
name : String
state : AttributeState
source : String
line : Int
pattern : String
rule_index : Int
} derive(Eq, ToJson, Debug)pub(all) struct Rule {
pattern : String
assignments : Array[Assignment]
source : String
line : Int
base_dir : String
} derive(Eq, ToJson, Debug)pub(all) struct RuleSet {
rules : Array[Rule]
macros : Array[MacroDefinition]
diagnostics : Array[Diagnostic]
} derive(Eq, ToJson, Debug)fn is_valid_attribute_name(name : String) -> Boolfn match_pattern(pattern : String, path : String, base_dir? : String) -> BoolInstall
Download zipParse, evaluate, explain, and audit .gitattributes rules in MoonBit
Dependencies