59 lines
2.1 KiB
EmacsLisp
59 lines
2.1 KiB
EmacsLisp
|
(defun lsp-booster--advice-json-parse (old-fn &rest args)
|
||
|
"Try to parse bytecode instead of json."
|
||
|
(or
|
||
|
(when (equal (following-char) ?#)
|
||
|
(let ((bytecode (read (current-buffer))))
|
||
|
(when (byte-code-function-p bytecode)
|
||
|
(funcall bytecode))))
|
||
|
(apply old-fn args)))
|
||
|
(advice-add (if (progn (require 'json)
|
||
|
(fboundp 'json-parse-buffer))
|
||
|
'json-parse-buffer
|
||
|
'json-read)
|
||
|
:around
|
||
|
#'lsp-booster--advice-json-parse)
|
||
|
|
||
|
(defun lsp-booster--advice-final-command (old-fn cmd &optional test?)
|
||
|
"Prepend emacs-lsp-booster command to lsp CMD."
|
||
|
(let ((orig-result (funcall old-fn cmd test?)))
|
||
|
(if (and (not test?) ;; for check lsp-server-present?
|
||
|
(not (file-remote-p default-directory)) ;; see lsp-resolve-final-command, it would add extra shell wrapper
|
||
|
lsp-use-plists
|
||
|
(not (functionp 'json-rpc-connection)) ;; native json-rpc
|
||
|
(executable-find "emacs-lsp-booster"))
|
||
|
(progn
|
||
|
(when-let ((command-from-exec-path (executable-find (car orig-result)))) ;; resolve command from exec-path (in case not found in $PATH)
|
||
|
(setcar orig-result command-from-exec-path))
|
||
|
(message "Using emacs-lsp-booster for %s!" orig-result)
|
||
|
(cons "emacs-lsp-booster" orig-result))
|
||
|
orig-result)))
|
||
|
(advice-add 'lsp-resolve-final-command :around #'lsp-booster--advice-final-command)
|
||
|
|
||
|
|
||
|
(require 'lsp-mode)
|
||
|
(require 'lsp-ui)
|
||
|
(require 'dap-lldb)
|
||
|
(require 'dap-gdb-lldb)
|
||
|
|
||
|
(with-eval-after-load 'lsp-mode
|
||
|
(lsp-register-client
|
||
|
(make-lsp-client :new-connection (lsp-stdio-connection "nixd")
|
||
|
:major-modes '(nix-mode)
|
||
|
:priority 0
|
||
|
:server-id 'nixd)))
|
||
|
|
||
|
|
||
|
;; Hooks
|
||
|
(add-hook 'c-mode-hook 'lsp-deferred)
|
||
|
(add-hook 'c-mode-hook 'display-line-numbers-mode)
|
||
|
|
||
|
(add-hook 'c++-mode-hook 'lsp-deferred)
|
||
|
(add-hook 'c++-mode-hook 'display-line-numbers-mode)
|
||
|
|
||
|
|
||
|
|
||
|
(add-hook 'nix-mode-hook 'lsp-deferred)
|
||
|
(add-hook 'nix-mode-hook 'display-line-numbers-mode)
|
||
|
|
||
|
(add-hook 'java-mode-hook 'lsp-deferred)
|
||
|
(add-hook 'nix-mode-hook 'display-line-numbers-mode)
|