chadtmiller.com/knotless

Git hosted in your atproto account, on any stock PDS, fast enough for agents.

git clone knotless://chadtmiller.com/knotless

needs the knotless git helper. set it up

Highlight Svelte; match lockfiles and dotfiles by name

Open chadtmiller.com wants to merge into main from chadtmiller.com/knotless:web/svelte-highlighting 0 comments
chadtmiller.com opened on Oct 22, 2026

Svelte. tree-sitter-svelte-ng 1.0.2, with HTML's highlights under its own (its query says ; inherits: html). The bundled injections lean on Neovim's inherits and #any-of?, so this carries its own: a script's lang attribute names its language (ts resolves to typescript), a script without one is JavaScript, {expressions} are JavaScript, styles are CSS. tag.delimiter maps to keyword so {#if, {:else} and {/if} read as one word. Checked against RepoHeader.svelte: TS types come through, no overlapping ranges.

Lockfiles. Languages now match whole file names as well as extensions, and .lock no longer means TOML. Cargo.lock, uv.lock, poetry.lock and pdm.lock are TOML; flake.lock, deno.lock, composer.lock and Pipfile.lock are JSON; yarn.lock is plain.

Dotfiles. .bashrc, .bash_profile, .bash_aliases, .bash_logout, .profile, .zshrc, .zshenv, .zprofile, .envrc are bash. jsonc and webmanifest are JSON.

JSX was already highlighted (.jsx uses the JavaScript config with its JSX query); it's now in every_language_parses too.

Before merging: Cargo.lock. The commit doesn't touch it, and the Dockerfile builds with --locked. cargo build -p knotless-serve adds this:

@@ knotless-serve dependencies
  "tree-sitter-rust",
+ "tree-sitter-svelte-ng",
  "tree-sitter-toml-ng",
@@
+[[package]]
+name = "tree-sitter-svelte-ng"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ef0a71f9cf5e94373cc86c64893630c8a29bb25d3390a248268d08af2165fa37"
+dependencies = [
+ "cc",
+ "tree-sitter-language",
+]
+
 [[package]]
 name = "tree-sitter-toml-ng"

Tested in a standalone crate with the same grammar versions: cargo test (7 passing, including new svelte and lockfiles_by_name), cargo clippy --all-targets and cargo fmt --check clean. Not run against the full workspace.