Some packages (like evil-collection and dumb-jump) use helm macros, but Doom cannot ensure helm will be installed by the time these packages are byte-compiled during installation. In fact, the default load order prevents this. Rather than imposing hard load order requirements, we just make sure helm is higher on the packages list, so it gets installed sooner. |
||
---|---|---|
.. | ||
autoload | ||
config.el | ||
packages.el | ||
README.org |
:feature lookup
Integrates with code navigation and documentation tools to help you quickly look up definitions, references and documentation.
- Integration with devdocs.io
- Integration with Dash.app docsets.
- Jump-to-definition and find-references implementations that just work.
- Powerful xref integration for languages that support it.
Table of Contents TOC
Install
To enable the module add :feature lookup
to your doom!
block in
~/.emacs.d/init.el
.
Module flags
This module provides two flags:
+docsets
Enables integration with Dash docsets.+devdocs
Enables integration with devdocs.io search.
Dependencies
This module has several soft dependencies:
the_silver_searcher
and/orripgrep
as a last-resort fallback for jump-to-definition/find-references.sqlite3
for Dash docset support.
MacOS
brew install the_silver_searcher ripgrep
# An older version of sqlite is included in MacOS. If it causes you problems (and
# it has been reported that it will), install it through homebrew:
brew install sqlite
# Note that it's keg-only, meaning it isn't symlinked to /usr/local/bin. You'll
# have to add it to PATH yourself (or symlink it into your PATH somewhere). e.g.
export PATH="/usr/local/opt/sqlite/bin:$PATH"
Arch Linux
sudo pacman --needed --noconfirm -S sqlite the_silver_searcher ripgrep
Usage
Jump to definition
Use +lookup/definition
(bound to gd
in normal mode) to jump to the
definition of the symbol at point
This module provides a goto-definition implementation that will try the following sources before giving up:
- Whatever
:definition
function is registered for the current buffer with the:lookup
setting (see "Configuration" section). - Any available xref backends.
dumb-jump
(a text search with aides to reduce false positives).- An ordinary project-wide text search with ripgrep or the_silver_searcher.
- If
evil-mode
is active, useevil-goto-definition
, which preforms a simple text search within the current buffer.
If there are multiple results, you will be prompted to select one.
Find references
Use +lookup/references
(bound to gD
in normal mode) to see a list of
references for the symbol at point from throughout your project.
Like +lookup/definition
, this tries a number of sources before giving up. It
will try:
- Whatever
:references
function is registered for the current buffer with the:lookup
setting (see "Configuration" section). - Any available xref backends.
- An ordinary project-wide text search with ripgrep or the_silver_searcher.
If there are multiple results, you will be prompted to select one.
Look up documentation
+lookup/documentation
(bound to K
in normal mode) will open documentation
for the symbol at point.
Depending on your configuration, this will try a list of sources:
- Whatever
:documentation
function is registered for the current buffer with the:lookup
setting (see "Configuration" section). - Any Dash.app docsets, if any are installed for the current major mode.
- devdocs.io, if it has a docset for the current mode.
- An online search; using the last engine used (it will prompt you the first
time, or if
current-prefix-arg
is non-nil).
Search a specific documentation backend
You can perform a documentation lookup on any backends directly:
- Dash Docsets:
+lookup/in-docsets
, or:dash QUERY
for evil users. - devdocs.io:
+lookup/in-devdocs
, or:dd QUERY
for evil users. - Online (generic):
+lookup/online
or+lookup/online-select
(bound toSPC / o
), or:lo[okup] QUERY
for evil users.
Configuration
Settings
This module provides three settings: :lookup
, :docset
and :devdocs
.
:lookup MODES &rest PLIST
Defines a lookup target for major MODES (one major-mode symbol or a list thereof). PLIST accepts the following optional properties:
-
:definition FN
- Run when jumping to a symbol's definition. Used by
+lookup/definition
. -
:references FN
- Run when looking for usage references of a symbol in the
current project. Used by
+lookup/references
. -
:documentation FN
- Run when looking up documentation for a symbol. Used by
+lookup/documentation
. -
:xref-backend FN
- Defines an xref backend for a major-mode. With this, :definition and :references are unnecessary.
Example
;; For python-mode, anaconda-mode offers a backend for all three lookup
;; functions. We can register them like so:
(set! :lookup 'python-mode
:definition #'anaconda-mode-find-definitions
:references #'anaconda-mode-find-references
:documentation #'anaconda-mode-show-doc)
;; If a language or plugin provides a custom xref backend available for it, use
;; that instead. It will provide the best jump-to-definition and find-references
;; experience. You can specify custom xref backends with:
(set! :lookup 'js2-mode :xref-backend #'xref-js2-xref-backend)
;; NOTE: xref doesn't provide a :documentation backend.
:docset MODES &rest DOCSETS
Registers a list of DOCSETS (strings) for MODES (either one major mode symbol or
a list of them). Used by +lookup/in-docsets
and +lookup/documentation
.
(set! :docset 'js2-mode "JavaScript" "JQuery")
;; Add docsets to minor modes by starting DOCSETS with :add
(set! :docset 'rjsx-mode :add "React")
;; Or remove docsets from minor modes
(set! :docset 'nodejs-mode :remove "JQuery")
:devdocs MODES DOCSET
Registers a devdocs DOCset (one string) to search when in MODES (either one
major mode symbol or a list). Used by +lookup/in-devdocs
and
+lookup/documentation
. With devdocs you can only search one docset at a time.
(set! :devdocs 'js2-mode "javascript")
;; works on minor modes too
(set! :devdocs 'rjsx-mode "react")
Open in eww instead of browser
(setq +lookup-open-url-fn 'eww)
Appendix
Commands
+lookup/definition
+lookup/references
+lookup/documentation
+lookup/online
+lookup/online-select
+lookup/in-devdocs
+lookup/in-docsets