+ Allow LSP to prompt to install servers. All this machinary just adds more confusion for beginners, and at least LSP asks for your permission before it does it. + Reverts lsp-enable-file-watchers and lsp-enable-indentation to their default (enabled), hopefully to help lsp-java, lsp-dart, and lsp-clojure users, for whom file-watchers seems to be necessary. + Apply GC/IPC optimizations globally, to ensure their reach. By only setting them buffer-locally we don't have a guarantee that subprocesses will be affected when the lsp buffer isn't focused. Closes #3989 Co-authored-by: Eric Dallo <ercdll1337@gmail.com>
47 lines
1.8 KiB
EmacsLisp
47 lines
1.8 KiB
EmacsLisp
;;; tools/lsp/config.el -*- lexical-binding: t; -*-
|
|
|
|
(defvar +lsp-defer-shutdown 3
|
|
"If non-nil, defer shutdown of LSP servers for this many seconds after last
|
|
workspace buffer is closed.
|
|
|
|
This delay prevents premature server shutdown when a user still intends on
|
|
working on that project after closing the last buffer, or when programmatically
|
|
killing and opening many LSP/eglot-powered buffers.")
|
|
|
|
|
|
;;
|
|
;;; Common
|
|
|
|
(defvar +lsp--default-read-process-output-max nil)
|
|
(defvar +lsp--default-gcmh-high-cons-threshold nil)
|
|
|
|
(define-minor-mode +lsp-optimization-mode
|
|
"Deploys universal GC and IPC optimizations for `lsp-mode' and `eglot'."
|
|
:global t
|
|
:init-value nil
|
|
(if +lsp-optimization-mode
|
|
(progn
|
|
(setq +lsp--default-read-process-output-max
|
|
(default-value 'read-process-output-max)
|
|
+lsp--default-gcmh-high-cons-threshold
|
|
(default-value 'gcmh-high-cons-threshold))
|
|
;; `read-process-output-max' is only available on recent development
|
|
;; builds of Emacs 27 and above.
|
|
(setq-default read-process-output-max (* 1024 1024))
|
|
;; REVIEW LSP causes a lot of allocations, with or without Emacs 27+'s
|
|
;; native JSON library, so we up the GC threshold to stave off
|
|
;; GC-induced slowdowns/freezes. Doom uses `gcmh' to enforce its
|
|
;; GC strategy, so we modify its variables rather than
|
|
;; `gc-cons-threshold' directly.
|
|
(setq-default gcmh-high-cons-threshold (* 2 +lsp--default-gcmh-high-cons-threshold)))
|
|
(setq-default read-process-output-max +lsp--default-read-process-output-max
|
|
gcmh-high-cons-threshold +lsp--default-gcmh-high-cons-threshold))
|
|
(gcmh-set-high-threshold))
|
|
|
|
|
|
;;
|
|
;;; Implementations
|
|
|
|
(if (featurep! +eglot)
|
|
(load! "+eglot")
|
|
(load! "+lsp"))
|