<feed xmlns='http://www.w3.org/2005/Atom'>
<title>dotemacs/modules/prog-lsp.el, branch load-graph-classify-end</title>
<subtitle>My Emacs configuration
</subtitle>
<id>https://git.cjennings.net/dotemacs/atom?h=load-graph-classify-end</id>
<link rel='self' href='https://git.cjennings.net/dotemacs/atom?h=load-graph-classify-end'/>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/dotemacs/'/>
<updated>2026-05-16T08:55:49+00:00</updated>
<entry>
<title>refactor(prog): six programming-track hygiene fixes from re-review</title>
<updated>2026-05-16T08:55:49+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-05-16T08:55:49+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/dotemacs/commit/?id=d84aa4374af5e3447445377a836c66cc07d7a223'/>
<id>urn:sha1:d84aa4374af5e3447445377a836c66cc07d7a223</id>
<content type='text'>
- prog-lsp.el: rename `cj/lsp--remove-eldoc-provider' →
  `cj/lsp--remove-eldoc-provider-global' and call it once from the
  lsp-mode `:config' block instead of attaching it per-buffer via
  `lsp-managed-mode-hook'.  The previous per-buffer remove with the
  buffer-local flag raced lsp-mode's own population of the local
  hook; removing the provider from the global default before any LSP
  buffer attaches makes the absence stick.  Two existing tests
  updated to the new contract (remove-from-default + idempotent
  re-run).

- prog-webdev.el / prog-python.el: warn at load time when
  `prettier' or `pyright' is missing on PATH via
  `cj/executable-find-or-warn'.  Both modules now `(require
  'system-lib)' to expose the helper.  Missing dependencies surface
  up front instead of mid-edit at first format/LSP attach.

- keyboard-compat.el: document existing idempotence.  The hook
  install uses a named function so `add-hook' deduplicates, and the
  hook body only calls `define-key' (latest binding wins, same
  value) -- adding a comment so future readers don't re-question.

- dev-fkeys.el: add a `typescript' clause to
  `cj/--f6-test-runner-cmd-for'.  F6 now runs `npx --no-install
  vitest &lt;path&gt;' when vitest is on PATH, otherwise `npx --no-install
  jest &lt;path&gt;'.  Updates the matching test from "returns nil" to
  cover both code paths; the impl-level test now asserts the routed
  command instead of expecting a user-error.

- flycheck-config.el: build the LanguageTool wrapper path with
  `(expand-file-name "scripts/languagetool-flycheck"
  user-emacs-directory)' instead of a hardcoded `~/.emacs.d/...'.
  Survives a non-standard `user-emacs-directory'.

- latex-config.el: replace the hardcoded Zathura viewer with
  `cj/--latex-select-pdf-viewer', which walks
  `cj/--latex-pdf-viewer-candidates' (zathura → evince → okular →
  SumatraPDF → xdg-open) and falls back to "PDF Tools" when nothing
  is on PATH.  Each entry maps an executable to the matching
  TeX-view-program-list name so AUCTeX's defaults handle the
  actual viewer invocation.
</content>
</entry>
<entry>
<title>refactor(lsp): rename cj/lsp--disable-eldoc-hover for accuracy</title>
<updated>2026-05-12T05:40:22+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-05-12T05:40:22+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/dotemacs/commit/?id=b45638194cc19b026c49e0cb4787024c73723954'/>
<id>urn:sha1:b45638194cc19b026c49e0cb4787024c73723954</id>
<content type='text'>
The helper removes lsp-mode's entry from `eldoc-documentation-functions' in the current buffer. It never touched hover display, so the old name was misleading. It's now `cj/lsp--remove-eldoc-provider', the two tests rename to match, and the docstring drops the "hover" wording.
</content>
</entry>
<entry>
<title>refactor(prog-lsp): replace obsolete lsp-eldoc-hook</title>
<updated>2026-05-11T22:17:53+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-05-11T22:17:53+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/dotemacs/commit/?id=96d5d6a7454f4e35860dc3d93cb3a447263859d7'/>
<id>urn:sha1:96d5d6a7454f4e35860dc3d93cb3a447263859d7</id>
<content type='text'>
lsp-mode 9.0.0 made `lsp-eldoc-hook' an obsolete alias for Emacs's `eldoc-documentation-functions', and `lsp-managed-mode' already adds `lsp-eldoc-function' to that buffer-local hook. Dropped the obsolete `(setq lsp-eldoc-hook nil)'. `cj/lsp--disable-eldoc-hover' now removes `lsp-eldoc-function' from the buffer-local `eldoc-documentation-functions' via `lsp-managed-mode-hook', which clears the obsolete-variable byte-compile warning. Tests cover the hook removal, leaving the default `eldoc-documentation-functions' value alone, and the module no longer naming `lsp-eldoc-hook'.
</content>
</entry>
<entry>
<title>feat(lsp): add common build/cache dirs to file-watch ignore list</title>
<updated>2026-04-27T00:40:22+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-04-27T00:40:22+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/dotemacs/commit/?id=781b46e4eb7c08a3db01b1c1d89677ba8e21fd98'/>
<id>urn:sha1:781b46e4eb7c08a3db01b1c1d89677ba8e21fd98</id>
<content type='text'>
Extends `lsp-file-watch-ignored-directories' with thirteen build, cache, and tooling directories: `node_modules', `dist', `coverage', `target', `__pycache__', `.venv', `venv', `.pytest_cache', `.mypy_cache', `.ruff_cache', `test-results', `playwright-report', `tf/.terraform'. Uses `add-to-list', so lsp-mode's own defaults (`.git', `.svn', `.idea', etc.) stay in place.

Setting these in a project's `.dir-locals.el' doesn't work. lsp-mode reads `lsp-file-watch-ignored-directories' once at workspace init, from the global value, so a buffer-local override never reaches the watch list. I confirmed this today: in a Python buffer where dir-locals had applied, `M-: lsp-file-watch-ignored-directories' returned the lsp-mode default, not the project's overrides. Setting it globally is what works.

The goal is to push typical workspaces under `lsp-file-watch-threshold' (1000), so the "watch all files? (y or n)" prompt stops firing on every fresh LSP start.

Also added a forward defvar for `lsp-enable-remote' to silence the matching free-variable warning under `make compile'.
</content>
</entry>
<entry>
<title>feat(lsp): disable LSP on remote/TRAMP files</title>
<updated>2026-02-04T11:40:45+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-02-04T11:40:45+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/dotemacs/commit/?id=a09555192c28dadbcadb96ed2af6ac0786022758'/>
<id>urn:sha1:a09555192c28dadbcadb96ed2af6ac0786022758</id>
<content type='text'>
Prevents slow startup and project root prompts when editing files
over TRAMP connections.

- Add lsp-enable-remote nil in :init (before lsp-mode loads)
- Add explicit remote check in shell script setup hook
</content>
</entry>
<entry>
<title>changing repositories</title>
<updated>2025-10-12T16:47:26+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2025-10-12T16:47:26+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/dotemacs/commit/?id=092304d9e0ccc37cc0ddaa9b136457e56a1cac20'/>
<id>urn:sha1:092304d9e0ccc37cc0ddaa9b136457e56a1cac20</id>
<content type='text'>
</content>
</entry>
</feed>
