<feed xmlns='http://www.w3.org/2005/Atom'>
<title>dotemacs/modules/prog-json.el, branch main</title>
<subtitle>My Emacs configuration
</subtitle>
<id>https://git.cjennings.net/dotemacs/atom?h=main</id>
<link rel='self' href='https://git.cjennings.net/dotemacs/atom?h=main'/>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/dotemacs/'/>
<updated>2026-05-25T23:05:55+00:00</updated>
<entry>
<title>refactor(prog): run JSON/YAML/webdev formatters via argv, not a shell</title>
<updated>2026-05-25T23:05:55+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-05-25T23:05:55+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/dotemacs/commit/?id=1ca28f229eb360498b93bd048ef745f32f7761e1'/>
<id>urn:sha1:1ca28f229eb360498b93bd048ef745f32f7761e1</id>
<content type='text'>
cj/json-format-buffer, cj/yaml-format-buffer, and cj/webdev-format-buffer ran their formatters through shell-command-on-region, which goes via a shell. I moved each to call-process-region with an explicit program and argv list, so a filename or buffer content can't be word-split or read as shell syntax. The webdev path dropped its shell-quote-argument dance once the filename became a plain argv element.

Point preservation is unchanged. One deliberate improvement, and it's tested: shell-command-on-region with replace replaced the buffer with the formatter's error text on a non-zero exit. The new per-formatter helper captures output to a temp buffer, checks the exit code, replaces only on success, and otherwise raises a user-error carrying stderr — so a failed format leaves the buffer alone.

I kept a small format-region helper in each of the three modules rather than one shared helper. They have no common module to live in short of system-lib, and coupling three unrelated domain modules through it wasn't worth saving sixteen lines.
</content>
</entry>
<entry>
<title>docs(load-graph): classify programming modules</title>
<updated>2026-05-24T21:32:07+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-05-24T21:32:07+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/dotemacs/commit/?id=219018602f817bffedbb3d157fd9267d21f97098'/>
<id>urn:sha1:219018602f817bffedbb3d157fd9267d21f97098</id>
<content type='text'>
Sixth classification batch: prog-general plus the language modules — prog-c, prog-go, prog-lisp, prog-python, prog-webdev, prog-json, prog-yaml, prog-shell, prog-training. I annotated each header, added a Batch 6 table to the inventory, and extended the validation allowlist. 52 of 102 modules are now classified.

prog-general owns the shared defaults and tree-sitter/LSP policy and stays eager. The language modules are eager only by init order and should load by major mode, so they're tagged Phase 6 deferral candidates. prog-shell's after-save executable hook is the one side effect worth scoping. No new hidden dependencies.
</content>
</entry>
<entry>
<title>feat(json,yaml): add tree-sitter modes, formatting, and jq integration</title>
<updated>2026-03-03T01:46:38+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-03-03T01:46:38+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/dotemacs/commit/?id=fbaac182eed439326ac7a4f179d503541e93f8f3'/>
<id>urn:sha1:fbaac182eed439326ac7a4f179d503541e93f8f3</id>
<content type='text'>
New prog-json module: json-ts-mode with jq formatting (C-; f) and
jq-interactively (C-c C-q). Upgraded prog-yaml to yaml-ts-mode with
prettier formatting. Both use treesit-auto for grammar management.
Includes 18 new tests (10 JSON, 8 YAML), 185/185 passing.
</content>
</entry>
</feed>
