如何为 Weir 规则编写测试并用 harper-cli 运行?

发布时间:2026/9/15 10:47:26
如何为 Weir 规则编写测试并用 harper-cli 运行? 如何为 Weir 规则编写测试并用 harper-cli 运行【免费下载链接】harperOffline, privacy-first grammar checker. Fast, open-source, Rust-powered项目地址: https://gitcode.com/GitHub_Trending/har/harperHarper 的 Weir 语言允许你用自己的表达式定义语法检查规则而规则文件内可以直接内嵌测试来声明这段输入应被改成什么。这篇文章的目标是写一个带测试的.weir规则文件然后用harper-cli test命令验证规则行为是否符合预期。前提是你能拿到harper-cli可执行文件由于它未发布到包仓库harper-cli/Cargo.toml中publish false但它属于根Cargo.toml声明的 workspace 成员需要从 Harper 仓库源码构建。规则文件的基本结构一个 Weir 规则文件的核心是expr main声明的匹配表达式加上若干let行描述规则行为。以 Weir 语言文档 中的示例为例规则匹配文档中的拼写错误teh并将其纠正为theexpr main teh let message Did you mean the definite article? let description Fixes especially common misspellings of the word the let kind Typo let becomes the四个let行分别声明message触发规则时展示给用户的提示description规则本身的说明kind规则类别文档示例中出现的取值有Typo、Usage、Punctuation、Miscellaneous、Style、Redundancy等becomes建议的替换文本。表达式支持多种写法按需选用即可词与序列gong to或(gong to)顶层表达式默认就是序列多选一[A, B]如expr main [(G Suite), (G Suit), (Google Apps for Work)]过滤器先选出较宽的片段再收窄例如([right, middle, left] $click), ( )定位鼠标动词后的空格UPOS 标签在需要的位置直接写DET、NOUN等 Universal Part-Of-Speech 标签例外在任意表达式前加!排除如DET !NOUN通配符*匹配任意完整 token注释以#开头的行不生效。如果需要跨逗号匹配还要设置作用域let scope Sentence默认是Chunk省略即等价于let scope Chunk。替换大小写策略可用let strategy Exact或MatchCase指定。在规则文件中内嵌测试Weir 支持在规则文件里直接写测试语法是两行字符串的断言来自 Weir 语言文档 的 Adding Tests 一节# 期望 A 被改成 B test A B也可以断言规则不应修改某段文本# 期望规则不改动 A allows A把测试加到前面的teh规则上完整文件如下此文件为文档示例expr main teh let message Did you mean the definite article? let description Fixes especially common misspellings of the word the let kind Typo let becomes the test I adore teh light of the moon. I adore the light of the moon. test I adore TEH LIGHT OF THE MOON. I adore THE LIGHT OF THE MOON.第二条测试覆盖了大写输入的场景——由于词的匹配不区分大小写两条测试应同时通过。仓库中已有数百个带测试的现成规则可以作为写法参照它们位于 weir_rules 目录。例如 ACoupleMore.weirexpr main (a couple of more) let message The correct wording is a couple more, without the of. let description Corrects a couple of more to a couple more. let kind Redundancy let becomes a couple more test There are a couple of more rules that could be added, how can I contribute? There are a couple more rules that could be added, how can I contribute?用 harper-cli 运行测试拿到harper-cli后运行指定 Weir 文件内的全部测试harper-cli test path/to/rule.weirpath/to/rule.weir是你要测试的 Weir 文件路径需替换为你自己的文件位置。如果你手边只有 Harper 仓库源码而没有已安装的二进制可以直接从源码运行harper-cli是根Cargo.tomlworkspace 的成员cargo run -p harper-cli -- test path/to/rule.weir判断测试结果test子命令的输出与退出码由 harper-cli 源码 中的Args::Test分支定义全部测试通过向标准错误输出All tests pass!以状态码 0 结束存在失败测试向标准错误打印失败测试的调试信息{:?}格式并以状态码 1 结束。因此它可以直接放进脚本或 CI 中判断退出码非 0 就说明规则行为与某条test期望不符此时应检查是表达式匹配范围不对还是let becomes给出的替换文本写错了。可选把规则用于实际检查测试通过后如果你想在一份文档上实际应用该规则可以把规则打成一个.weirpack内容为标准 ZIP根目录包含.weir文件和必需字段author、version、description、license的manifest.json然后在 lint 时加载harper-cli lint --weirpack path/to/rules.weirpack README.mdweirpack 的完整格式说明见 Weir 语言文档 的 Weirpacks 一节。此外仓库文档还提到一个浏览器内的 Weir studio站点路由/weir/studio可用于在线实验规则与测试但本地验证仍以上述harper-cli test为准。【免费下载链接】harperOffline, privacy-first grammar checker. Fast, open-source, Rust-powered项目地址: https://gitcode.com/GitHub_Trending/har/harper创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询