Rio
adr/0046-highlighters-by-filename.mdRaw Markdown · GitHub ↗

ADR-0046: Highlighters can register by file name

  • Status: Accepted
  • Date: 2026-08-10
  • Deciders: jka
  • Decision: D46

Context

The highlighter registry (ADR-0032) resolved a language by file extension only. Common build files have no extension (Makefile, Dockerfile), so they could not be highlighted.

Decision

register_filename <lang> {basenames} <scan> maps whole file names to a scanner, beside the extension map. Resolution order is:

  1. exact file name;
  2. extension;
  3. file name with its last suffix removed (so Dockerfile.prod resolves).

An explicit extension always wins over the stripped-name guess, so Makefile.tcl is Tcl. Matching is case-insensitive, and a later registration still wins.

Consequences

  • Makefile, Dockerfile, batch, PowerShell, awk and sed highlighters became useful.
  • A language may register under both keys (Makefile by name and by .mk).
  • Shebang detection (#!/usr/bin/awk) is not implemented and would be the next step.