From d4eb7e31ac25107a35f9de567a497d9100fcc1ff Mon Sep 17 00:00:00 2001 From: Henrik Lissner Date: Sat, 27 Mar 2021 21:41:15 -0400 Subject: [PATCH] Fix #4771: give lsp-find-* precedence over fallbacks LSP lookup handlers should have the highest precedence, but this wasn't the case due to a regression in 430d628. --- modules/tools/lookup/autoload/lookup.el | 8 ++++++-- modules/tools/lsp/+lsp.el | 6 +++--- modules/tools/lsp/autoload/lsp-mode.el | 22 ++++++++++++++++++++++ 3 files changed, 31 insertions(+), 5 deletions(-) diff --git a/modules/tools/lookup/autoload/lookup.el b/modules/tools/lookup/autoload/lookup.el index 797b564e1..5b24c5ffd 100644 --- a/modules/tools/lookup/autoload/lookup.el +++ b/modules/tools/lookup/autoload/lookup.el @@ -212,11 +212,15 @@ This can be passed nil as its second argument to unset handlers for MODES. e.g. (defun +lookup-xref-definitions-backend-fn (identifier) "Non-interactive wrapper for `xref-find-definitions'" - (+lookup--xref-show 'xref-backend-definitions identifier #'xref--show-defs)) + (condition-case _ + (+lookup--xref-show 'xref-backend-definitions identifier #'xref--show-defs) + (cl-no-applicable-method nil))) (defun +lookup-xref-references-backend-fn (identifier) "Non-interactive wrapper for `xref-find-references'" - (+lookup--xref-show 'xref-backend-references identifier #'xref--show-xrefs)) + (condition-case _ + (+lookup--xref-show 'xref-backend-references identifier #'xref--show-xrefs) + (cl-no-applicable-method nil))) (defun +lookup-dumb-jump-backend-fn (_identifier) "Look up the symbol at point (or selection) with `dumb-jump', which conducts a diff --git a/modules/tools/lsp/+lsp.el b/modules/tools/lsp/+lsp.el index 85694aada..f52256b43 100644 --- a/modules/tools/lsp/+lsp.el +++ b/modules/tools/lsp/+lsp.el @@ -58,9 +58,9 @@ about it (it will be logged to *Messages* however).") lsp-groovy-server-file (concat lsp-server-install-dir "groovy-language-server-all.jar")) (set-popup-rule! "^\\*lsp-help" :size 0.35 :quit t :select t) - (set-lookup-handlers! 'lsp-mode :async t - ;; NOTE :definitions and :references aren't needed. LSP is integrated into - ;; xref, which the lookup module has first class support for. + (set-lookup-handlers! 'lsp-mode + :definition #'+lsp-lookup-definition-handler + :references #'+lsp-lookup-references-handler :documentation #'lsp-describe-thing-at-point :implementations #'lsp-find-implementation :type-definition #'lsp-find-type-definition) diff --git a/modules/tools/lsp/autoload/lsp-mode.el b/modules/tools/lsp/autoload/lsp-mode.el index 0f33155fa..16a3342f8 100644 --- a/modules/tools/lsp/autoload/lsp-mode.el +++ b/modules/tools/lsp/autoload/lsp-mode.el @@ -49,3 +49,25 @@ (car workspaces))) (lsp-mode +1)) (setf (lsp--client-priority match) old-priority))))) + +;;;###autoload +(defun +lsp-lookup-definition-handler () + "Find definition of the symbol at point using LSP." + (interactive) + (when-let (loc (lsp-request "textDocument/definition" + (lsp--text-document-position-params))) + (lsp-show-xrefs (lsp--locations-to-xref-items loc) nil nil) + t)) + +;;;###autoload +(defun +lsp-lookup-references-handler (&optional include-declaration) + "Find project-wide references of the symbol at point using LSP." + (interactive "P") + (when-let + (loc (lsp-request "textDocument/references" + (append (lsp--text-document-position-params) + (list + :context `(:includeDeclaration + ,(lsp-json-bool include-declaration)))))) + (lsp-show-xrefs (lsp--locations-to-xref-items loc) nil t) + t))