Skip to content

dddlint

Polyglot ubiquitous language linter for codebases and coding agents.

dddlint reads class, function, method, and type names across 306 languages and enforces them against a domain vocabulary — banned terms, non-canonical synonyms, and one concept spelled several ways.

It works with any language tree-sitter recognises, without per-language queries. It slots into pre-commit hooks, CI pipelines, and coding-agent loops via a non-zero exit code on findings, and ships an LSP server for inline editor diagnostics with rename code actions.

dddlint LSP diagnostics inline in an editor

The idea in one example

A team agrees order is the canonical term. Someone commits a process_transaction method. dddlint flags it — in CI, in a commit hook, or right in the editor — and suggests the rename to process_order.

dddlint.yaml
synonyms:
  - canonical: order
    aliases: [purchase, transaction]
forbidden: [util, helper, manager]
dddlint lint src/

Where to go next

This documentation follows the Diátaxis framework.

  • :lucide-graduation-cap: Tutorial

    Learning-oriented. Lint your first project from scratch.

  • :lucide-wrench: How-to guides

    Task-oriented. Wire dddlint into CI, pre-commit, and your editor.

  • :lucide-book: Reference

    Information-oriented. Every CLI command, config key, and rule.

  • :lucide-lightbulb: Explanation

    Understanding-oriented. Why a language linter, and how it decides.