12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- ;;; init-lsp.el --- LSP Configuration File -*- lexical-binding: t -*-
- ;;; Commentary:
- ;;; Code:
- (setenv "LSP_USE_PLISTS" "true")
- (use-package lsp-ui
- :config
- (setq lsp-ui-sideline-enable t
- lsp-ui-peek-enable t
- lsp-ui-peek-always-show t
- lsp-ui-doc-delay 1
- lsp-ui-doc-enable t
- lsp-ui-doc-show-with-mouse t
- lsp-ui-doc-show-with-cursor nil
- lsp-ui-sideline-show-diagnostics t
- lsp-ui-sideline-show-code-actions nil
- lsp-ui-doc-position 'at-point))
- (use-package lsp-treemacs)
- (use-package lsp-mode
- :diminish
- :hook
- (clojure-mode . lsp)
- (lsp-lens-mode . really-diminish-lsp-lens-mode)
- (lsp-completion-mode . my/lsp-mode-setup-completion)
- (sql-mode . lsp)
- (lsp-after-apply-edits . save-buffer)
- :config
- (defun really-diminish-lsp-lens-mode ()
- (diminish 'lsp-lens-mode)
- (remove-hook 'lsp-lens-mode-hook 'really-diminish-lsp-lens-mode))
- (defun my/lsp-mode-setup-completion ()
- (setf (alist-get 'styles (alist-get 'lsp-capf completion-category-defaults))
- '(orderless))
- ;; Remove this, as we use cape-clojure (in init-clojure.el), which includes
- ;; lsp-completion-at-point
- (remove-hook 'completion-at-point-functions #'lsp-completion-at-point t))
- (if (eq system-type 'darwin)
- (setq lsp-keymap-prefix "s-l")
- (setq lsp-keymap-prefix "C-c C-l"))
- (define-key lsp-mode-map (kbd lsp-keymap-prefix) lsp-command-map)
- (setq lsp-sqls-workspace-config-path nil)
- (setq read-process-output-max (* 1024 1024)
- lsp-log-io nil
- lsp-lens-enable t
- lsp-headerline-breadcrumb-enable t
- lsp-idle-delay 1.000
- lsp-enable-symbol-highlighting t
- lsp-headerline-breadcrumb-enable-diagnostics nil
- lsp-modeline-code-actions-enable nil
- lsp-modeline-diagnostics-enable nil
- lsp-treemacs-theme "Iconless"
- lsp-completion-provider :none ;; use corfu
- lsp-references-exclude-definition t
- ;; user cider for indendation and eldoc
- lsp-enable-indentation nil
- lsp-eldoc-enable-hover nil)
- ;; Copied from https://github.com/blahgeek/emacs-lsp-booster/blob/4200ed6ae0cd83b8e3fd1dbefb09121480951a22/README.md#configure-lsp-mode
- (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))
- (provide 'init-lsp)
- ;;; init-lsp.el ends here
|