[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/eglot 81d035f 04/26: Fix #52: Use entire line as xref s
From: |
João Távora |
Subject: |
[elpa] externals/eglot 81d035f 04/26: Fix #52: Use entire line as xref summary when available |
Date: |
Sun, 9 Dec 2018 19:11:25 -0500 (EST) |
branch: externals/eglot
commit 81d035fa216de25801ac94f2a7127c86ecfe96ee
Author: João Távora <address@hidden>
Commit: João Távora <address@hidden>
Fix #52: Use entire line as xref summary when available
After an original implementation by Michael Livshin. Also close #127.
* eglot.el (eglot--xref-make): Rework.
(xref-backend-definitions, xref-backend-references)
(xref-backend-apropos): Simplify call to `eglot--xref-make'.
---
eglot.el | 38 ++++++++++++++++++++++++++++----------
1 file changed, 28 insertions(+), 10 deletions(-)
diff --git a/eglot.el b/eglot.el
index 4996f5b..8ba483b 100644
--- a/eglot.el
+++ b/eglot.el
@@ -1478,13 +1478,31 @@ DUMMY is ignored."
(advice-add 'xref-find-definitions :after #'eglot--xref-reset-known-symbols)
(advice-add 'xref-find-references :after #'eglot--xref-reset-known-symbols)
-(defun eglot--xref-make (name uri position)
- "Like `xref-make' but with LSP's NAME, URI and POSITION."
- (cl-destructuring-bind (&key line character) position
- (xref-make name (xref-make-file-location
- (eglot--uri-to-path uri)
- ;; F!@(#*&#$)CKING OFF-BY-ONE again
- (1+ line) character))))
+(defun eglot--xref-make (name uri range)
+ "Like `xref-make' but with LSP's NAME, URI and RANGE.
+Try to visit the target file for a richer summary line."
+ (pcase-let*
+ ((`(,beg . ,end) (eglot--range-region range))
+ (file (eglot--uri-to-path uri))
+ (visiting (find-buffer-visiting file))
+ (collect (lambda ()
+ (eglot--widening
+ (pcase-let* ((`(,beg . ,end) (eglot--range-region range))
+ (bol (progn (goto-char beg) (point-at-bol)))
+ (substring (buffer-substring bol
(point-at-eol)))
+ (tab-width 1))
+ (add-face-text-property (- beg bol) (- end bol) 'highlight
+ t substring)
+ (list substring (1+ (current-line)) (current-column))))))
+ (`(,summary ,line ,column)
+ (cond
+ (visiting (with-current-buffer visiting (funcall collect)))
+ ((file-readable-p file) (with-temp-buffer (insert-file-contents file)
+ (funcall collect)))
+ (t ;; fall back to the "dumb strategy"
+ (let ((start (cl-getf range :start)))
+ (list name (1+ (cl-getf start :line)) (cl-getf start
:character)))))))
+ (xref-make summary (xref-make-file-location file line column))))
(defun eglot--sort-xrefs (xrefs)
(sort xrefs
@@ -1537,7 +1555,7 @@ DUMMY is ignored."
(if (vectorp definitions) definitions (vector definitions)))))
(eglot--sort-xrefs
(mapcar (jsonrpc-lambda (&key uri range)
- (eglot--xref-make identifier uri (plist-get range :start)))
+ (eglot--xref-make identifier uri range))
locations))))
(cl-defmethod xref-backend-references ((_backend (eql eglot)) identifier)
@@ -1552,7 +1570,7 @@ DUMMY is ignored."
(eglot--sort-xrefs
(mapcar
(jsonrpc-lambda (&key uri range)
- (eglot--xref-make identifier uri (plist-get range :start)))
+ (eglot--xref-make identifier uri range))
(jsonrpc-request (eglot--current-server-or-lose)
:textDocument/references
(append
@@ -1566,7 +1584,7 @@ DUMMY is ignored."
(mapcar
(jsonrpc-lambda (&key name location &allow-other-keys)
(cl-destructuring-bind (&key uri range) location
- (eglot--xref-make name uri (plist-get range :start))))
+ (eglot--xref-make name uri range)))
(jsonrpc-request (eglot--current-server-or-lose)
:workspace/symbol
`(:query ,pattern))))))
- [elpa] externals/eglot updated (f291816 -> 23accee), João Távora, 2018/12/09
- [elpa] externals/eglot 11eb256 02/26: Fix #164: CodeAction command can be a Command object (#165), João Távora, 2018/12/09
- [elpa] externals/eglot 10b238b 03/26: Revert "Fix #164: CodeAction command can be a Command object (#165)", João Távora, 2018/12/09
- [elpa] externals/eglot cddab30 06/26: * eglot.el (eglot--current-column): New helper., João Távora, 2018/12/09
- [elpa] externals/eglot 53bfdb7 19/26: Per #173: adjust previous fix, João Távora, 2018/12/09
- [elpa] externals/eglot 9fb5f0c 05/26: Per #52, #127: Improve performance of xref summary line collection, João Távora, 2018/12/09
- [elpa] externals/eglot 5bbf884 11/26: Use eglot--dbind for destructuring, João Távora, 2018/12/09
- [elpa] externals/eglot 81d035f 04/26: Fix #52: Use entire line as xref summary when available,
João Távora <=
- [elpa] externals/eglot 96169d8 18/26: Per #173: fix bug introduced by previous fix, João Távora, 2018/12/09
- [elpa] externals/eglot 4874c22 14/26: Use javascript-typescript-langserver for typescript-mode (#174), João Távora, 2018/12/09
- [elpa] externals/eglot 66a1704 22/26: Scratch/use elpa flymake (#178), João Távora, 2018/12/09
- [elpa] externals/eglot f63bedb 20/26: Fix #144: Use eglot--dbind and eglot--lambda throughout, João Távora, 2018/12/09
- [elpa] externals/eglot 3922cf3 01/26: Per #144, #156: control strictness towards incoming LSP messages, João Távora, 2018/12/09
- [elpa] externals/eglot 8140be5 07/26: Touch up last commit, João Távora, 2018/12/09
- [elpa] externals/eglot 95ef9e1 08/26: Robustify tests against (M)ELPA eglot installations, João Távora, 2018/12/09
- [elpa] externals/eglot 38da3d3 15/26: Fix #159: Properly clear old diagnostics when making new ones, João Távora, 2018/12/09
- [elpa] externals/eglot 444a8c3 16/26: Per #173: robustify previous fix against non-standard insertion bindings, João Távora, 2018/12/09
- [elpa] externals/eglot 1d42be4 13/26: Close #173: support completionContext to help servers like ccls, João Távora, 2018/12/09