名称: 编写HashQL诊断 描述: 使用hashql-diagnostics crate编写HashQL诊断模式。当创建错误消息、警告、标签、消息、严重级别、补丁、建议或提高HashQL代码中诊断质量时使用。 许可证: AGPL-3.0 元数据: 触发器: 类型: 领域 强制执行: 建议 优先级: 高 关键词: - 诊断 - hashql-diagnostics - 标签 - 消息 - 严重性 - 补丁 - 建议 意图模式: - “\b(创建|编写|添加|改进)\b.?\b诊断\b" - "\b(错误|警告)\b.?\b消息\b”
HashQL诊断写作
提供使用hashql-diagnostics crate编写高质量诊断的HASH特定模式,确保消息有帮助、可操作并遵循一致的风格约定。
核心原则
诊断应该有帮助,不仅仅是正确:
✅ 做:
- 以消息开头小写
- 使用反引号表示代码元素:
预期`bool`,但找到`String` - 使消息可操作且具体
- 使用“无效”而非“非法”
- 保持帮助消息为祈使句:“添加类型注释”
❌ 不做:
- 以标点结尾(除非是多句)
- 使用道歉语言(“抱歉”、“不幸”)
- 写模糊消息(“出了点问题”)
- 大写消息开头(除非是代码标识符)
快速参考
创建诊断
use hashql_diagnostics::{Diagnostic, Label, Message, Severity};
let mut diagnostic = Diagnostic::new(category, Severity::Error)
.primary(Label::new(span, "预期`bool`,但找到`String`"));
diagnostic.add_label(Label::new(other_span, "因此预期"));
diagnostic.add_message(Message::help("尝试使用比较"));
严重性级别
| 严重性 | 何时使用 |
|---|---|
Bug |
内部编译器错误 |
Fatal |
不可恢复错误 |
Error |
必须修复以编译 |
Warning |
可疑代码需审查 |
Note |
信息性上下文 |
消息风格
// ✅ 好
"在此作用域中找不到变量`count`"
"表达式后预期`;`"
// ❌ 坏
"错误:未找到变量。" // 大写,标点
"抱歉,有类型不匹配" // 道歉
添加建议
use hashql_diagnostics::{Message, Patch, Suggestions};
let suggestion = Suggestions::patch(Patch::new(span, "corrected_code"));
diagnostic.add_message(
Message::help("修复拼写错误").with_suggestions(suggestion)
);
参考文献
- 全面指南 - 完整消息风格指南、跨区选择、类别设计、标签使用、帮助与注释、建议质量、审查清单
- HashQL测试技能 - 用于编译测试覆盖