.emacs.d/lisp/init-lsp.el

82 lines
2.9 KiB
EmacsLisp

;;; init-lsp.el --- LSP settings -*- lexical-binding: t -*-
;;; Commentary:
;;; Code:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; lsp-bridge
(use-package markdown-mode
:mode ("README\\.md\\'" . gfm-mode)
:init (setq markdown-command "multimarkdown")
:bind (:map markdown-mode-map
("C-c C-e" . markdown-do)))
(use-package yasnippet
:init
(yas-global-mode 1))
(add-to-list 'load-path "~/.emacs.d/site-lisp/lsp-bridge")
(require 'lsp-bridge)
(global-lsp-bridge-mode)
(setq acm-enable-doc t)
(setq acm-enable-copilot nil)
(setq lsp-bridge-enable-hover-diagnostic t)
(setq lsp-bridge-enable-completion-in-string t)
(setq lsp-bridge-enable-completion-in-minibuffer t)
(setq lsp-bridge-enable-with-tramp t)
(setq lsp-bridge-python-lsp-server "basedpyright")
(setq lsp-bridge-tex-lsp-server "texlab")
(setq lsp-bridge-python-command
(cond
((eq system-type 'gnu/linux) "/usr/bin/python3")
((eq system-type 'darwin) "/opt/homebrew/bin/python3")
))
(one-key-create-menu
"LSP"
'((("a" . "lsp-bridge-code-action") . lsp-bridge-code-action)
(("f" . "lsp-bridge-find-def") . lsp-bridge-find-def)
(("b" . "lsp-bridge-find-def-return") . lsp-bridge-find-def-return)
(("h" . "lsp-bridge-popup-documentation") . lsp-bridge-popup-documentation)
(("s" . "lsp-bridge-toggle-sdcv-helper") . lsp-bridge-toggle-sdcv-helper))
t)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; virtual environment
(use-package pyvenv
:ensure t
:config
(setenv "WORKON_HOME" (expand-file-name
(cond ((eq system-type 'gnu/linux) "~/miniconda3/envs")
((eq system-type 'darwin) "/opt/homebrew/Caskroom/miniconda/base/envs"))))
(pyvenv-mode t)
(add-hook 'python-mode-hook
(lambda () (pyvenv-workon "dev")))
)
(defun local/lsp-bridge-get-single-lang-server-by-project (project-path filepath)
(let* ((json-object-type 'plist)
(custom-dir (expand-file-name ".cache/lsp-bridge/pyright" user-emacs-directory))
(custom-config (expand-file-name "pyright.json" custom-dir))
(default-config (json-read-file (expand-file-name "lsp-bridge/langserver/pyright.json" user-emacs-directory)))
(settings (plist-get default-config :settings))
)
(plist-put settings :pythonPath (executable-find "python"))
(make-directory (file-name-directory custom-config) t)
(with-temp-file custom-config (insert (json-encode default-config)))
custom-config))
(add-hook 'python-mode-hook
(lambda ()
(setq-local lsp-bridge-get-single-lang-server-by-project
'local/lsp-bridge-get-single-lang-server-by-project)))
(add-hook 'pyvenv-post-activate-hooks
(lambda ()
(lsp-bridge-restart-process)))
(provide 'init-lsp)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; init-lsp.el ends here