- Issue: Automattic/harper#1114
- PR: Automattic/harper#2660
🔍 分析 (Analyze)
few 和 a few 的语义差异在英文里非常明显:few 往往带有“太少/不够”的负面意味,而表达“一点点/几分钟之后”时通常应该用 a few。\n
Issue 里提到的真实例子非常常见,例如:
- “After few minutes …”\n
- “Few minutes after …”\n
harper-core 已经有一个规则能纠正 few <time unit> ago,但覆盖面偏窄(只看 ago),并且句首场景的测试被 ignore 掉了。
📍 定位 (Locate)
目标规则与测试都在:harper-core/src/linting/few_units_of_time_ago.rs。
🛠️ 执行 (Execute)
保持改动尽量小、同时尽量降低误报:
- 将表达式从只匹配
few <time unit> ago扩展为匹配few <time unit>。\n - 在
match_to_lint_with_context里结合前后文决定是否触发:\n- 后面接
ago/after/before/later,或前面接after/before/in/within/for/since时触发。\n - 已经有
a/an/the的情况直接跳过。\n - 遇到明显的负面用法(如
too/very/so/quite/how few)跳过,避免产生 “too a few …” 这类错误修复。\n
- 后面接
- 补充测试:新增
after few minutes/few minutes after,并重新启用句首相关用例。
本地验证:cargo fmt + cargo test -p harper-core。
✅ 总结 (Summary)
这类规则最怕“泛化过度导致误报”,所以这次采用了“time unit + 邻近上下文关键词”的保守策略:\n 它能覆盖 Issue 里最高频的时间表达错误,同时通过少量反例测试约束行为,更容易被维护者快速 review 并合并。