[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[nongnu] elpa/doc-show-inline 4ab5c6c88c 05/10: Add eglot support
From: |
ELPA Syncer |
Subject: |
[nongnu] elpa/doc-show-inline 4ab5c6c88c 05/10: Add eglot support |
Date: |
Sun, 8 Jan 2023 02:59:03 -0500 (EST) |
branch: elpa/doc-show-inline
commit 4ab5c6c88c5911038a6504389d5408a3b8c9325e
Author: Campbell Barton <ideasman42@gmail.com>
Commit: Campbell Barton <ideasman42@gmail.com>
Add eglot support
---
changelog.rst | 3 +++
doc-show-inline.el | 56 ++++++++++++++++++++++++++++++++++++------------------
readme.rst | 5 +++--
3 files changed, 43 insertions(+), 21 deletions(-)
diff --git a/changelog.rst b/changelog.rst
index 8f98699421..d13f06cd97 100644
--- a/changelog.rst
+++ b/changelog.rst
@@ -3,6 +3,9 @@
Change Log
##########
+- 2022-11-20
+ - Fix use with ``eglot``.
+
- 2022-04-19
- Fix use of marker-position on an integer.
diff --git a/doc-show-inline.el b/doc-show-inline.el
index 2fc0ea149e..a1b9d89e79 100644
--- a/doc-show-inline.el
+++ b/doc-show-inline.el
@@ -8,7 +8,7 @@
;; URL: https://codeberg.org/ideasman42/emacs-doc-show-inline
;; Keywords: convenience
;; Version: 0.1
-;; Package-Requires: ((emacs "26.2"))
+;; Package-Requires: ((emacs "27.1"))
;;; Commentary:
@@ -109,7 +109,12 @@ This hook is called instead of the mode hooks such as:
`c-mode-hook' and `after-change-major-mode-hook'.")
(defvar-local doc-show-inline-locations 'doc-show-inline-locations-default
- "Scans the current buffer for locations that `xref' should look-up.")
+ "Scans the current buffer for locations that `xref' should look-up.
+The result of each item must be a (symbol . position) cons cell,
+where the symbol is a string used for the look-up and
+the position is it's beginning in the buffer.
+
+Note that this function may move the POINT without using `save-excursion'.")
(defvar-local doc-show-inline-extract-doc 'doc-show-inline-extract-doc-default
"Function to extract the doc-string given the destination buffer.
@@ -136,7 +141,7 @@ When unset, the :filter property from
`doc-show-inline-mode-defaults' is used.")
;; Allow disabling for debugging.
(defconst doc-show-inline--use-lookup-cache t)
;; Always set when the mode is active:
-;; - key: the symbol as a string (from `xref-backend-identifier-at-point'),
+;; - key: the symbol as a string (from `xref-backend-identifier-at-point' or
from `imenu'),
;; - value: the syntax-highlighted string to display (from
`doc-show-inline--doc-from-xref').
(defvar-local doc-show-inline--lookup-cache nil)
@@ -437,7 +442,11 @@ the point should not be moved by this function."
(pair nil)
(mark nil)
(imstack nil)
- (result nil))
+ (result nil)
+
+ ;; As the results differ between back-ends, some custom handling is
needed.
+ (xref-backend (xref-find-backend)))
+
;; Elements of alist are either ("name" . marker), or
;; ("submenu" ("name" . marker) ... ). The list can be
;; Arbitrarily nested.
@@ -462,8 +471,28 @@ the point should not be moved by this function."
(marker-position mark))
(t ;; Integer.
mark))))
+
(unless (or (and pos-beg (<= pos pos-beg)) (and pos-end (>=
pos pos-end)))
- (push pos result))))))
+ (goto-char pos)
+ (let ((sym nil))
+ (cond
+ ((eq xref-backend 'eglot)
+ ;; EGLOT mode has some differences.
+ ;; - `xref-backend-identifier-at-point' isn't
functional.
+ ;; - The point is at the beginning of the line.
+ ;; For this reason, it's necessary to search for `sym'
& set the
+ ;; position to this.
+ (setq sym (car pair))
+ (unless (looking-at-p (regexp-quote sym))
+ ;; In most cases limiting by `line-end-position' is
sufficient.
+ (save-match-data
+ (when (search-forward sym pos-end t)
+ (setq pos (- (point) (length sym)))))))
+ (t
+ ;; This works for `xref-lsp'.
+ (setq sym (xref-backend-identifier-at-point
xref-backend))))
+
+ (push (cons sym pos) result)))))))
(t
(setq alist (car imstack))
(setq imstack (cdr imstack)))))
@@ -690,28 +719,17 @@ XREF-BACKEND is the back-end used to find this symbol."
buf))
(while points
- (let ((pos (pop points)))
+ (pcase-let ((`(,sym . ,pos) (pop points)))
(cond
((null (doc-show-inline--pos-in-overlays pos
overlays-in-view))
(doc-show-inline--log-info
"symbol \"%s\" in %S at point %d is not in the
overlay list"
- (save-excursion
- (goto-char pos)
- (xref-backend-identifier-at-point xref-backend))
+ sym
(current-buffer)
pos))
(t
(goto-char pos)
- (let ((sym (xref-backend-identifier-at-point
xref-backend)))
- (cond
- ((null sym)
- (doc-show-inline--log-fail
- "can't find symbol in %S at point %d using
`xref-backend' %S"
- (current-buffer)
- pos
- xref-backend))
- (t
- (doc-show-inline--idle-handle-pos pos sym
xref-backend)))))))))
+ (doc-show-inline--idle-handle-pos pos sym
xref-backend))))))
;; Close any buffers loaded only for the purpose of extracting
text.
(mapc 'kill-buffer temporary-buffers)))))
diff --git a/readme.rst b/readme.rst
index da32c6fb71..ff68de1999 100644
--- a/readme.rst
+++ b/readme.rst
@@ -116,7 +116,8 @@ These functions can overridden to adjust behavior.
so by default they are ignored to avoid unnecessary overhead.
``doc-show-inline-locations`` (symbol ``'doc-show-inline-locations-default``)
- A function that returns a list of points that contain symbols from the
current buffer.
+ A function that returns a list of ``(symbol . point)`` cons cells,
+ containing symbols and their starting positions in th current buffer.
By default ``imenu`` is used for this purpose.
@@ -134,7 +135,7 @@ Details
- This package only directly depends on ``imenu`` and ``xref``,
so any languages that store function definitions in external files will work.
- While there are no direct dependencies on ``lsp-mode``,
- this has only been tested using ``lsp-mode`` with both ``ccls`` and
``clangd`` backends.
+ this has been tested using ``lsp-mode`` and ``eglot`` with both ``ccls`` and
``clangd`` backends.
- Documentation overlays are added while idle.
- Any comment before the function is considered it's doc-string,
*(unless it's the trailing comment of a non-blank line).*
- [nongnu] elpa/doc-show-inline updated (0cceb39df3 -> 87a40fa269), ELPA Syncer, 2023/01/08
- [nongnu] elpa/doc-show-inline 99c18a3b09 01/10: Change URL to codeberg (update URL), ELPA Syncer, 2023/01/08
- [nongnu] elpa/doc-show-inline 7009982e81 02/10: readme: update image links, ELPA Syncer, 2023/01/08
- [nongnu] elpa/doc-show-inline 0e8f4891f1 03/10: Cleanup: sharp-quote function, ELPA Syncer, 2023/01/08
- [nongnu] elpa/doc-show-inline ba8ad83210 06/10: Cleanup: use private naming for mode management functions, ELPA Syncer, 2023/01/08
- [nongnu] elpa/doc-show-inline 1f4c13ce7d 08/10: Cleanup: emacs native format, ELPA Syncer, 2023/01/08
- [nongnu] elpa/doc-show-inline 87a40fa269 10/10: Cleanup: no need to sharp-quote lambda, ELPA Syncer, 2023/01/08
- [nongnu] elpa/doc-show-inline dabb7bdad7 04/10: Cleanup: sharp-quote function, ELPA Syncer, 2023/01/08
- [nongnu] elpa/doc-show-inline 4ab5c6c88c 05/10: Add eglot support,
ELPA Syncer <=
- [nongnu] elpa/doc-show-inline 3b70615751 07/10: Cleanup: format, ELPA Syncer, 2023/01/08
- [nongnu] elpa/doc-show-inline f2c98aa329 09/10: Cleanup: emacs native format (update), ELPA Syncer, 2023/01/08