[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[nongnu] elpa/doc-show-inline 1f4c13ce7d 08/10: Cleanup: emacs native fo
From: |
ELPA Syncer |
Subject: |
[nongnu] elpa/doc-show-inline 1f4c13ce7d 08/10: Cleanup: emacs native format |
Date: |
Sun, 8 Jan 2023 02:59:06 -0500 (EST) |
branch: elpa/doc-show-inline
commit 1f4c13ce7d0416b9bfaffb5db0e7c882b11a3a3f
Author: Campbell Barton <ideasman42@gmail.com>
Commit: Campbell Barton <ideasman42@gmail.com>
Cleanup: emacs native format
---
doc-show-inline.el | 829 ++++++++++++++++++++++++++---------------------------
1 file changed, 399 insertions(+), 430 deletions(-)
diff --git a/doc-show-inline.el b/doc-show-inline.el
index 1d5323c030..453453178f 100644
--- a/doc-show-inline.el
+++ b/doc-show-inline.el
@@ -82,9 +82,9 @@ Note that the `background' is initialized using
;; TODO, document and make public.
(defvar doc-show-inline-mode-defaults
(list
- (cons 'c-mode (list :filter 'doc-show-inline-filter-for-cc-mode))
- (cons 'cc-mode (list :filter 'doc-show-inline-filter-for-cc-mode))
- (cons 'objc-mode (list :filter 'doc-show-inline-filter-for-cc-mode)))
+ (cons 'c-mode (list :filter 'doc-show-inline-filter-for-cc-mode))
+ (cons 'cc-mode (list :filter 'doc-show-inline-filter-for-cc-mode))
+ (cons 'objc-mode (list :filter 'doc-show-inline-filter-for-cc-mode)))
"An association-list of default functions.")
(defcustom doc-show-inline-use-logging nil
@@ -167,49 +167,45 @@ When unset, the :filter property from
`doc-show-inline-mode-defaults' is used.")
(defmacro doc-show-inline--with-advice (fn-orig where fn-advice &rest body)
"Execute BODY with WHERE advice on FN-ORIG temporarily enabled."
(declare (indent 3))
- `
- (let ((fn-advice-var ,fn-advice))
- (unwind-protect
- (progn
- (advice-add ,fn-orig ,where fn-advice-var)
- ,@body)
- (advice-remove ,fn-orig fn-advice-var))))
+ `(let ((fn-advice-var ,fn-advice))
+ (unwind-protect
+ (progn
+ (advice-add ,fn-orig ,where fn-advice-var)
+ ,@body)
+ (advice-remove ,fn-orig fn-advice-var))))
(defun doc-show-inline--color-highlight (color factor)
"Tint between COLOR by FACTOR in (-1..1).
Where positive brighten and negative numbers darken."
- (let
- (
- (value (color-values color))
- (factor-int (truncate (* 65535 factor))))
+ (let ((value (color-values color))
+ (factor-int (truncate (* 65535 factor))))
(apply #'format
- (cons
- "#%02x%02x%02x"
- (mapcar
- #'
- (lambda (n)
- ;; Shift by -8 to map the value returned by `color values':
- ;; 0..65535 to 0..255 for `#RRGGBB` string formatting.
- (ash (min 65535 (max 0 (truncate (+ (nth n value) factor-int))))
-8))
- (number-sequence 0 2))))))
+ (cons
+ "#%02x%02x%02x"
+ (mapcar
+ #'(lambda (n)
+ ;; Shift by -8 to map the value returned by `color values':
+ ;; 0..65535 to 0..255 for `#RRGGBB` string formatting.
+ (ash (min 65535 (max 0 (truncate (+ (nth n value)
factor-int)))) -8))
+ (number-sequence 0 2))))))
(defun doc-show-inline--buffer-substring-with-overlay-props (pos-beg pos-end)
"Return text between POS-BEG and POS-END including overlay properties."
(let
- ( ;; Extract text and possible overlays.
- (text (buffer-substring pos-beg pos-end))
- (text-length (- pos-end pos-beg))
- (overlays (overlays-in pos-beg pos-end)))
+ ( ;; Extract text and possible overlays.
+ (text (buffer-substring pos-beg pos-end))
+ (text-length (- pos-end pos-beg))
+ (overlays (overlays-in pos-beg pos-end)))
(while overlays
(let ((ov (pop overlays)))
(let ((face-prop (overlay-get ov 'face)))
(when face-prop
(add-face-text-property
- (max (- (overlay-start ov) pos-beg) 0)
- (min (- (overlay-end ov) pos-beg) text-length)
- face-prop
- t
- text)))))
+ (max (- (overlay-start ov) pos-beg) 0)
+ (min (- (overlay-end ov) pos-beg) text-length)
+ face-prop
+ t
+ text)))))
text))
@@ -229,15 +225,13 @@ Where positive brighten and negative numbers darken."
(defmacro doc-show-inline--log-fail (&rest args)
"Log failure messages formatted with ARGS."
- `
- (when doc-show-inline-use-logging
- (doc-show-inline--log-type-impl "Fail: " (format ,@args))))
+ `(when doc-show-inline-use-logging
+ (doc-show-inline--log-type-impl "Fail: " (format ,@args))))
(defmacro doc-show-inline--log-info (&rest args)
"Log info messages formatted with ARGS."
- `
- (when doc-show-inline-use-logging
- (doc-show-inline--log-type-impl "Info: " (format ,@args))))
+ `(when doc-show-inline-use-logging
+ (doc-show-inline--log-type-impl "Info: " (format ,@args))))
;; ---------------------------------------------------------------------------
@@ -253,33 +247,32 @@ The point will be located over the symbol (typically at
it's beginning),
the point should not be moved by this function."
(let ((prefix (buffer-substring-no-properties (line-beginning-position)
(point))))
(cond
- ;; Ignore defines, they never have external docs.
- ;; Removing will work, it just performs an unnecessary lookup.
- ((string-match-p "[ \t]*#[ \t]*define[ \t]+" prefix)
- nil)
- ;; Ignore static function doc-strings.
- ;; Removing will work, it just performs an unnecessary lookup.
- ((string-match-p "\\_<static\\_>" prefix)
- nil)
- ;; Forward declaring structs shouldn't show documentation, e.g:
- ;; struct SomeStruct;
- ;; while this is in some sense a personal preference,
- ;; forward declarations are mostly used to prevent warnings when these
- ;; structs are used as parameters.
- ;; So it makes sense to ignore them.
- ( ;; Match: struct sym;
- (and
- (string-match-p "^\\_<struct\\_>" prefix)
- (equal ?\; (char-after (+ (point) (length sym)))))
- nil)
- ;; Including `typedef' rarely gains anything from in-lining doc-string
- ;; Similar to `struct':
- ;; - This is already the declaration so the doc-string is already
available.
- ;; - This forward declares an opaque type.
- ((string-match-p "^\\_<typedef\\_>" prefix)
- nil)
- (t
- t))))
+ ;; Ignore defines, they never have external docs.
+ ;; Removing will work, it just performs an unnecessary lookup.
+ ((string-match-p "[ \t]*#[ \t]*define[ \t]+" prefix)
+ nil)
+ ;; Ignore static function doc-strings.
+ ;; Removing will work, it just performs an unnecessary lookup.
+ ((string-match-p "\\_<static\\_>" prefix)
+ nil)
+ ;; Forward declaring structs shouldn't show documentation, e.g:
+ ;; struct SomeStruct;
+ ;; while this is in some sense a personal preference,
+ ;; forward declarations are mostly used to prevent warnings when these
+ ;; structs are used as parameters.
+ ;; So it makes sense to ignore them.
+ ( ;; Match: struct sym;
+ (and (string-match-p "^\\_<struct\\_>" prefix)
+ (equal ?\; (char-after (+ (point) (length sym)))))
+ nil)
+ ;; Including `typedef' rarely gains anything from in-lining doc-string
+ ;; Similar to `struct':
+ ;; - This is already the declaration so the doc-string is already
available.
+ ;; - This forward declares an opaque type.
+ ((string-match-p "^\\_<typedef\\_>" prefix)
+ nil)
+ (t
+ t))))
(defun doc-show-inline-extract-doc-default (sym)
"Extract doc-string for SYM."
@@ -291,86 +284,80 @@ the point should not be moved by this function."
;; Move one character into the comment.
(goto-char pos-end)
(cond
- ((forward-comment -1)
- (let
- (
- (pos-beg (point))
+ ((forward-comment -1)
+ (let ((pos-beg (point))
(pos-beg-of-line (line-beginning-position)))
- (cond
- (
- ;; Ensure the comment is not a trailing comment of a previous
line.
- (not
- (eq
- pos-beg-of-line
- (save-excursion
- (skip-chars-backward " \t" pos-beg-of-line)
- (point))))
- (doc-show-inline--log-info
- "symbol \"%s\" in %S at point %d is previous lines trailing
comment"
- sym
- (current-buffer)
- (point))
- ;; Skip this comment.
- nil)
-
- ;; Optionally exclude blank lines between the comment and the
function definition.
- (
- (and
- ;; Checking blank lines?
- (not (zerop doc-show-inline-exclude-blank-lines))
- (let ((blank-lines 0))
- (save-excursion
- (goto-char pos-end)
- ;; It's important the point is at the beginning of the line
- ;; so `looking-at-p' works as expected.
- (beginning-of-line)
- (while
- (and
- (looking-at-p "[[:blank:]]*$")
- (< (setq blank-lines (1+ blank-lines))
doc-show-inline-exclude-blank-lines)
- (zerop (forward-line -1)))))
- (eq blank-lines doc-show-inline-exclude-blank-lines)))
+ (cond
+ (
+ ;; Ensure the comment is not a trailing comment of a previous line.
+ (not
+ (eq
+ pos-beg-of-line
+ (save-excursion
+ (skip-chars-backward " \t" pos-beg-of-line)
+ (point))))
+ (doc-show-inline--log-info
+ "symbol \"%s\" in %S at point %d is previous lines trailing comment"
+ sym
+ (current-buffer)
+ (point))
+ ;; Skip this comment.
+ nil)
+
+ ;; Optionally exclude blank lines between the comment and the
function definition.
+ ((and
+ ;; Checking blank lines?
+ (not (zerop doc-show-inline-exclude-blank-lines))
+ (let ((blank-lines 0))
+ (save-excursion
+ (goto-char pos-end)
+ ;; It's important the point is at the beginning of the line
+ ;; so `looking-at-p' works as expected.
+ (beginning-of-line)
+ (while (and (looking-at-p "[[:blank:]]*$")
+ (< (setq blank-lines (1+ blank-lines))
+ doc-show-inline-exclude-blank-lines)
+ (zerop (forward-line -1)))))
+ (eq blank-lines doc-show-inline-exclude-blank-lines)))
- (doc-show-inline--log-info
- "comment \"%s\" in %S at point %d was skipped because of at
least %d blank lines"
- sym
- (current-buffer)
- pos-beg
- doc-show-inline-exclude-blank-lines)
-
- ;; Found at least `doc-show-inline-exclude-blank-lines'
blank-lines, skipping.
- nil)
-
- ;; Optionally exclude a regexp.
- (
- (and
- doc-show-inline-exclude-regexp
- (save-match-data
- (goto-char pos-beg)
- (search-forward-regexp doc-show-inline-exclude-regexp
pos-end t)))
+ (doc-show-inline--log-info
+ "comment \"%s\" in %S at point %d was skipped because of at least
%d blank lines"
+ sym
+ (current-buffer)
+ pos-beg
+ doc-show-inline-exclude-blank-lines)
- (doc-show-inline--log-info
- "comment \"%s\" in %S at point %d was skipped because of regex
match with %S"
- sym
- (current-buffer)
- pos-beg
- doc-show-inline-exclude-regexp)
-
- ;; Skip this comment.
- nil)
-
- (t
- ;; Success.
- (cons pos-beg-of-line pos-end)))))
- (t
- (doc-show-inline--log-info
- "symbol \"%s\" in %S at point %d has no comment before it"
- sym
- (current-buffer)
- (point))
- ;; Failure.
- nil))))
+ ;; Found at least `doc-show-inline-exclude-blank-lines' blank-lines,
skipping.
+ nil)
+
+ ;; Optionally exclude a regexp.
+ ((and doc-show-inline-exclude-regexp
+ (save-match-data
+ (goto-char pos-beg)
+ (search-forward-regexp doc-show-inline-exclude-regexp pos-end
t)))
+
+ (doc-show-inline--log-info
+ "comment \"%s\" in %S at point %d was skipped because of regex
match with %S"
+ sym
+ (current-buffer)
+ pos-beg
+ doc-show-inline-exclude-regexp)
+
+ ;; Skip this comment.
+ nil)
+
+ (t
+ ;; Success.
+ (cons pos-beg-of-line pos-end)))))
+ (t
+ (doc-show-inline--log-info
+ "symbol \"%s\" in %S at point %d has no comment before it"
+ sym
+ (current-buffer)
+ (point))
+ ;; Failure.
+ nil))))
;; ---------------------------------------------------------------------------
@@ -380,38 +367,37 @@ the point should not be moved by this function."
"Ensure `doc-show-inline-face' has a background color."
(when (eq 'unspecified (face-attribute 'doc-show-inline-face :background))
(let*
- ( ;; Tint the color.
- (default-color (face-attribute 'default :background))
- (default-tint
+ ( ;; Tint the color.
+ (default-color (face-attribute 'default :background))
+ (default-tint
(doc-show-inline--color-highlight
- default-color
- doc-show-inline-face-background-highlight)))
+ default-color
+ doc-show-inline-face-background-highlight)))
;; Ensure there is some change, otherwise tint in the opposite direction.
(when (equal default-color default-tint)
(setq default-tint
- (doc-show-inline--color-highlight
- default-color
- (- doc-show-inline-face-background-highlight))))
+ (doc-show-inline--color-highlight
+ default-color
+ (- doc-show-inline-face-background-highlight))))
(set-face-attribute 'doc-show-inline-face nil :background
default-tint))))
(defun doc-show-inline--overlays-remove (&optional pos-beg pos-end)
"Remove overlays between POS-BEG & POS-END."
(cond
- ;; When logging remove overlays one at a time.
- (doc-show-inline-use-logging
- (let ((overlays-in-view (overlays-in (or pos-beg (point-min)) (or
pos-end (point-max)))))
- (when overlays-in-view
- (while overlays-in-view
- (let ((ov (pop overlays-in-view)))
- (when (and (overlay-get ov 'doc-show-inline) (overlay-buffer ov))
- (doc-show-inline--log-info
- "removing overlay in %S at point %d"
- (current-buffer)
- ;; Start & end are the same.
- (overlay-start ov))
- (delete-overlay ov)))))))
- (t
- (remove-overlays pos-beg pos-end 'doc-show-inline t))))
+ ;; When logging remove overlays one at a time.
+ (doc-show-inline-use-logging
+ (let ((overlays-in-view (overlays-in (or pos-beg (point-min)) (or pos-end
(point-max)))))
+ (when overlays-in-view
+ (while overlays-in-view
+ (let ((ov (pop overlays-in-view)))
+ (when (and (overlay-get ov 'doc-show-inline) (overlay-buffer ov))
+ (doc-show-inline--log-info
+ "removing overlay in %S at point %d" (current-buffer)
+ ;; Start & end are the same.
+ (overlay-start ov))
+ (delete-overlay ov)))))))
+ (t
+ (remove-overlays pos-beg pos-end 'doc-show-inline t))))
(defun doc-show-inline--pos-in-overlays (pos overlays)
"Return non-nil when POS is within OVERLAYS."
@@ -431,73 +417,69 @@ the point should not be moved by this function."
;; Ensure `imenu--index-alist' is populated.
(unless imenu--index-alist
(condition-case-unless-debug err
- ;; Note that in some cases a file will fail to parse,
- ;; typically when the file is intended for another platform (for
example).
- (imenu--make-index-alist)
+ ;; Note that in some cases a file will fail to parse,
+ ;; typically when the file is intended for another platform (for
example).
+ (imenu--make-index-alist)
(error
- (doc-show-inline--log-fail
- "IMENU couldn't access symbols (failed to parse?): %s"
- (error-message-string err)))))
- (let
- (
- (alist imenu--index-alist)
- (pair nil)
- (mark nil)
- (imstack nil)
- (result nil)
-
- ;; As the results differ between back-ends, some custom handling is
needed.
- (xref-backend (xref-find-backend)))
+ (doc-show-inline--log-fail
+ "IMENU couldn't access symbols (failed to parse?): %s"
+ (error-message-string err)))))
+ (let ((alist imenu--index-alist)
+ (pair nil)
+ (mark nil)
+ (imstack 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.
(while (or alist imstack)
(cond
- (alist
- (setq pair (car-safe alist))
- (setq alist (cdr-safe alist))
- (cond
- ((atom pair)) ;; Skip anything not a cons.
-
- ((imenu--subalist-p pair)
- (setq imstack (cons alist imstack))
- (setq alist (cdr pair)))
-
- ((number-or-marker-p (setq mark (cdr pair)))
- (let
- (
- (pos
- (cond
- ((markerp mark)
- (marker-position mark))
- (t ;; Integer.
- mark))))
-
- (unless (or (and pos-beg (<= pos pos-beg)) (and pos-end (>=
pos pos-end)))
- (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)))))
+ (alist
+ (setq pair (car-safe alist))
+ (setq alist (cdr-safe alist))
+ (cond
+ ((atom pair)) ;; Skip anything not a cons.
+
+ ((imenu--subalist-p pair)
+ (setq imstack (cons alist imstack))
+ (setq alist (cdr pair)))
+
+ ((number-or-marker-p (setq mark (cdr pair)))
+ (let ((pos
+ (cond
+ ((markerp mark)
+ (marker-position mark))
+ (t ;; Integer.
+ mark))))
+
+ (unless (or (and pos-beg (<= pos pos-beg)) (and pos-end (>= pos
pos-end)))
+ (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)))))
result))
@@ -509,17 +491,19 @@ Argument XREF-BACKEND is used to avoid multiple calls to
`xref-find-backend'."
(let ((xref-list nil))
(doc-show-inline--with-advice #'xref--not-found-error :override (lambda
(_kind _input) nil)
(doc-show-inline--with-advice #'xref--show-defs :override
- (lambda (fetcher _display-action) (setq xref-list (funcall fetcher)))
+ (lambda (fetcher _display-action)
+ (setq xref-list (funcall fetcher)))
(let ((xref-prompt-for-identifier nil))
;; Needed to suppress `etags' from requesting a file.
(doc-show-inline--with-advice #'read-file-name :override
- (lambda (&rest _args)
- (doc-show-inline--log-info
- "XREF lookup %S requested a file name for backend %S"
- (current-buffer)
- xref-backend)
- ;; File that doesn't exist.
- (user-error "Doc-show-inline: ignoring request for file read"))
+ (lambda (&rest _args)
+ (doc-show-inline--log-info
+ "XREF lookup %S requested a file
name for backend %S"
+ (current-buffer)
+ xref-backend)
+ ;; File that doesn't exist.
+ (user-error
+ "Doc-show-inline: ignoring request
for file read"))
(with-demoted-errors "%S"
(xref-find-definitions sym))))))
xref-list))
@@ -529,25 +513,23 @@ Argument XREF-BACKEND is used to avoid multiple calls to
`xref-find-backend'."
;; Build a list of comments from the `xref' list (which may find multiple
sources).
;; In most cases only a single item is found.
;; Nevertheless, best combine all so a doc-string will be extracted from at
least one.
- (let
- (
- (text-results nil)
- (current-buf (current-buffer)))
+ (let ((text-results nil)
+ (current-buf (current-buffer)))
;; Don't enable additional features when loading files
;; only for the purpose of reading their comments.
;; `doc-show-inline-fontify-hook' can be used to enable features needed
for comment extraction.
(save-excursion
(doc-show-inline--with-advice #'run-mode-hooks :override
- (lambda (_hooks)
- (with-demoted-errors "doc-show-inline-buffer-hook: %S"
- (run-hooks 'doc-show-inline-buffer-hook)))
+ (lambda (_hooks)
+ (with-demoted-errors
"doc-show-inline-buffer-hook: %S"
+ (run-hooks
'doc-show-inline-buffer-hook)))
(dolist (item xref-list)
(let*
- ( ;; This sets '(point)' which is OK in this case.
- (marker (xref-location-marker (xref-item-location item)))
- (buf (marker-buffer marker)))
+ ( ;; This sets '(point)' which is OK in this case.
+ (marker (xref-location-marker (xref-item-location item)))
+ (buf (marker-buffer marker)))
;; Ignore matches in the same buffer.
;; While it's possible doc-strings could be at another location
within this buffer,
;; in practice, this is almost never done.
@@ -567,27 +549,25 @@ Argument XREF-BACKEND is used to avoid multiple calls to
`xref-find-backend'."
(with-demoted-errors "doc-show-inline-fontify-hook: %S"
(run-hook-with-args 'doc-show-inline-fontify-hook
pos-beg pos-end))
- (let
- (
- (text
-
(doc-show-inline--buffer-substring-with-overlay-props pos-beg pos-end)))
+ (let ((text
+
(doc-show-inline--buffer-substring-with-overlay-props pos-beg pos-end)))
(push text text-results))))))))))
(cond
- (text-results ;; Add a blank item so there is a trailing newline when
joining.
- (let ((text (string-join (reverse (cons "" text-results)) "\n")))
- (add-face-text-property 0 (length text) 'doc-show-inline-face t text)
- text))
- (t
- nil))))
+ (text-results ;; Add a blank item so there is a trailing newline when
joining.
+ (let ((text (string-join (reverse (cons "" text-results)) "\n")))
+ (add-face-text-property 0 (length text) 'doc-show-inline-face t text)
+ text))
+ (t
+ nil))))
(defun doc-show-inline--show-text (pos text)
"Add an overlay from TEXT at POS."
(doc-show-inline--log-info
- "adding overlay in %S at point %d has %d length text"
- (current-buffer)
- pos
- (length (or text "")))
+ "adding overlay in %S at point %d has %d length text"
+ (current-buffer)
+ pos
+ (length (or text "")))
(let ((ov (make-overlay pos pos)))
;; Handy for debugging pending regions to be checked.
@@ -618,73 +598,69 @@ Otherwise remove all overlays."
"Add text for the overlay at POS for SYM.
XREF-BACKEND is the back-end used to find this symbol."
(cond
- ;; Check if the symbol should be considered for doc-strings,
- ;; some symbols might not make sense such as: '#define FOO' in C
- ;; which can't have been declared elsewhere.
- ((null (funcall doc-show-inline-filter sym))
- (doc-show-inline--log-info
- "symbol \"%s\" in %S at point %d has been ignored by filter %S"
- sym
- (current-buffer)
- pos
- doc-show-inline-filter))
- (t ;; Symbol is valid and not filtered out.
-
- (let ((text t))
+ ;; Check if the symbol should be considered for doc-strings,
+ ;; some symbols might not make sense such as: '#define FOO' in C
+ ;; which can't have been declared elsewhere.
+ ((null (funcall doc-show-inline-filter sym))
+ (doc-show-inline--log-info
+ "symbol \"%s\" in %S at point %d has been ignored by filter %S"
+ sym
+ (current-buffer)
+ pos
+ doc-show-inline-filter))
+ (t ;; Symbol is valid and not filtered out.
+
+ (let ((text t))
+ (when doc-show-inline--use-lookup-cache
+ (setq text (gethash sym doc-show-inline--lookup-cache t)))
+
+ ;; When true, the value doesn't exist in cache.
+ (cond
+ ((eq text t)
+ (setq text nil)
+ (let ((xref-list (doc-show-inline--xref-list-from-definitions sym
xref-backend)))
+ (doc-show-inline--log-info
+ "symbol \"%s\" in %S at point %d has %d reference(s)"
+ sym
+ (current-buffer)
+ pos
+ (length xref-list))
+ ;; Loads a buffer.
+ (when xref-list
+ (setq text (doc-show-inline--doc-from-xref sym xref-list))))
+
+ ;; Cache, even when nil (to avoid future lookups to establish it's
nil).
(when doc-show-inline--use-lookup-cache
- (setq text (gethash sym doc-show-inline--lookup-cache t)))
+ (puthash sym text doc-show-inline--lookup-cache))
- ;; When true, the value doesn't exist in cache.
- (cond
- ((eq text t)
- (setq text nil)
- (let ((xref-list (doc-show-inline--xref-list-from-definitions sym
xref-backend)))
- (doc-show-inline--log-info
- "symbol \"%s\" in %S at point %d has %d reference(s)"
- sym
- (current-buffer)
- pos
- (length xref-list))
- ;; Loads a buffer.
- (when xref-list
- (setq text (doc-show-inline--doc-from-xref sym xref-list))))
-
- ;; Cache, even when nil (to avoid future lookups to establish it's
nil).
- (when doc-show-inline--use-lookup-cache
- (puthash sym text doc-show-inline--lookup-cache))
-
- (doc-show-inline--log-info
- "symbol \"%s\" in %S at point %d has %d length text"
- sym
- (current-buffer)
- pos
- (length (or text ""))))
- ;; Otherwise cache is used, text is either nil or a string.
- (t
- (doc-show-inline--log-info
- "symbol \"%s\" in %S at point %d has %d length text (cached)"
- sym
- (current-buffer)
- pos
- (length (or text "")))))
-
- (when text
- (doc-show-inline--show-text (line-beginning-position) text))))))
+ (doc-show-inline--log-info
+ "symbol \"%s\" in %S at point %d has %d length text"
+ sym
+ (current-buffer)
+ pos
+ (length (or text ""))))
+ ;; Otherwise cache is used, text is either nil or a string.
+ (t
+ (doc-show-inline--log-info
+ "symbol \"%s\" in %S at point %d has %d length text (cached)"
+ sym
+ (current-buffer)
+ pos
+ (length (or text "")))))
+
+ (when text
+ (doc-show-inline--show-text (line-beginning-position) text))))))
(defun doc-show-inline--idle-handle-pending-ranges ()
"Handle all queued ranges."
;; First remove any overlays.
(when-let ((overlays-in-view (doc-show-inline--idle-overlays (point-min)
(point-max))))
- (let
- (
- (overlays-beg (point-max))
- (overlays-end (point-min)))
+ (let ((overlays-beg (point-max))
+ (overlays-end (point-min)))
(dolist (ov overlays-in-view)
- (let
- (
- (ov-beg (overlay-start ov))
- (ov-end (overlay-end ov)))
+ (let ((ov-beg (overlay-start ov))
+ (ov-end (overlay-end ov)))
(doc-show-inline--overlays-remove ov-beg ov-end)
;; Calculate the range while removing overlays.
@@ -695,39 +671,39 @@ XREF-BACKEND is the back-end used to find this symbol."
;; There is something to do, postpone accessing `points'.
(let ((points (funcall doc-show-inline-locations (point-min)
(point-max))))
(doc-show-inline--log-info
- "found %d identifier(s) in %S"
- (length points)
- (current-buffer))
+ "found %d identifier(s) in %S"
+ (length points)
+ (current-buffer))
(when points
(let
- ( ;; When loading buffers for introspection,
- ;; there is no need to add `doc-show-inline' there (harmless
but not necessary).
- (doc-show-inline--inhibit-mode t)
+ ( ;; When loading buffers for introspection,
+ ;; there is no need to add `doc-show-inline' there (harmless
but not necessary).
+ (doc-show-inline--inhibit-mode t)
- (temporary-buffers (list))
+ (temporary-buffers (list))
- (xref-backend (xref-find-backend)))
+ (xref-backend (xref-find-backend)))
;; Track buffers loaded.
(doc-show-inline--with-advice #'create-file-buffer :around
- (lambda (fn-orig filename)
- (let ((buf (funcall fn-orig filename)))
- (when buf
- (push buf temporary-buffers))
- buf))
+ (lambda (fn-orig filename)
+ (let ((buf (funcall fn-orig
filename)))
+ (when buf
+ (push buf temporary-buffers))
+ buf))
(while 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"
- sym
- (current-buffer)
- pos))
- (t
- (goto-char pos)
- (doc-show-inline--idle-handle-pos pos sym
xref-backend))))))
+ ((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"
+ sym
+ (current-buffer)
+ pos))
+ (t
+ (goto-char pos)
+ (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)))))
@@ -753,85 +729,80 @@ XREF-BACKEND is the back-end used to find this symbol."
;; Debug only, disabled by default.
(when doc-show-inline--idle-overlays-debug
(setq doc-show-inline--idle-overlays-debug-index
- (1+ doc-show-inline--idle-overlays-debug-index))
- (when
- (>= doc-show-inline--idle-overlays-debug-index
- (length doc-show-inline--idle-overlays-debug-colors))
+ (1+ doc-show-inline--idle-overlays-debug-index))
+ (when (>= doc-show-inline--idle-overlays-debug-index
+ (length doc-show-inline--idle-overlays-debug-colors))
(setq doc-show-inline--idle-overlays-debug-index 0))
(let ((ov (make-overlay pos-beg pos-end)))
(overlay-put ov 'doc-show-inline-idle-overlay-debug t)
(overlay-put
- ov 'face
- (list
- :background
- (nth
- doc-show-inline--idle-overlays-debug-index
- doc-show-inline--idle-overlays-debug-colors)
- :extend t)))))
+ ov 'face
+ (list
+ :background
+ (nth
+ doc-show-inline--idle-overlays-debug-index
+ doc-show-inline--idle-overlays-debug-colors)
+ :extend t)))))
(defun doc-show-inline--timer-callback-or-disable (this-timer buf)
"Callback run from the idle timer THIS-TIMER for BUF."
;; Ensure all other buffers are highlighted on request.
(cond
- ((null (buffer-name buf))
- (doc-show-inline--log-info "idle timer ignored for invalid buffer %S"
buf)
- ;; The buffer has been deleted, so cancel the timer directly.
- (cancel-timer this-timer))
- (t
- ;; Needed since the initial time might have been 0.0.
- ;; Ideally this wouldn't need to be set every time.
- (when doc-show-inline--idle-timer
- (timer-set-idle-time doc-show-inline--idle-timer
doc-show-inline-idle-delay t))
-
- (with-current-buffer buf
- (cond
- ((null (get-buffer-window buf t))
- (doc-show-inline--log-info "idle timer ignored for buffer %S
without a window" buf))
- ((null (bound-and-true-p doc-show-inline-mode))
- (doc-show-inline--log-info
- "idle timer ignored for buffer %S without `doc-show-inline-mode'
set"
- buf))
- (t
- (doc-show-inline--log-info "idle timer for buffer %S callback
running..." buf)
- ;; In the unlikely event of an error, run the timer again.
- (doc-show-inline--idle-handle-pending-ranges)))
+ ((null (buffer-name buf))
+ (doc-show-inline--log-info "idle timer ignored for invalid buffer %S" buf)
+ ;; The buffer has been deleted, so cancel the timer directly.
+ (cancel-timer this-timer))
+ (t
+ ;; Needed since the initial time might have been 0.0.
+ ;; Ideally this wouldn't need to be set every time.
+ (when doc-show-inline--idle-timer
+ (timer-set-idle-time doc-show-inline--idle-timer
doc-show-inline-idle-delay t))
+
+ (with-current-buffer buf
+ (cond
+ ((null (get-buffer-window buf t))
+ (doc-show-inline--log-info "idle timer ignored for buffer %S without a
window" buf))
+ ((null (bound-and-true-p doc-show-inline-mode))
+ (doc-show-inline--log-info
+ "idle timer ignored for buffer %S without `doc-show-inline-mode' set"
+ buf))
+ (t
+ (doc-show-inline--log-info "idle timer for buffer %S callback
running..." buf)
+ ;; In the unlikely event of an error, run the timer again.
+ (doc-show-inline--idle-handle-pending-ranges)))
- (doc-show-inline--timer-ensure nil)))))
+ (doc-show-inline--timer-ensure nil)))))
(defun doc-show-inline--timer-ensure (state)
"Ensure the timer is enabled when STATE is non-nil, otherwise disable."
(cond
- (state
- (cond
- (doc-show-inline--idle-timer
- (doc-show-inline--log-info
- "idle timer ensure t, already enabled for %S"
- (current-buffer)))
- (t
- (doc-show-inline--log-info "idle timer ensure t, enabling for %S"
(current-buffer))
- (setq doc-show-inline--idle-timer
+ (state
+ (cond
+ (doc-show-inline--idle-timer
+ (doc-show-inline--log-info "idle timer ensure t, already enabled for %S"
(current-buffer)))
+ (t
+ (doc-show-inline--log-info "idle timer ensure t, enabling for %S"
(current-buffer))
+ (setq doc-show-inline--idle-timer
;; One off, set repeat so the timer can be manually disabled,
;; ensuring it is only disabled on successful completion.
;; Pass a nil function here, set the function & arguments below.
(run-with-idle-timer
- doc-show-inline-idle-delay
- t
- #'doc-show-inline--timer-callback-or-disable))
-
- (timer-set-function
- doc-show-inline--idle-timer
- #'doc-show-inline--timer-callback-or-disable
- (list
- ;; Pass the timer, to allow cancellation from the timer.
- doc-show-inline--idle-timer
- ;; Pass the buffer (check the buffer is still active).
- (current-buffer))))))
-
- (t
- (when doc-show-inline--idle-timer
- (cancel-timer doc-show-inline--idle-timer))
- (kill-local-variable 'doc-show-inline--idle-timer))))
+ doc-show-inline-idle-delay
+ t
+ #'doc-show-inline--timer-callback-or-disable))
+
+ (timer-set-function doc-show-inline--idle-timer
#'doc-show-inline--timer-callback-or-disable
+ (list
+ ;; Pass the timer, to allow cancellation from the
timer.
+ doc-show-inline--idle-timer
+ ;; Pass the buffer (check the buffer is still
active).
+ (current-buffer))))))
+
+ (t
+ (when doc-show-inline--idle-timer
+ (cancel-timer doc-show-inline--idle-timer))
+ (kill-local-variable 'doc-show-inline--idle-timer))))
(defun doc-show-inline--timer-reset ()
"Run this when the buffer was changed."
@@ -871,10 +842,8 @@ XREF-BACKEND is the back-end used to find this symbol."
(let ((buffers (buffer-list)))
(while buffers
(let ((buf (pop buffers)))
- (when
- (and
- (buffer-local-value 'doc-show-inline-mode buf)
- (memq (buffer-local-value 'major-mode buf)
doc-show-inline--cc-modes))
+ (when (and (buffer-local-value 'doc-show-inline-mode buf)
+ (memq (buffer-local-value 'major-mode buf)
doc-show-inline--cc-modes))
;; Break.
(setq buffers nil)
(setq result t)))))
@@ -884,24 +853,24 @@ XREF-BACKEND is the back-end used to find this symbol."
"Setup the callback for tracking ranges that need to be handled.
Use STATE to enable/disable."
(cond
- ((memq major-mode doc-show-inline--cc-modes)
- (cond
- (state
- ;; Needed so existing regions that are highlighted will be
- ;; calculated again with the callback installed.
- (font-lock-flush)
- (advice-add 'c-context-expand-fl-region :around
#'doc-show-inline--cc-gapless-hack-fn))
- (t
- ;; Only remove when no other buffers use this mode.
- (unless (doc-show-inline--jit-or-gapless-hack-is-needed)
- (advice-remove 'c-context-expand-fl-region
#'doc-show-inline--cc-gapless-hack-fn)))))
-
- (t
- (cond
- (state
- (jit-lock-register #'doc-show-inline--idle-font-lock-region-pending))
- (t
- (jit-lock-unregister
#'doc-show-inline--idle-font-lock-region-pending))))))
+ ((memq major-mode doc-show-inline--cc-modes)
+ (cond
+ (state
+ ;; Needed so existing regions that are highlighted will be
+ ;; calculated again with the callback installed.
+ (font-lock-flush)
+ (advice-add 'c-context-expand-fl-region :around
#'doc-show-inline--cc-gapless-hack-fn))
+ (t
+ ;; Only remove when no other buffers use this mode.
+ (unless (doc-show-inline--jit-or-gapless-hack-is-needed)
+ (advice-remove 'c-context-expand-fl-region
#'doc-show-inline--cc-gapless-hack-fn)))))
+
+ (t
+ (cond
+ (state
+ (jit-lock-register #'doc-show-inline--idle-font-lock-region-pending))
+ (t
+ (jit-lock-unregister
#'doc-show-inline--idle-font-lock-region-pending))))))
;; ---------------------------------------------------------------------------
@@ -971,13 +940,13 @@ When IS-INTERACTIVE is true, use
`doc-show-inline-idle-delay-init'."
;; since `lsp-mode' may take some time to initialize.
;; Otherwise this can run immediately when started on an existing buffer.
(timer-set-idle-time doc-show-inline--idle-timer
- (cond
- (is-interactive
- 0.0)
- (t
- doc-show-inline-idle-delay-init))
- ;; Repeat.
- t)))
+ (cond
+ (is-interactive
+ 0.0)
+ (t
+ doc-show-inline-idle-delay-init))
+ ;; Repeat.
+ t)))
(defun doc-show-inline--mode-disable ()
"Turn off option `doc-show-inline-mode' for the current buffer."
@@ -993,11 +962,11 @@ When IS-INTERACTIVE is true, use
`doc-show-inline-idle-delay-init'."
:global nil
(cond
- (doc-show-inline-mode
- (unless doc-show-inline--inhibit-mode
- (doc-show-inline--mode-enable (called-interactively-p 'interactive))))
- (t
- (doc-show-inline--mode-disable))))
+ (doc-show-inline-mode
+ (unless doc-show-inline--inhibit-mode
+ (doc-show-inline--mode-enable (called-interactively-p 'interactive))))
+ (t
+ (doc-show-inline--mode-disable))))
(provide 'doc-show-inline)
;;; doc-show-inline.el ends here
- [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 <=
- [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, 2023/01/08
- [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