Skip to content

Commit 597febf

Browse files
authored
Bugfix/lens check if supported (#2389)
* lsp-lens: only enable if supported `lsp--auto-configure': add `lsp-lens--enable' instead of `lsp-lens-mode', since the former checks for lens support. This way, the mode won't be enabled for servers that don't support lenses. * `lsp-lens-mode': disabling now works Now disabling `lsp-lens-mode' actually works, and the lenses don't reappear after a short delay. The issue was that the wrong lambdas were being removed from the various hooks in `lsp-lens-mode' and because `lsp-lens--refresh-timer' was not cancelled. To fix this, extract `(lsp--lens-schedule-refresh t)' to a new function instead, since they are much less fragile in hooks. At the end of the disable part of `lsp-lens-mode', cancel `lsp-lens--refresh-timer'. * `lsp-lens-mode': check if timer is non-nil `lsp-lens--refresh-timer' could be nil if `lsp-lens-mode' is disabled within `lsp-idle-delay' afterwards. * `lsp-lens-mode': dont configure globally `lsp-lens-mode' is not responsible for globally configuring lenses, so it shouldn't modify `lsp-configure-hook' and `lsp-unconfigure-hook'.
1 parent f89e7f2 commit 597febf

File tree

2 files changed

+17
-12
lines changed

2 files changed

+17
-12
lines changed

lsp-lens.el

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -125,9 +125,10 @@ Results are meaningful only if FROM and TO are on the same line."
125125
"Handler for `after-save-hook' for lens mode."
126126
(lsp-lens--schedule-refresh t))
127127

128-
(defun lsp-lens--schedule-refresh (buffer-modified?)
128+
(defun lsp-lens--schedule-refresh (&optional buffer-modified?)
129129
"Call each of the backend.
130-
BUFFER-MODIFIED? determines whether the buffer is modified or not."
130+
BUFFER-MODIFIED? determines whether the buffer was modified or
131+
not."
131132
(-some-> lsp-lens--refresh-timer cancel-timer)
132133

133134
(setq lsp-lens--page (cons (window-start) (window-end)))
@@ -138,6 +139,11 @@ BUFFER-MODIFIED? determines whether the buffer is modified or not."
138139
(or lsp-lens--modified? buffer-modified?)
139140
(current-buffer))))
140141

142+
(defun lsp-lens--schedule-refresh-modified ()
143+
"Schedule a lens refresh due to a buffer-modification.
144+
See `lsp-lens--schedule-refresh' for details."
145+
(lsp-lens--schedule-refresh t))
146+
141147
(defun lsp-lens--keymap (command)
142148
"Build the lens keymap for COMMAND."
143149
(-doto (make-sparse-keymap)
@@ -344,21 +350,20 @@ CALLBACK - callback for the lenses."
344350
:lighter "Lens"
345351
(cond
346352
(lsp-lens-mode
347-
(add-hook 'lsp-configure-hook #'lsp-lens--enable nil t)
348-
(add-hook 'lsp-unconfigure-hook #'lsp-lens--disable nil t)
349353
(add-hook 'lsp-on-idle-hook #'lsp-lens--idle-function nil t)
350-
(add-hook 'lsp-on-change-hook (lambda () (lsp-lens--schedule-refresh t)) nil t)
351-
(add-hook 'after-save-hook (lambda () (lsp-lens--schedule-refresh t)) nil t)
354+
(add-hook 'lsp-on-change-hook #'lsp-lens--schedule-refresh-modified nil t)
355+
(add-hook 'after-save-hook #'lsp-lens--schedule-refresh nil t)
352356
(add-hook 'before-revert-hook #'lsp-lens-hide nil t)
353357
(lsp-lens-refresh t))
354358
(t
355-
(lsp-lens-hide)
356-
(remove-hook 'lsp-configure-hook #'lsp-lens--enable t)
357-
(remove-hook 'lsp-unconfigure-hook #'lsp-lens--disable t)
358359
(remove-hook 'lsp-on-idle-hook #'lsp-lens--idle-function t)
359-
(remove-hook 'lsp-on-change-hook (lambda () (lsp-lens--schedule-refresh nil)) t)
360-
(remove-hook 'after-save-hook (lambda () (lsp-lens--schedule-refresh t)) t)
360+
(remove-hook 'lsp-on-change-hook #'lsp-lens--schedule-refresh-modified t)
361+
(remove-hook 'after-save-hook #'lsp-lens--schedule-refresh t)
361362
(remove-hook 'before-revert-hook #'lsp-lens-hide t)
363+
(when lsp-lens--refresh-timer
364+
(cancel-timer lsp-lens--refresh-timer))
365+
(setq lsp-lens--refresh-timer nil)
366+
(lsp-lens-hide)
362367
(setq lsp-lens--last-count nil)
363368
(setq lsp-lens--backend-cache nil))))
364369

lsp-mode.el

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6732,7 +6732,7 @@ returns the command to execute."
67326732
(when lsp-modeline-workspace-status-enable
67336733
(add-hook 'lsp-configure-hook 'lsp-modeline-workspace-status-mode))
67346734
(when lsp-lens-enable
6735-
(add-hook 'lsp-configure-hook 'lsp-lens-mode))
6735+
(add-hook 'lsp-configure-hook 'lsp-lens--enable))
67366736

67376737
;; yas-snippet config
67386738
(setq-local yas-inhibit-overlay-modification-protection t))

0 commit comments

Comments
 (0)