From: Stefan Kangas Date: Fri, 14 Jan 2022 12:03:44 +0000 (+0100) Subject: Change rust language server to rust-analyzer X-Git-Tag: emacs-29.0.90~1616^2~524^2~4^2~81 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=3aeebe8186dfcc7e4a6df638bd44b4740895427f;p=emacs.git Change rust language server to rust-analyzer rust-analyzer is the officially blessed Language Server for Rust: https://github.com/rust-lang/rfcs/pull/2912 Also drop the special support code for RLS. * eglot.el (eglot-server-programs): Add rust-mode language server "rust-analyzer" and prefer it to the older "rls". (eglot-rls, jsonrpc-connection-ready-p) (eglot-handle-notification): Delete special support for "rls". * eglot-tests.el (rls-analyzer-watches-files) (rls-analyzer-hover-after-edit): Rename to ... (rust-analyzer-watches-files) (rust-analyzer-hover-after-edit): ... this. Update tests to work with rust-analyzer. * README.md: Update references for RLS to point to rust-analyzer. * NEWS.md: Announce above change. GitHub-reference: per https://github.com/joaotavora/eglot/issues/803 --- diff --git a/lisp/progmodes/eglot.el b/lisp/progmodes/eglot.el index 14a4d1cd43a..fb2f1ba100d 100644 --- a/lisp/progmodes/eglot.el +++ b/lisp/progmodes/eglot.el @@ -142,7 +142,7 @@ chosen (interactively or automatically)." when probe return (cons probe args) finally (funcall err))))))) -(defvar eglot-server-programs `((rust-mode . (eglot-rls "rls")) +(defvar eglot-server-programs `((rust-mode . ("rust-analyzer" "rls")) (cmake-mode . ("cmake-language-server")) (vimrc-mode . ("vim-language-server" "--stdio")) (python-mode @@ -2984,25 +2984,6 @@ If NOERROR, return predicate, else erroring function." (when (eq ?! (aref arg 1)) (aset arg 1 ?^)) `(,self () (re-search-forward ,(concat "\\=" arg)) (,next))) - -;;; Rust-specific -;;; -(defclass eglot-rls (eglot-lsp-server) () :documentation "Rustlang's RLS.") - -(cl-defmethod jsonrpc-connection-ready-p ((server eglot-rls) what) - "Except for :completion, RLS isn't ready until Indexing done." - (and (cl-call-next-method) - (or ;; RLS normally ready for this, even if building. - (eq :textDocument/completion what) - (pcase-let ((`(,_id ,what ,done ,_detail) (eglot--spinner server))) - (and (equal "Indexing" what) done))))) - -(cl-defmethod eglot-handle-notification - ((server eglot-rls) (_method (eql window/progress)) - &key id done title message &allow-other-keys) - "Handle notification window/progress." - (setf (eglot--spinner server) (list id title done message))) - ;;; eclipse-jdt-specific ;;;