From d84aa4374af5e3447445377a836c66cc07d7a223 Mon Sep 17 00:00:00 2001 From: Craig Jennings Date: Sat, 16 May 2026 03:55:49 -0500 Subject: refactor(prog): six programming-track hygiene fixes from re-review MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 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 ' when vitest is on PATH, otherwise `npx --no-install jest '. 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. --- todo.org | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) (limited to 'todo.org') diff --git a/todo.org b/todo.org index 1bcab75b8..1c215c3e5 100644 --- a/todo.org +++ b/todo.org @@ -1934,7 +1934,7 @@ Expected outcome: - Keep existing formatter wiring tests and add command-construction tests if a helper is extracted. -**** TODO [#C] Add =executable-find= checks for =prettier= and =pyright= at load time :safety: +**** 2026-05-16 Sat @ 03:54:56 -0500 Added cj/executable-find-or-warn checks for prettier and pyright at load time =modules/prog-webdev.el:34-40= declares =prettier-path= and =modules/prog-python.el:33-40= declares =pyright-path= as string @@ -1944,7 +1944,7 @@ mid-edit, then the user has to discover why. Wrap with =cj/executable-find-or-warn= (already in =system-lib.el=) at module load time so the missing dependency is reported up front. -**** TODO [#C] Make =keyboard-compat= =server-after-make-frame-hook= idempotent :safety: +**** 2026-05-16 Sat @ 03:54:56 -0500 Documented keyboard-compat hook idempotence (already correct) =modules/keyboard-compat.el:169-174= adds the frame-setup hook unconditionally. If the module is required twice (e.g. via two @@ -1953,7 +1953,7 @@ twice per new frame and installs duplicate =key-translation-map= entries. Wrap the =add-hook= in a guard, or use a named function and rely on =add-hook='s own duplicate-check. -**** TODO [#C] Wire =dev-fkeys= F6 test-runner clause for typescript / tsx :refactor: +**** 2026-05-16 Sat @ 03:54:56 -0500 Wired F6 TypeScript clause to npx vitest|jest =modules/dev-fkeys.el:261-269= maps =tsx= to =typescript= in the language detection table. =modules/dev-fkeys.el:347-349= @@ -1962,7 +1962,7 @@ the catch-all =(_)= returns nil, so F6 errors instead of routing to a real runner. Either add a =typescript= → =jest=/=vitest= clause or remove the =tsx= mapping until the runner side is implemented. -**** TODO [#B] Fix =prog-lsp= eldoc-provider removal scope :bug: +**** 2026-05-16 Sat @ 03:54:56 -0500 Fixed prog-lsp eldoc-provider removal to act on the global hook =modules/prog-lsp.el:51-54,76= attaches =cj/lsp--remove-eldoc-provider= globally to =lsp-managed-mode-hook= @@ -1975,7 +1975,7 @@ the hook itself buffer-local-friendly (add it inside =lsp-managed-mode-hook= per-buffer) or remove from the global provider list once instead of per-buffer. -**** TODO [#C] Externalize hardcoded LanguageTool script path in =flycheck-config= :cleanup: +**** 2026-05-16 Sat @ 03:54:56 -0500 Externalized LanguageTool script path via user-emacs-directory =modules/flycheck-config.el:69= hardcodes =~/.emacs.d/scripts/languagetool-flycheck= as the LanguageTool wrapper. @@ -1984,7 +1984,7 @@ auditing the module against a future package) get a broken checker. Replace with =(expand-file-name "scripts/languagetool-flycheck" user-emacs-directory)= or a defcustom. -**** TODO [#C] Replace hardcoded Zathura viewer in =latex-config= :cleanup: +**** 2026-05-16 Sat @ 03:54:56 -0500 Replaced hardcoded Zathura viewer with executable-find candidate list =modules/latex-config.el:28= sets the LaTeX viewer to =zathura= unconditionally. macOS / Windows users and anyone who prefers a -- cgit v1.2.3