Jump to definition of a variable or function in JupyterLab notebook and file editor.
Use Alt + click to jump to a definition using your mouse, or Ctrl + Alt + B keyboard-only alternative.
You can replace the key modifier for mouse click from Alt to Control, Shift, Meta or AltGraph in the settings (see remarks below).
To jump back to the variable/function usage, use Alt + o.
The plugin is language-agnostic, though optimized for Python and R. Support for other languages is possible (PRs welcome).
from x.y import z- alt-click on
z) (new in v0.5)
R (new in v0.5):
sourcefunction (e.g. alt-clicking on
import::here(x, y, .from='some_file.R')
Background: there are two ways to solve the definitions location: static analysis and inspection performed in the kernel. The latter is more accurate, although it currently only works in notebooks (not in the file editor). For the implementation overview, please see the design page. In order to jump to a file outside of the JupyterLab project directory (e.g. the built-in Python libraries) a symlink-based workaround is required.
Please go to
Settings > Advanced Setting Editor > Go-to-definition and set a modifier of your choice in the User Preferences panel. For full list of physical keys mapped to the modifiers (which depend on your Operating System), please see the MDN documentation.
Safari users: Safari does not implement
MouseEvent.getModifierState (see #3), thus only Alt, Control, Shift and Meta are supported.
jupyterlab-lsp provides advanced autocompletion, code navigation, hover suggestions, linters, etc. It depends on this extension for the jumping functionality, thus all the jumps are recorded in a shared history and the "go back" option should work with jumps performed with both: shortcuts from this extension and context-menu actions of jupyterlab-lsp.
jupyter labextension install @krassowski/jupyterlab_go_to_definition # JuupyterLab 2.x jupyter labextension install @krassowski/[email protected] # JupyterLab 1.x
To update already installed extension:
jupyter labextension update @krassowski/jupyterlab_go_to_definition
For a development install (requires npm version 4 or later), do the following in the repository directory:
npm install npm run build jupyter labextension link .
To rebuild the package and the JupyterLab app:
npm run build jupyter lab build
To run tests suite:
Support for new languages should be provided by implementation of abstract
LanguageAnalyzer class (in case of languages which support use of semicolons to terminate statements
LanguageWithOptionalSemicolons helper class can be utilized).
Each new language class needs to be included in
chooseLanguageAnalyzer function and the developer needs to verify if
fileeditor.ts will be able to recognize the language properly.
JupyterLab attempts to protect users from accessing system files by restricting the accessible files to those within the directory it was started in (so called project root). If you wish to jump to files outside of the project root, you cold use a symlink workaround as follows:
.jupyter_symlinksin the top directory of your JupyterLab project, and
usr, or any other location which includes the files that you wish to make possible to open in there. The Linux following commands demonstrate the idea:
mkdir .jupyter_symlinks cd .jupyter_symlinks ln -s /home home ln -s /usr usr
To find out which paths you need to symlink for Python you could run
python3 -v which will list where are the specific built-in modules imported from. Look out for lines like these:
# /srv/conda/envs/notebook/lib/python3.7/__pycache__/_collections_abc.cpython-37.pyc matches /srv/conda/envs/notebook/lib/python3.7/_collections_abc.py # code object from '/srv/conda/envs/notebook/lib/python3.7/__pycache__/_collections_abc.cpython-37.pyc' import '_collections_abc' # <_frozen_importlib_external.SourceFileLoader object at 0x7f77ba22c400>
which mean that you want
/srv/conda/envs/notebook/lib/python3.7/ to be symlinked to access
_collections_abc. You can do this by:
# still in .jupyter_symlinks mkdir -p srv/conda/envs/notebook/lib # note: no slash (/) at the begining of the second path ln -s /srv/conda/envs/notebook/lib/python3.7 srv/conda/envs/notebook/lib/python3.7
Please note that not every Python built-in module has a corresponding Python file, as many are written in C for performance reasons.