aboutsummaryrefslogtreecommitdiff
path: root/modules/prog-lsp.el
diff options
context:
space:
mode:
authorCraig Jennings <c@cjennings.net>2026-07-10 18:45:49 -0500
committerCraig Jennings <c@cjennings.net>2026-07-10 18:45:49 -0500
commitdfdb35800b613f69678de712f96a91cda8f30c32 (patch)
treec124f162d79c6392e82745cbc5fa92ea84a571b7 /modules/prog-lsp.el
parent326ec0198b57855ed61523ea2f476b8e88cd3d50 (diff)
downloaddotemacs-dfdb35800b613f69678de712f96a91cda8f30c32.tar.gz
dotemacs-dfdb35800b613f69678de712f96a91cda8f30c32.zip
refactor(lsp): make prog-general the single owner of LSP config
prog-lsp.el was required by nothing. The (require 'prog-lsp) line was commented out and later deleted, so none of its config ever ran. prog-general's LSP block was the only policy in effect, which is why the build/cache file-watch ignore list added in April never applied and the "watch all files?" prompt kept firing. Fold prog-lsp's settings into prog-general and delete the module. This adopts its quiet, performance-first policy. Doc popups, symbol highlighting, snippets, signature help, and modeline diagnostics go off. Idle-delay drops to 0.5, the eldoc provider is stripped from the global hook, and read-process-output-max rises to 1MB. The file-watch ignore list now applies: the daemon carries all thirteen build/cache patterns, six of which lsp-mode already ships by default. Language-specific server variables and the lsp-deferred mode hooks stay in the per-language modules. Consolidate the two prog-lsp test files into one test-prog-general-lsp.el: twelve tests covering the file-watch and eldoc helpers across Normal, Boundary, and Error, plus the load-time invariants.
Diffstat (limited to 'modules/prog-lsp.el')
-rw-r--r--modules/prog-lsp.el110
1 files changed, 0 insertions, 110 deletions
diff --git a/modules/prog-lsp.el b/modules/prog-lsp.el
deleted file mode 100644
index 1c74bcc1..00000000
--- a/modules/prog-lsp.el
+++ /dev/null
@@ -1,110 +0,0 @@
-;;; prog-lsp.el --- Setup for LSP Mode -*- lexical-binding: t; coding: utf-8; -*-
-;; author: Craig Jennings <c@cjennings.net>
-
-;;; Commentary:
-
-;; good reference as to what to enable/disable in lsp-mode
-;; https://emacs-lsp.github.io/lsp-mode/tutorials/how-to-turn-off/
-
-;;; Code:
-
-;; Forward declarations for byte-compile and let-binding under lexical scope.
-;; Real definitions are lsp-mode's defcustoms.
-(defvar eldoc-documentation-functions)
-(defvar lsp-file-watch-ignored-directories)
-(defvar lsp-enable-remote)
-
-(declare-function lsp-eldoc-function "lsp-mode")
-
-;;;;; --------------------- File-Watch Ignore Patterns ---------------------
-;; lsp-mode prompts when a workspace exceeds `lsp-file-watch-threshold' (1000)
-;; directories. Real source repos cross that line easily once node_modules,
-;; build outputs, and language caches are counted. These patterns extend the
-;; lsp-mode defaults (.git, .svn, .idea, ...) instead of replacing them, so the
-;; built-in VC/IDE excludes still apply. Buffer-local overrides via
-;; `.dir-locals.el' don't work — lsp-mode reads the global value at workspace
-;; init, not the buffer-local one. Hence: global defaults here.
-
-(defvar cj/lsp-file-watch-ignored-extras
- '("[/\\\\]node_modules\\'"
- "[/\\\\]\\.ruff_cache\\'"
- "[/\\\\]dist\\'"
- "[/\\\\]coverage\\'"
- "[/\\\\]test-results\\'"
- "[/\\\\]playwright-report\\'"
- "[/\\\\]tf[/\\\\]\\.terraform\\'"
- "[/\\\\]__pycache__\\'"
- "[/\\\\]\\.venv\\'"
- "[/\\\\]venv\\'"
- "[/\\\\]\\.pytest_cache\\'"
- "[/\\\\]\\.mypy_cache\\'"
- "[/\\\\]target\\'")
- "Build/cache directory patterns to add to `lsp-file-watch-ignored-directories'.
-Each entry is an Emacs regex matching a path ending in the named directory.")
-
-(defun cj/lsp--add-file-watch-ignored-extras ()
- "Append `cj/lsp-file-watch-ignored-extras' to lsp-mode's ignore list.
-Idempotent — `add-to-list' skips patterns already present."
- (dolist (pattern cj/lsp-file-watch-ignored-extras)
- (add-to-list 'lsp-file-watch-ignored-directories pattern)))
-
-(defun cj/lsp--remove-eldoc-provider-global ()
- "Remove lsp-mode's provider from the global `eldoc-documentation-functions'.
-Run once after lsp-mode loads. The previous per-buffer removal raced
-lsp's own buffer-local add: the buffer-local remove fired before lsp
-populated the buffer-local hook (lsp inherits the global default and
-mutates from there), so the buffer-local hook ended up holding the
-provider anyway. Removing globally before lsp ever attaches a buffer
-makes the absence stick for every subsequent lsp-managed buffer."
- (remove-hook 'eldoc-documentation-functions #'lsp-eldoc-function))
-
-;;;;; ---------------------------- LSP Mode ---------------------------
-
-(use-package lsp-mode
- :hook
- ((c-mode c++-mode go-mode js-mode js-jsx-mode typescript-mode python-mode web-mode) . lsp-deferred)
- :commands (lsp)
- :bind (:map lsp-mode-map
- ("C-c d" . lsp-describe-thing-at-point)
- ("C-c a" . lsp-execute-code-action))
- :bind-keymap ("C-c L" . lsp-command-map)
- :init
- (setq lsp-enable-remote nil) ;; Don't start LSP on TRAMP files (slow, prompts for project root)
- :config
- (setq lsp-auto-guess-root t)
- (setq lsp-log-io nil)
- (setq lsp-restart 'auto-restart)
- (setq lsp-enable-symbol-highlighting nil)
- (setq lsp-enable-on-type-formatting nil)
- (setq lsp-signature-auto-activate nil)
- (setq lsp-signature-render-documentation nil)
- ;; Strip lsp-mode's eldoc provider from the GLOBAL hook value once,
- ;; not per buffer. See `cj/lsp--remove-eldoc-provider-global' for
- ;; why per-buffer racing didn't stick.
- (cj/lsp--remove-eldoc-provider-global)
- (setq lsp-modeline-code-actions-enable nil)
- (setq lsp-modeline-diagnostics-enable nil)
- (setq lsp-headerline-breadcrumb-enable nil)
- (setq lsp-semantic-tokens-enable nil)
- (setq lsp-enable-folding nil)
- (setq lsp-enable-imenu nil)
- (setq lsp-enable-snippet nil)
- (setq read-process-output-max (* 1024 1024)) ;; 1MB
- (setq lsp-idle-delay 0.5)
- (cj/lsp--add-file-watch-ignored-extras))
-
-;;;;; ----------------------------- LSP UI ----------------------------
-
-(use-package lsp-ui
- :after lsp-mode
- :commands lsp-ui-mode
- :config
- (setq lsp-ui-doc-enable nil)
- (setq lsp-ui-doc-header t)
- (setq lsp-ui-doc-include-signature t)
- (setq lsp-ui-doc-border (face-foreground 'default))
- (setq lsp-ui-sideline-show-code-actions nil) ;; turn off code actions in sidebar
- (setq lsp-ui-sideline-delay 0.05))
-
-(provide 'prog-lsp)
-;;; prog-lsp.el ends here