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

发布时间:2026/11/3 5:18:25

如何为 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/10/31 12:43:45

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

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

2026/10/25 14:01:51

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

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

2026/10/28 18:54:41

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

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

2026/11/3 5:15:02

WebGPU着色器工程化:WGSL组件库与前端框架深度集成指南

1. 这不是又一个“Shader入门教程”,而是一套能直接塞进你前端项目的视觉效果组件库你有没有遇到过这样的场景:在React项目里想加个毛玻璃背景,翻了三页文档发现WebGL上下文初始化要手动管理;Vue里想实现动态水波纹,结…

2026/11/3 5:15:02

OpenClaw自动化测试优化实践与常见问题解决

1. 为什么你的OpenClaw做不好自动化测试最近在技术社区看到不少同行抱怨OpenClaw框架的自动化测试效果不理想。作为一个在测试领域摸爬滚打多年的老手,我想分享几个关键问题点。OpenClaw本身是个优秀的测试框架,但很多团队在使用时都踩了同样的坑。2. 环…

2026/11/3 5:15:02

LabVIEW Modbus RS485主从通信:帧格式、CRC校验与轮询实战

简介:《基于LabVIEW的Modbus串口通讯协议的实现》是一份面向工业自动化、测控系统开发与协议调试人员的PDF技术文档,适合已具备LabVIEW基础、希望打通上位机与PLC串口通信的工程师,以及高校自动化、机电专业学习者参考,重点解决多…

2026/11/3 5:15:02

轻量级护理服务接口服务器设计与优化实践

1. 项目概述:构建轻量级护理服务接口服务器在医疗健康信息化领域,护理数据的实时交互一直是临床工作的关键需求。最近我完成了一个名为"和移护理"的接口服务端项目,这个轻量级解决方案专门为护理移动终端设计,实现了护理…

2026/11/3 5:15:02

LabVIEW Modbus串口通讯:RTU/ASCII帧、校验与超时排查

简介:《基于LabVIEW的Modbus串口通讯协议的实现》是一份面向工业自动化、测控系统开发者和相关专业学生的技术文档,聚焦以PC机为上位机、LabVIEW 7.11为开发平台的主从式串口通信实现。内容围绕Modbus的ASCII与RTU两种传输模式展开,涉及消息帧…

2026/11/3 5:10:02

三维刚体配准C语言实现:Kabsch、SVD与ICP工程实践

1. 先把问题拆开:一台设备问你"工件在哪"1.1 三维刚体配准到底在算什么三维刚体配准要回答的问题其实很朴素:同一个工件,在模型坐标系里有一组点,在现场测量坐标系里也有一组点,怎么找出一个旋转加平移&…

2026/11/2 6:08:01

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/2 6:39:12

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/3 1:04:48

STM32实战:基于MAX14431数字隔离器的SPI隔离通信方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/3 1:04:48

工业SPI隔离通信设计:MAX14431BAEE+与STM32L4A6RG实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/3 1:04:48

STM32+NRF24L01无线抢答器:硬件设计、通信协议与低功耗实现

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/2 6:08:01

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/2 6:39:12

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

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

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

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