From ac3f6c6025df0ac6c4c385911141d600e2360958 Mon Sep 17 00:00:00 2001 From: Jeremy Dormitzer Date: Tue, 4 Apr 2023 21:33:56 -0400 Subject: [PATCH] Switch out lsp-mode for eglot --- emacs/.emacs.d/config/init-completion.el | 17 ---------- emacs/.emacs.d/config/init-ide.el | 40 +++++------------------- emacs/.emacs.d/config/init-java.el | 28 ----------------- emacs/.emacs.d/config/init-js.el | 15 --------- emacs/.emacs.d/config/init-python.el | 11 ------- emacs/.emacs.d/config/init-rust.el | 7 +---- emacs/.emacs.d/config/init-scala.el | 8 +---- emacs/.emacs.d/config/init-web.el | 7 ----- homebrew/Brewfile | 2 ++ 9 files changed, 11 insertions(+), 124 deletions(-) diff --git a/emacs/.emacs.d/config/init-completion.el b/emacs/.emacs.d/config/init-completion.el index 826980e..5257674 100644 --- a/emacs/.emacs.d/config/init-completion.el +++ b/emacs/.emacs.d/config/init-completion.el @@ -108,23 +108,6 @@ targets." "k" #'password-store-remove "U" #'password-store-url) (add-to-list 'embark-keymap-alist '(password-store . embark-password-store-actions)) - ;; Add identifiers in LSP-mode as their own target type - (with-eval-after-load 'lsp-mode - (defun embark-target-lsp-identifier-at-point () - (when lsp-mode - (when-let ((sym (embark-target-identifier-at-point))) - (cons 'lsp-identifier (cdr sym))))) - (add-to-list 'embark-target-finders 'embark-target-lsp-identifier-at-point) - (defun embark-lsp-execute-code-action (_target) - "Ignores the target and calls lsp-execute-code-action." - (call-interactively #'lsp-execute-code-action)) - (defvar-keymap embark-lsp-identifier-actions - :doc "Keymap for actions on LSP identifiers" - :parent embark-identifier-map - "a" #'embark-lsp-execute-code-action - "h" #'lsp-describe-thing-at-point) - (add-to-list 'embark-keymap-alist '(lsp-identifier . embark-lsp-identifier-actions)) - (add-to-list 'embark-target-injection-hooks '(lsp-describe-thing-at-point embark--ignore-target))) (add-to-list 'embark-target-injection-hooks '(xref-find-references embark--ignore-target)) :general ((emacs normal motion insert visual) "C-." #'embark-act) diff --git a/emacs/.emacs.d/config/init-ide.el b/emacs/.emacs.d/config/init-ide.el index a6c2516..701cc67 100644 --- a/emacs/.emacs.d/config/init-ide.el +++ b/emacs/.emacs.d/config/init-ide.el @@ -38,40 +38,14 @@ :custom (xref-prompt-for-identifier nil)) -;; Full-on IDE functionality via LSP mode -(use-package lsp-mode +(use-package eglot + :commands (eglot) :hook - (python-mode . lsp-deferred) - (rust-mode . lsp-deferred) - (go-mode . lsp-deferred) - (sh-mode . lsp-deferred) - :init - (which-key-add-keymap-based-replacements global-map - "C-c l" '("lsp")) - :config - (add-hook 'lsp-mode-hook #'lsp-enable-which-key-integration) - (add-to-list 'lsp-language-id-configuration '(direnv-envrc-mode . "shellscript")) - ;; Only add projects to the current workspace when I open a file from that project - ;; https://emacs-lsp.github.io/lsp-mode/page/faq/#how-do-i-force-lsp-mode-to-forget-the-workspace-folders-for-multi-root-servers-so-the-workspace-folders-are-added-on-demand - (advice-add 'lsp :before (lambda (&rest _args) (eval '(setf (lsp-session-server-id->folders (lsp-session)) (ht))))) - :custom - (lsp-keymap-prefix "C-c l") - (lsp-headerline-breadcrumb-enable nil) - (lsp-file-watch-threshold 100000) - :general - (normal lsp-mode-map "K" #'lsp-describe-thing-at-point)) - -(use-package lsp-ui - :hook (lsp-mode . lsp-ui-mode) - :custom - (lsp-ui-doc-show-with-cursor t)) - -;; Integrated debugger -(use-package dap-mode - :commands (dap-debug dap-debug-edit-template dap-mode) - :config - (add-hook 'dap-stopped-hook - (lambda (arg) (call-interactively #'dap-hydra)))) + (java-mode . eglot-ensure) + (rust-mode . eglot-ensure) + (js-mode . eglot-ensure) + (typescript-mode . eglot-ensure) + (python-mode . eglot-ensure)) ;; Some compilation-mode conveniences (use-package compile diff --git a/emacs/.emacs.d/config/init-java.el b/emacs/.emacs.d/config/init-java.el index 4aadc6f..dca6cf1 100644 --- a/emacs/.emacs.d/config/init-java.el +++ b/emacs/.emacs.d/config/init-java.el @@ -4,34 +4,6 @@ (use-package google-c-style :hook (java-mode . google-set-c-style)) -(use-package lsp-java - :custom - (lsp-java-maven-download-sources t) - (lsp-java-configuration-runtimes '[(:name "JavaSE-11" - :path "/Library/Java/JavaVirtualMachines/amazon-corretto-11.jdk/Contents/Home" - :default t) - (:name "JavaSE-17" - :path "/Library/Java/JavaVirtualMachines/amazon-corretto-17.jdk/Contents/Home")])) - -(defvar java-debug-map (make-sparse-keymap)) -(general-def java-mode-map - "C-c d" '(:keymap java-debug-map :which-key "debug")) -(general-def java-debug-map - "d" 'dap-java-debug - "t" 'dap-java-debug-test-method - "c" 'dap-java-debug-test-class - "b" 'dap-breakpoint-toggle) - -(with-eval-after-load 'dap-java - (setq dap-java-test-additional-args '("-n" "\".*(Test|IT).*\""))) - -(defun jdormit-java-setup () - (lsp-deferred) - (require 'dap-java) - (dap-mode)) - -(add-hook 'java-mode-hook 'jdormit-java-setup) - (use-package protobuf-mode) (provide 'init-java) diff --git a/emacs/.emacs.d/config/init-js.el b/emacs/.emacs.d/config/init-js.el index e242a69..d10dc0b 100644 --- a/emacs/.emacs.d/config/init-js.el +++ b/emacs/.emacs.d/config/init-js.el @@ -26,22 +26,9 @@ (use-package js :straight (:type built-in) :defer t - :config - (add-hook 'js-mode-hook #'lsp-deferred) :custom (js-indent-level 2)) -;; Make sure we load LSP in React files -(with-eval-after-load 'lsp-clients - (defun lsp-typescript-javascript-tsx-jsx-activate-p (filename major-mode) - "Checks if the javascript-typescript language server should be enabled - based on FILE-NAME and MAJOR-MODE" - (or (member major-mode '(typescript-mode typescript-tsx-mode js-mode js2-mode rjsx-mode)) - (and (eq major-mode 'web-mode) - (or (string-suffix-p ".tsx" filename t) - (string-suffix-p ".jsx" filename t) - (string-suffix-p ".js" filename t)))))) - (use-package js-comint :commands (run-js) :config @@ -53,8 +40,6 @@ "C-c M-z" #'js-send-buffer-and-go)) (use-package typescript-mode - :config - (add-hook 'typescript-mode-hook #'lsp-deferred) :custom (typescript-indent-level 2)) diff --git a/emacs/.emacs.d/config/init-python.el b/emacs/.emacs.d/config/init-python.el index 18c5aa5..93efbfc 100644 --- a/emacs/.emacs.d/config/init-python.el +++ b/emacs/.emacs.d/config/init-python.el @@ -82,17 +82,6 @@ :defer 2 :hook (python-mode . pipenv-mode)) -;; LSP using Microsoft's pyright language server -(use-package lsp-pyright - :hook (python-mode . (lambda () - (require 'lsp-pyright) - (lsp-deferred))) - :custom - (lsp-pyright-use-library-code-for-types t) - (lsp-pyright-multi-root t) - :general - (python-mode-map "C-c C-d" #'lsp-describe-thing-at-point)) - ;; isort to sort Python imports (use-package py-isort :commands (py-isort-buffer py-isort-region) diff --git a/emacs/.emacs.d/config/init-rust.el b/emacs/.emacs.d/config/init-rust.el index 2288c72..6639ca2 100644 --- a/emacs/.emacs.d/config/init-rust.el +++ b/emacs/.emacs.d/config/init-rust.el @@ -1,11 +1,6 @@ ;; -*- lexical-binding: t; -*- (use-package rust-mode - :mode (("\\.rs\\'" . rust-mode)) - :config - (add-hook 'rust-mode-hook 'lsp-deferred) - (with-eval-after-load 'lsp-rust - (general-def rust-mode-map - "C-c C-c C-d" 'lsp-rust-analyzer-open-external-docs))) + :mode (("\\.rs\\'" . rust-mode))) (provide 'init-rust) diff --git a/emacs/.emacs.d/config/init-scala.el b/emacs/.emacs.d/config/init-scala.el index 1532d16..a766984 100644 --- a/emacs/.emacs.d/config/init-scala.el +++ b/emacs/.emacs.d/config/init-scala.el @@ -1,11 +1,5 @@ ;; -*- lexical-binding: t; -*- -(use-package lsp-metals - :hook (scala-mode . lsp) - :custom - ;; Metals claims to support range formatting by default but it supports range - ;; formatting of multiline strings only. You might want to disable it so that - ;; emacs can use indentation provided by scala-mode. - (lsp-metals-server-args '("-J-Dmetals.allow-multiline-string-formatting=off"))) +(use-package scala-mode) (provide 'init-scala) diff --git a/emacs/.emacs.d/config/init-web.el b/emacs/.emacs.d/config/init-web.el index 2a4f579..eeb906c 100644 --- a/emacs/.emacs.d/config/init-web.el +++ b/emacs/.emacs.d/config/init-web.el @@ -16,13 +16,6 @@ :config (setq web-mode-engines-alist '(("django" . "\\.jinja2\\'"))) - (add-hook 'web-mode-hook - (lambda () - (when (equal web-mode-content-type "javascript") - (web-mode-set-content-type "jsx")) - (when (or (equal web-mode-content-type "javascript") - (equal web-mode-content-type "jsx")) - (lsp-deferred)))) :custom (web-mode-enable-auto-pairing nil) (web-mode-markup-indent-offset 2) diff --git a/homebrew/Brewfile b/homebrew/Brewfile index 5a501b4..0c1fb68 100644 --- a/homebrew/Brewfile +++ b/homebrew/Brewfile @@ -13,6 +13,7 @@ brew "git-lfs" brew "gnupg" brew "grpcurl" brew "isync" +brew "jdtls" brew "jq" brew "kubectx" brew "maven" @@ -27,6 +28,7 @@ brew "pipx" brew "plantuml" brew "prettier" brew "pyenv" +brew "pyright" brew "python@3.9" brew "restic" brew "ripgrep"