@krassowski/theme-material v2.1.1
Language Server Protocol integration for Jupyter(Lab)
This project is still maturing, but you are welcome to check it out, leave feedback and/or a PR
Quick Links: Installation | Configuring | Updating | Changelog | Roadmap | Contributing | Extending
Features
Examples show Python code, but most features also work in R, bash, typescript, and many other languages.
Hover
Hover over any piece of code; if an underline appears, you can press Ctrl to get a tooltip with function/class signature, module documentation or any other piece of information that the language server provides

Diagnostics
Critical errors have red underline, warnings are orange, etc. Hover over the underlined code to see a more detailed message

Jump to Definition
Use the context menu entries to jump to definitions

Highlight References
Place your cursor on a variable, function, etc and all the usages will be highlighted
Automatic Completion
Certain characters, for example '.' (dot) in Python, will automatically trigger completion

Automatic Signature Suggestions
Function signatures will automatically be displayed

Kernel-less Autocompletion
Advanced static-analysis autocompletion without a running kernel

When a kernel is available the suggestions from the kernel (such as keys of a dict and columns of a DataFrame autocompletion) are merged with the suggestions from the Language Server (currently only in notebook).
Rename
Rename variables, functions and more, in both: notebooks and the file editor. Use the context menu option or the F2 shortcut to invoke.

Diagnostics panel
Sort and jump between the diagnostics using the diagnostics panel. Open it searching for "Show diagnostics panel" in JupyterLab commands palette or from the context menu. Use context menu on rows in the panel to filter out diagnostics or copy their message.

Prerequisites
You will need to have all of the following installed:
- JupyterLab >=2.2.0,<3.0.0a0
- Python 3.5+
- nodejs 10+
Installation
For more extensive installation instructions, see the documentation.
For the current stable version, the following steps are recommended.
Use of a python virtualenv or a conda env is also recommended.
install python 3
conda install -c conda-forge python=3install JupyterLab and the server extension
conda install -c conda-forge 'jupyterlab>=2.2,<3.0.0a0' jupyter-lsp # or pip install 'jupyterlab>=2.2,<3.0.0a0' jupyter-lspNote: With conda, you could take advantage of the bundles:
jupyter-lsp-pythonorjupyter-lsp-rto install both the server extension and the language server.install
nodejsconda install -c conda-forge nodejs # or one of the following, as an administrator choco install nodejs # Windows with Chocolatey sudo apt-get install nodejs # Debian/Ubuntu sudo brew install nodejs # MacOS with Homebrew sudo dnf install nodejs # Fedora sudo yum install nodejs # RHEL/CentOSinstall the frontend extension:
jupyter labextension install @krassowski/jupyterlab-lsp # for JupyterLab 2.x # jupyter labextension install @krassowski/jupyterlab-lsp@0.8.0 # for JupyterLab 1.xinstall LSP servers for languages of your choice; for example, for Python (pyls) and R (languageserver) servers:
pip install python-language-server[all] R -e 'install.packages("languageserver")'or from
conda-forgeconda install -c conda-forge python-language-server r-languageserverPlease see our full list of supported language servers which includes installation hints for the common package managers (npm/pip/conda). In general, any LSP server from the Microsoft list should work after some additional configuration.
Note: it is worth visiting the repository of each server you install as many provide additional configuration options.
(Optional, Linux/OSX-only) to enable opening files outside of the root directory (the place where you start JupyterLab), create
.lsp_symlinkand symlink your/home, or any other location which includes the files that you wish to make possible to open in there:mkdir .lsp_symlink cd .lsp_symlink ln -s /home homeIf your user does not have sufficient permissions to traverse the entire path, you will not be able to open the file. A more detailed guide on symlinking (written for a related jupyterlab-go-to-definition extension) is available here.
Updating
To update previously installed extensions:
conda update jupyter-lsp
jupyter labextension update @krassowski/jupyterlab-lsp
# or
pip install -U jupyter-lsp
jupyter labextension update @krassowski/jupyterlab-lspGetting the latest alpha/beta/RC version
Use install command (update does not seem to work) appending @<0.x.y.rc-z> to the
extension name, like this:
jupyter labextension install @krassowski/jupyterlab-lsp@0.7.0-rc.0Configuring the servers
Server configurations can be edited using the Advanced Settings editor in JupyterLab (Settings > Advanced Settings Editor). For settings specific to each server, please see the table of language servers. Example settings might include:
{
"language_servers": {
"pyls": {
"serverSettings": {
"pyls.plugins.pydocstyle.enabled": true,
"pyls.plugins.pyflakes.enabled": false,
"pyls.plugins.flake8.enabled": true
}
},
"r-languageserver": {
"serverSettings": {
"r.lsp.debug": false,
"r.lsp.diagnostics": false
}
}
}
}The serverSettings key specifies the configurations sent to the language servers. These can be written using stringified dot accessors like above (in the VSCode style), or as nested JSON objects, e.g.:
{
"language_servers": {
"pyls": {
"serverSettings": {
"pyls": {
"plugins": {
"pydocstyle": {
"enabled": true
},
"pyflakes": {
"enabled": false
},
"flake8": {
"enabled": true
}
}
}
}
}
}
}Other configuration methods
Some language servers, such as pyls, provide other configuration methods in addition to language-server configuration messages (accessed using the Advanced Settings Editor). For example, pyls allows users to configure the server using a local configuration file. You can change the inspection/diagnostics for server plugins like pycodestyle there.
The exact configuration details will vary between operating systems (please see the configuration section of pycodestyle documentation), but as an example, on Linux you would simply need to create a file called ~/.config/pycodestyle, which may look like that:
[pycodestyle]
ignore = E402, E703
max-line-length = 120In the example above:
- ignoring E402 allows imports which are not on the very top of the file,
- ignoring E703 allows terminating semicolon (useful for matplotlib plots),
- the maximal allowed line length is increased to 120.
After changing the configuration you may need to restart the JupyterLab, and please be advised that the errors in configuration may prevent the servers from functioning properly.
Again, please do check the pycodestyle documentation for specific error codes, and check the configuration of other feature providers and language servers as needed.
Acknowledgements
This would not be possible without the fantastic initial work at wylieconlon/lsp-editor-adapter.