;; Maintainer: João Távora <joaotavora@gmail.com>
;; URL: https://github.com/joaotavora/eglot
;; Keywords: convenience, languages
-;; Package-Requires: ((emacs "26.3") (compat "27.1") (eldoc "1.14.0") (external-completion "0.1") (flymake "1.2.1") (jsonrpc "1.0.24") (project "0.9.8") (seq "2.23") (xref "1.6.2"))
+;; Package-Requires: ((emacs "26.3") (eldoc "1.14.0") (external-completion "0.1") (flymake "1.2.1") (jsonrpc "1.0.24") (project "0.9.8") (seq "2.23") (xref "1.6.2"))
;; This is a GNU ELPA :core package. Avoid adding functionality
;; that is not available in the version of Emacs recorded above or any
(require 'text-property-search nil t)
(require 'diff-mode)
(require 'diff)
-(require 'compat)
;; These dependencies are also GNU ELPA core packages. Because of
;; bug#62576, since there is a risk that M-x package-install, despite
automatically)."
(lambda (&optional interactive _project)
;; JT@2021-06-13: This function is way more complicated than it
- ;; could be because it accounts for the fact that Compat's
- ;; `executable-find' may take much longer to execute on
+ ;; could be because it accounts for the fact that
+ ;; `eglot--executable-find' may take much longer to execute on
;; remote files.
(let* ((listified (cl-loop for a in alternatives
collect (if (listp a) a (list a))))
nil)
(interactive
(let* ((augmented (mapcar (lambda (a)
- (let ((found (compat-call executable-find
+ (let ((found (eglot--executable-find
(car a) t)))
(and found
(cons (car a) (cons found (cdr a))))))
nil))))
(t
(cl-loop for (p . args) in listified
- for probe = (compat-call executable-find p t)
+ for probe = (eglot--executable-find p t)
when probe return (cons probe args)
finally (funcall err)))))))
(defconst eglot--{} (make-hash-table :size 0) "The empty JSON object.")
+(defun eglot--executable-find (command &optional remote)
+ "Like Emacs 27's `executable-find', ignore REMOTE on Emacs 26."
+ (if (>= emacs-major-version 27) (executable-find command remote)
+ (executable-find command)))
+
(defun eglot--accepted-formats ()
(if (and (not eglot-prefer-plaintext) (fboundp 'gfm-view-mode))
["markdown" "plaintext"] ["plaintext"]))
main-mode base-prompt))
((and program
(not (file-name-absolute-p program))
- (not (compat-call executable-find program t)))
+ (not (eglot--executable-find program t)))
(if full-program-invocation
(concat (eglot--format
"[eglot] I guess you want to run `%s'"
:clientInfo
(append
'(:name "Eglot")
- (let ((v "1.17"))
+ (let ((v (and (featurep 'package)
+ (package-get-version))))
(and v (list :version v))))
;; Maybe turn trampy `/ssh:foo@bar:/path/to/baz.py'
;; into `/path/to/baz.py', so LSP groks it.
;;;
(defun eglot--format (format &rest args)
"Like `format`, but substitutes quotes."
- (apply #'format (substitute-quotes format) args))
+ (apply #'format (if (functionp 'substitute-quotes)
+ (substitute-quotes format)
+ format)
+ args))
(defun eglot--error (format &rest args)
"Error out with FORMAT with ARGS."
(font-lock-ensure)
(goto-char (point-min))
(let ((inhibit-read-only t))
- (while (setq match (text-property-search-forward 'invisible))
- (delete-region (prop-match-beginning match)
- (prop-match-end match))))
+ (when (fboundp 'text-property-search-forward)
+ (while (setq match (text-property-search-forward 'invisible))
+ (delete-region (prop-match-beginning match)
+ (prop-match-end match)))))
(string-trim (buffer-string))))))
(defun eglot--read-server (prompt &optional dont-if-just-the-one)