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

发布时间:2026/9/15 10:47:19

如何为 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),仅供参考
延伸阅读

更多相关文章

2026/9/15 10:47:19

DINOv3零样本分割:不训练也能出像素级语义分割图

DINOv3零样本分割:不训练也能出像素级语义分割图 【免费下载链接】dinov3 Reference PyTorch implementation and models for DINOv3 项目地址: https://gitcode.com/GitHub_Trending/di/dinov3 DINOv3 的 dino.txt 多模态模型支持零样本分割:你只…

2026/9/15 10:42:18

C语言+EasyX实战:开发国际象棋游戏,从规则建模到交互界面

第一次用C语言写一个带图形界面的国际象棋,是在某学期的课程设计上。当时班里多数人选了贪吃蛇、扫雷,我想搞个规则更复杂点的东西——国际象棋。理由很实在:棋子种类多,走法规则差异大,能逼着自己把数组、结构体、函数…

2026/9/15 10:42:18

React Native回归原生?跨端与原生开发的技术选型与性能权衡

一觉醒来,技术群里又炸了。倒反天罡,当年那么多团队削尖脑袋往 React Native 里钻,现在 Shopify 却带头往回跑,宣布要回归原生开发。先别急着喊“RN 药丸”。作为一个从 React Native 0.4x 时代就开始折腾的老玩家,我太…

2026/9/15 10:52:19

PHP引擎一共有哪些?

PHP引擎PHP引擎主要是指解析和执行PHP代码的软件。最常见的PHP引擎就是官方的PHP解释器,但随着技术的发展,也出现了一些其他的PHP引擎或加速器,比如:Zend引擎:这是PHP的官方引擎,从PHP 4开始就是默认的引擎…

2026/9/15 10:52:19

MySQL引擎一共有哪些?

MySQL引擎MySQL是一个流行的数据库管理系统,它支持多种存储引擎。存储引擎就是数据库用来处理和存储数据的方式。MySQL中常见的存储引擎有以下几种:InnoDB:这是MySQL的默认存储引擎。它支持事务处理,也就是说,如果你在…

2026/9/15 10:47:19

Vue+WebRTC多人视频会议:信令服务与前端封装实战

简介:面向有一定前端基础、希望快速上手WebRTC多人实时互动的开发者,这份Vue Demo源码以多人互动为场景,围绕WebRTC多对多连接、Socket.IO信令交互和Vue组件化开发,覆盖了从用户加入房间、交换SDP与ICE候选,到建立P2P音…

2026/9/15 4:54:30

拯救者Y7000黑屏故障排查与维修实战指南

1. 项目概述:一台黑屏的拯救者Y7000,到底卡在哪一步? 联想拯救者Y7000系列笔记本,从2018年第一代搭载i5-8300H开始,到后来的i7-9750H、i7-10750H、i5-11400H,再到2023年款的R7-7840HS,它始终是学…

2026/9/15 0:01:16

AI英语单词APP开发:自适应学习算法与移动端优化实践

1. 项目概述 作为一名在移动应用开发领域摸爬滚打多年的老手,我最近完成了一个AI英语单词APP的开发项目。这个项目将传统单词记忆方法与现代AI技术相结合,打造了一款能够智能适应不同用户学习习惯的英语学习工具。 市面上大多数单词APP都存在一个通病&a…

2026/9/15 0:01:16

Flutter与OpenHarmony结合开发手语学习APP实战

1. 项目背景与核心价值作为一名同时接触过Flutter和OpenHarmony的开发者,最近我完成了一个基于Flutter for OpenHarmony的手语学习APP实战项目。这个项目最大的特点在于实现了跨平台框架与国产操作系统深度结合的创新实践——用Flutter开发的应用能完美运行在OpenHa…

2026/9/15 0:01:16

六个月成为机器人工程师:从ROS2到SLAM的实战路径

1. 六个月的紧迫感从哪来:先搞清楚你要成为哪种机器人工程师说实话,六个月的期限并不是一个宽松的时间线。市面上任何一本正经的机器人学教材都超过五百页,ROS2的官方文档可以翻到你怀疑人生,再加上ABB、KUKA这些工业机器人厂家动…

2026/9/14 11:59:31

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/14 13:53:59

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/14 11:22:57

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码