writing-hashql-diagnostics

hashintel's avatarfrom hashintel

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.

⭐1.4kstars🔀110forks📁View on GitHub🕐Updated Jan 10, 2026

When & Why to Use This Skill

This Claude skill streamlines the process of writing high-quality, standardized diagnostics for HashQL using the hashql-diagnostics Rust crate. It empowers developers to create actionable error messages, warnings, and automated code suggestions that follow professional compiler design patterns, significantly improving the debugging experience and maintainability of HashQL-related projects.

Use Cases

  • Standardizing error message styles across HashQL projects to ensure they are lowercase, non-punctuated, and actionable.
  • Implementing complex diagnostic structures including primary labels, secondary context labels, and helpful notes using Rust patterns.
  • Generating automated code patches and suggestions that allow users to instantly fix common syntax or type errors.
  • Mapping internal compiler errors to appropriate severity levels such as Bug, Fatal, Error, or Warning for better incident reporting.
  • Improving the clarity of technical diagnostics by replacing vague or apologetic language with specific, imperative instructions.
namewriting-hashql-diagnostics
descriptionHashQL 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.
licenseAGPL-3.0
typedomain
enforcementsuggest
priorityhigh

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

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

// ✅ 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

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