]> git.eshelyaron.com Git - emacs.git/commitdiff
Guess server for js2-mode and rjsx-mode
authorJoão Távora <joaotavora@gmail.com>
Wed, 20 Jun 2018 18:05:25 +0000 (19:05 +0100)
committerJoão Távora <joaotavora@gmail.com>
Wed, 20 Jun 2018 18:05:25 +0000 (19:05 +0100)
* eglot.el (eglot-server-programs): Add entries for js2-mode and
rjsx-mode.  Coalesce entries for c++ and c-mode.  Improve
docstring.
(eglot--guess-contact): Allow lists are keys in
eglot-server-programs.

GitHub-reference: close https://github.com/joaotavora/eglot/issues/26

lisp/progmodes/eglot.el

index ecbd509b0036f5b57c5d073b5bddc316e98e49e8..447e8c17f25626e8fe12bf2d07b40f3a2e755d67 100644 (file)
 
 (defvar eglot-server-programs '((rust-mode . (eglot-rls "rls"))
                                 (python-mode . ("pyls"))
-                                (js-mode . ("javascript-typescript-stdio"))
+                                ((js-mode
+                                  js2-mode
+                                  rjsx-mode) . ("javascript-typescript-stdio"))
                                 (sh-mode . ("bash-language-server" "start"))
-                                (c++-mode . (eglot-cquery "cquery"))
-                                (c-mode . (eglot-cquery "cquery"))
+                                ((c++-mode
+                                  c-mode) . (eglot-cquery "cquery"))
                                 (php-mode . ("php" "vendor/felixfbecker/\
 language-server/bin/php-language-server.php")))
   "How the command `eglot' guesses the server to start.
 An association list of (MAJOR-MODE . SPEC) pair.  MAJOR-MODE is a
-mode symbol.  SPEC is
+mode symbol, or a list of mode symbols.  The associated SPEC
+specifies how to start a server for managing buffers of those
+modes.  SPEC can be:
 
 * In the most common case, a list of strings (PROGRAM [ARGS...]).
 PROGRAM is called with ARGS and is expected to serve LSP requests
@@ -359,7 +363,10 @@ be guessed."
             (eglot--error "Can't guess mode to manage for `%s'" (current-buffer)))
            (t guessed-mode)))
          (project (or (project-current) `(transient . ,default-directory)))
-         (guess (cdr (assoc managed-mode eglot-server-programs)))
+         (guess (cdr (assoc managed-mode eglot-server-programs
+                            (lambda (m1 m2)
+                              (or (eq m1 m2)
+                                  (and (listp m1) (memq m2 m1)))))))
          (class (or (and (consp guess) (symbolp (car guess))
                          (prog1 (car guess) (setq guess (cdr guess))))
                     'eglot-lsp-server))