Skip to main content

writing-hashql-diagnostics

HashQL diagnostic writing patterns using hashql-diagnostics crate. Use when creating error messages, warnings, Labels, Messages, Severity levels, Patches, Suggestions, or improving diagnostic quality in HashQL code.

Source facts

Repository
hashintel/hash
Last source activity
September 1, 2026 at 07:54
Detected SKILL.md language
English
Stars
1,666
Forks
123

Install options

The review-first prompt is selected by default. You can switch to a direct command or download a local copy.

Review the source files

Read SKILL.md and any companion files shown by SkillsMP before deciding whether to install.

File Explorer
2 files

Showing SKILL.md

SKILL.md
Source instructions · Read-only preview
name
writing-hashql-diagnostics
description
HashQL diagnostic writing patterns using hashql-diagnostics crate. Use when creating error messages, warnings, Labels, Messages, Severity levels, Patches, Suggestions, or improving diagnostic quality in HashQL code.
license
AGPL-3.0
metadata
{"triggers":{"type":"domain","enforcement":"suggest","priority":"high","keywords":["diagnostic","hashql-diagnostics","Label","Message","Severity","Patch","Suggestions"],"intent-patterns":["\\b(create|write|add|improve)\\b.*?\\bdiagnostic\\b","\\b(error|warning)\\b.*?\\bmessage\\b"]}}
# HashQL Diagnostic Writing Provides HASH-specific patterns for writing high-quality diagnostics using the `hashql-diagnostics` crate, ensuring messages are helpful, actionable, and follow consistent style conventions. ## Core Principles **Diagnostics should be helpful, not just correct:** ✅ **DO:** - Start messages with lowercase - Use backticks for code elements: `` expected `bool`, found `String` `` - Make messages actionable and specific - Use "invalid" not "illegal" - Keep help messages as imperatives: "add type annotations" ❌ **DON'T:** - End messages with punctuation (unless multi-sentence) - Use apologetic language ("sorry", "unfortunately") - Write vague messages ("something went wrong") - Capitalize message starts (unless code identifier) ## Quick Reference ### Creating a Diagnostic ```rust use hashql_diagnostics::{Diagnostic, Label, Message, Severity}; let mut diagnostic = Diagnostic::new(category, Severity::Error) .primary(Label::new(span, "expected `bool`, found `String`")); diagnostic.add_label(Label::new(other_span, "expected because of this")); diagnostic.add_message(Message::help("try using a comparison")); ``` ### Severity Levels | Severity | When to Use | | --------- | ------------------------- | | `Bug` | Internal compiler error | | `Fatal` | Unrecoverable error | | `Error` | Must be fixed to compile | | `Warning` | Suspicious code to review | | `Note` | Informational context | ### Message Style ```rust // ✅ Good "cannot find variable `count` in this scope" "expected `;` after expression" // ❌ Bad "Error: Variable not found." // capitalized, punctuation "Sorry, there's a type mismatch" // apologetic ``` ### Adding Suggestions ```rust use hashql_diagnostics::{Message, Patch, Suggestions}; let suggestion = Suggestions::patch(Patch::new(span, "corrected_code")); diagnostic.add_message( Message::help("fix the typo").with_suggestions(suggestion) ); ``` ## References - [Comprehensive guidelines](references/guidelines.md) - Complete message style guide, span selection, category design, label usage, help vs note, suggestion quality, review checklist - [HashQL testing skill](../testing-hashql/SKILL.md) - For compiletest coverage
View on GitHub