diff --git a/modules/feature/lookup/autoload/lookup.el b/modules/feature/lookup/autoload/lookup.el index 6a327c799..5f910a3e1 100644 --- a/modules/feature/lookup/autoload/lookup.el +++ b/modules/feature/lookup/autoload/lookup.el @@ -4,8 +4,8 @@ (defvar +lookup--ag-installed-p (executable-find "ag")) (defvar +lookup--last-provider nil) -;;;###autoload -(def-setting! :lookup (modes &rest plist) +;;;###autodef +(cl-defun set-lookup-handlers! (modes &key definition references documentation file xref-backend) "Defines a jump target for major MODES. PLIST accepts the following properties: @@ -27,24 +27,30 @@ properties: Using this multiple times overwrites previous properties and unsets omitted ones." - `(progn - ,@(cl-loop for mode in (doom-enlist (doom-unquote modes)) - for def-name = (intern (format "doom--init-lookup-%s" mode)) - collect - `(defun ,def-name () - (when (or (eq major-mode ',mode) - (bound-and-true-p ,mode)) - (let ((xref ,(plist-get plist :xref-backend)) - (def ,(plist-get plist :definition)) - (ref ,(plist-get plist :references)) - (fil ,(plist-get plist :file)) - (doc ,(plist-get plist :documentation))) - (if xref (add-hook 'xref-backend-functions xref nil t)) - (if def (add-hook '+lookup-definition-functions def nil t)) - (if ref (add-hook '+lookup-references-functions ref nil t)) - (if fil (add-hook '+lookup-file-functions fil nil t)) - (if doc (add-hook '+lookup-documentation-functions doc nil t))))) - collect `(add-hook! ,mode #',def-name)))) + (dolist (mode (doom-enlist modes)) + (let ((def-name (intern (format "+lookup--init-%s" mode)))) + (fset def-name + (lambda () + (when (or (eq major-mode mode) + (and (boundp mode) + (symbol-value mode))) + (when definition + (add-hook '+lookup-definition-functions definition nil t)) + (when references + (add-hook '+lookup-references-functions references nil t)) + (when documentation + (add-hook '+lookup-documentation-functions documentation nil t)) + (when file + (add-hook '+lookup-file-functions file nil t)) + (when xref-backend + (add-hook 'xref-backend-functions xref-backend nil t))))) + (add-hook (intern (format "%s-hook" mode)) def-name)))) + +;;;###autoload +(def-setting! :lookup (modes &rest plist) + :obsolete set-lookup-handlers! + `(set-lookup-handlers! ,modes ,@plist)) + ;; Helpers (defun +lookup--online-provider (&optional force-p namespace) diff --git a/modules/lang/cc/config.el b/modules/lang/cc/config.el index c034041c2..d99f9aa34 100644 --- a/modules/lang/cc/config.el +++ b/modules/lang/cc/config.el @@ -212,7 +212,7 @@ compilation database is present in the project.") ;; ...and don't auto-jump to first match before making a selection. rtags-jump-to-first-match nil) - (set! :lookup '(c-mode c++-mode) + (set-lookup-handlers! '(c-mode c++-mode) :definition #'rtags-find-symbol-at-point :references #'rtags-find-references-at-point) diff --git a/modules/lang/clojure/config.el b/modules/lang/clojure/config.el index 05317c153..f61172558 100644 --- a/modules/lang/clojure/config.el +++ b/modules/lang/clojure/config.el @@ -33,7 +33,7 @@ (set-popup-rule! "^\\*cider-repl" nil '((quit) (select))) (set-repl-handler! 'clojure-mode #'+clojure/repl) (set-eval-handler! 'clojure-mode #'cider-eval-region) - (set! :lookup 'clojure-mode + (set-lookup-handlers! 'clojure-mode :definition #'cider-browse-ns-find-at-point :documentation #'cider-browse-ns-doc-at-point) diff --git a/modules/lang/crystal/config.el b/modules/lang/crystal/config.el index df4dbdc78..d6f5c9753 100644 --- a/modules/lang/crystal/config.el +++ b/modules/lang/crystal/config.el @@ -3,7 +3,7 @@ (def-package! crystal-mode :defer t :config - (set! :lookup 'crystal-mode + (set-lookup-handlers! 'crystal-mode :definition #'crystal-def-jump :references #'crystal-tool-imp) (set-eval-handler! 'crystal-mode diff --git a/modules/lang/csharp/config.el b/modules/lang/csharp/config.el index 322cd3d8d..5acd23383 100644 --- a/modules/lang/csharp/config.el +++ b/modules/lang/csharp/config.el @@ -20,7 +20,7 @@ (set-company-backend! 'csharp-mode '(company-omnisharp)) - (set! :lookup 'csharp-mode + (set-lookup-handlers! 'csharp-mode :definition #'omnisharp-go-to-definition :references #'omnisharp-find-usages :documentation #'omnisharp-current-type-documentation) diff --git a/modules/lang/elixir/config.el b/modules/lang/elixir/config.el index 4b86375db..eb0f7e857 100644 --- a/modules/lang/elixir/config.el +++ b/modules/lang/elixir/config.el @@ -30,7 +30,7 @@ (def-package! alchemist :hook (elixir-mode . alchemist-mode) :config - (set! :lookup 'elixir-mode + (set-lookup-handlers! 'elixir-mode :definition #'alchemist-goto-definition-at-point :documentation #'alchemist-help-search-at-point) (set-eval-handler! 'elixir-mode #'alchemist-eval-region) diff --git a/modules/lang/emacs-lisp/config.el b/modules/lang/emacs-lisp/config.el index 2d0057624..87b0a156f 100644 --- a/modules/lang/emacs-lisp/config.el +++ b/modules/lang/emacs-lisp/config.el @@ -5,7 +5,7 @@ :config (set-repl-handler! 'emacs-lisp-mode #'+emacs-lisp/repl) (set-eval-handler! 'emacs-lisp-mode #'+emacs-lisp-eval) - (set! :lookup 'emacs-lisp-mode :documentation 'info-lookup-symbol) + (set-lookup-handlers! 'emacs-lisp-mode :documentation 'info-lookup-symbol) (set-docset! '(lisp-mode emacs-lisp-mode) "Emacs Lisp") (set! :rotate 'emacs-lisp-mode diff --git a/modules/lang/ess/config.el b/modules/lang/ess/config.el index 048983584..f3e78ccc1 100644 --- a/modules/lang/ess/config.el +++ b/modules/lang/ess/config.el @@ -40,7 +40,7 @@ ess-default-style 'DEFAULT) (ess-toggle-underscore t) (set-repl-handler! 'ess-mode #'+ess/r-repl) - (set! :lookup 'ess-mode :documentation #'ess-display-help-on-object) + (set-lookup-handlers! 'ess-mode :documentation #'ess-display-help-on-object) (define-key! ess-doc-map "h" #'ess-display-help-on-object "p" #'ess-R-dv-pprint diff --git a/modules/lang/go/config.el b/modules/lang/go/config.el index 2760a9414..62670b88a 100644 --- a/modules/lang/go/config.el +++ b/modules/lang/go/config.el @@ -7,7 +7,7 @@ (after! go-mode (set-env! "GOPATH" "GOROOT") (set-repl-handler! 'go-mode #'gorepl-run) - (set! :lookup 'go-mode + (set-lookup-handlers! 'go-mode :definition #'go-guru-definition :references #'go-guru-referrers :documentation #'godoc-at-point) diff --git a/modules/lang/haskell/+intero.el b/modules/lang/haskell/+intero.el index 7463cfa8a..bda348e9b 100644 --- a/modules/lang/haskell/+intero.el +++ b/modules/lang/haskell/+intero.el @@ -14,7 +14,7 @@ This is necessary because `intero-mode' doesn't do its own error checks." (add-hook 'haskell-mode-hook #'+haskell|init-intero) :config (add-hook 'intero-mode-hook #'flycheck-mode) - (set! :lookup 'haskell-mode :definition #'intero-goto-definition)) + (set-lookup-handlers! 'haskell-mode :definition #'intero-goto-definition)) (def-package! hindent diff --git a/modules/lang/java/+eclim.el b/modules/lang/java/+eclim.el index 6f07ab0ef..3848324ab 100644 --- a/modules/lang/java/+eclim.el +++ b/modules/lang/java/+eclim.el @@ -6,7 +6,7 @@ (def-package! eclim :hook (java-mode . eclim-mode) :config - (set! :lookup 'java-mode + (set-lookup-handlers! 'java-mode :definition #'eclim-java-find-declaration :references #'eclim-java-find-references :documentation #'eclim-java-show-documentation-for-current-element) diff --git a/modules/lang/java/+meghanada.el b/modules/lang/java/+meghanada.el index 4a0ee7767..4eaa530e1 100644 --- a/modules/lang/java/+meghanada.el +++ b/modules/lang/java/+meghanada.el @@ -10,7 +10,7 @@ meghanada-use-eldoc t meghanada-use-auto-start t) - (set! :lookup 'java-mode + (set-lookup-handlers! 'java-mode :definition #'meghanada-jump-declaration :references #'meghanada-reference) diff --git a/modules/lang/javascript/config.el b/modules/lang/javascript/config.el index 52a301945..3a7e17245 100644 --- a/modules/lang/javascript/config.el +++ b/modules/lang/javascript/config.el @@ -105,7 +105,7 @@ (set-company-backend! 'tide-mode 'company-tide) ;; navigation - (set! :lookup 'tide-mode + (set-lookup-handlers! 'tide-mode :definition #'tide-jump-to-definition :references #'tide-references :documentation #'tide-documentation-at-point) @@ -158,7 +158,7 @@ (def-package! xref-js2 :when (featurep! :feature lookup) :commands xref-js2-xref-backend - :init (set! :lookup 'js2-mode :xref-backend #'xref-js2-xref-backend)) + :init (set-lookup-handlers! 'js2-mode :xref-backend #'xref-js2-xref-backend)) (def-package! js2-refactor diff --git a/modules/lang/lua/config.el b/modules/lang/lua/config.el index 70c1b4d33..b0eaf1f66 100644 --- a/modules/lang/lua/config.el +++ b/modules/lang/lua/config.el @@ -3,7 +3,7 @@ (after! lua-mode (add-hook 'lua-mode-hook #'flycheck-mode) - (set! :lookup 'lua-mode :documentation 'lua-search-documentation) + (set-lookup-handlers! 'lua-mode :documentation 'lua-search-documentation) (set-electric! 'lua-mode :words '("else" "end")) (set-repl-handler! 'lua-mode #'+lua/repl) (set-company-backend! 'lua-mode '(company-lua company-yasnippet)) diff --git a/modules/lang/php/config.el b/modules/lang/php/config.el index e092410ce..c8b9cecff 100644 --- a/modules/lang/php/config.el +++ b/modules/lang/php/config.el @@ -18,7 +18,7 @@ (setq php-template-compatibility nil) (set-repl-handler! 'php-mode #'php-boris) - (set! :lookup 'php-mode :documentation #'php-search-documentation) + (set-lookup-handlers! 'php-mode :documentation #'php-search-documentation) ;; ac-php provides custom autocompletion, php-extras provides autocompletion ;; for built-in libraries diff --git a/modules/lang/python/config.el b/modules/lang/python/config.el index 27037d0b9..381bfea00 100644 --- a/modules/lang/python/config.el +++ b/modules/lang/python/config.el @@ -81,7 +81,7 @@ environment variables." (add-hook 'anaconda-mode-hook #'anaconda-eldoc-mode) (set-company-backend! 'python-mode '(company-anaconda)) (set-popup-rule! "^\\*anaconda-mode" nil '((select))) - (set! :lookup 'python-mode + (set-lookup-handlers! 'python-mode :definition #'anaconda-mode-find-definitions :references #'anaconda-mode-find-references :documentation #'anaconda-mode-show-doc) diff --git a/modules/lang/rust/config.el b/modules/lang/rust/config.el index b0a892093..3ebab3937 100644 --- a/modules/lang/rust/config.el +++ b/modules/lang/rust/config.el @@ -21,7 +21,7 @@ :after rust-mode :config (add-hook 'rust-mode-hook #'racer-mode) - (set! :lookup 'rust-mode + (set-lookup-handlers! 'rust-mode :definition #'racer-find-definition :documentation #'racer-describe))