A language server for Jedi!
Project description
jedi-language-server
A Language Server for the latest version(s) of Jedi. If using Neovim/Vim, we recommend using with coc-jedi. Supports Python versions 3.6.2 and newer.
Note: this tool is actively used by its primary author. He's happy to review pull requests / respond to issues you may discover.
Installation
Some frameworks, like coc-jedi and vscode-python, will install and manage jedi-language-server for you. If you're setting up manually, you can run the following from your command line (bash / zsh):
pip install -U jedi-language-server
Alternatively (and preferably), use pipx to keep jedi-language-server and its dependencies isolated from your other Python dependencies. Don't worry, jedi is smart enough to figure out which Virtual environment you're currently using!
Capabilities
jedi-language-server aims to support Jedi's capabilities and expose them through the Language Server Protocol. It supports the following Language Server capabilities:
Language Features
- completionItem/resolve
- textDocument/codeAction (refactor.inline, refactor.extract)
- textDocument/completion
- textDocument/definition
- textDocument/documentHighlight
- textDocument/documentSymbol
- textDocument/hover
- textDocument/publishDiagnostics
- textDocument/references
- textDocument/rename
- textDocument/signatureHelp
- workspace/symbol
Text Synchronization (for diagnostics)
Editor Setup
The following instructions show how to use jedi-language-server with your development tooling. The instructions assume you have already installed jedi-language-server.
Vim / Neovim
Users may choose 1 of the following options:
- coc.nvim with coc-jedi.
- ALE.
- Neovim's native LSP client. See here for an example configuration.
- vim-lsp.
Note: this list is non-exhaustive. If you know of a great choice not included in this list, please submit a PR!
Emacs
Users may choose 1 of the following options:
Note: this list is non-exhaustive. If you know of a great choice not included in this list, please submit a PR!
Visual Studio Code (vscode)
With this release there is a new setting for python.languageServer
to use jedi-language-server: set python.languageServer
to JediLSP
.
Note: this is experimental and uses an older version (for now) to support python 2.7.
See: https://github.com/pappasam/jedi-language-server/issues/50#issuecomment-781101169
Command line
jedi-language-server can be run directly from the command line.
$ jedi-language-server --help
usage: jedi-language-server [-h] [--version] [--tcp] [--host HOST]
[--port PORT] [--log-file LOG_FILE] [-v]
Jedi language server: an LSP wrapper for jedi.
optional arguments:
-h, --help show this help message and exit
--version display version information and exit
--tcp use TCP server instead of stdio
--host HOST host for TCP server (default 127.0.0.1)
--port PORT port for TCP server (default 2087)
--log-file LOG_FILE redirect logs to the given file instead of writing to
stderr
-v, --verbose increase verbosity of log output
Examples:
Run from stdio: jedi-language-server
Configuration
We recommend using coc-jedi and following its configuration instructions.
If you are configuring manually, jedi-language-server supports the following initializationOptions:
{
"initializationOptions": {
"codeAction": {
"nameExtractVariable": "jls_extract_var",
"nameExtractFunction": "jls_extract_def"
},
"completion": {
"disableSnippets": false,
"resolveEagerly": false
},
"diagnostics": {
"enable": true,
"didOpen": true,
"didChange": true,
"didSave": true
},
"hover": {
"enable": true,
"disable": {
"class": { "all": false, "names": [], "full_names": [] },
"function": { "all": false, "names": [], "full_names": [] },
"instance": { "all": false, "names": [], "full_names": [] },
"keyword": { "all": false, "names": [], "full_names": [] },
"module": { "all": false, "names": [], "full_names": [] },
"param": { "all": false, "names": [], "full_names": [] },
"path": { "all": false, "names": [], "full_names": [] },
"property": { "all": false, "names": [], "full_names": [] },
"statement": { "all": false, "names": [], "full_names": [] }
}
},
"jediSettings": {
"autoImportModules": [],
"caseInsensitiveCompletion": true
},
"markupKindPreferred": "markdown",
"workspace": {
"extraPaths": [],
"symbols": {
"ignoreFolders": [".nox", ".tox", ".venv", "__pycache__", "venv"],
"maxSymbols": 20
}
}
}
}
See coc-jedi's configuration instructions for an explanation of the above configurations.
Additional Diagnostics
jedi-langugage-server provides diagnostics about syntax errors, powered by Jedi. If you would like additional diagnostics, we suggest using the powerful diagnostic-language-server.
Code Formatting
Again, we recommend that you use diagnostic-language-server. It also supports code formatting.
Local Development
To build and run this project from source:
Dependencies
Install the following tools manually:
Recommended
Get source code
Fork this repository and clone the fork to your development machine:
git clone https://github.com/<YOUR-USERNAME>/jedi-language-server
cd jedi-language-server
Set up development environment
make setup
Run tests
make test
Inspiration
Palantir's python-language-server inspired this project. In fact, for consistency's sake, many of python-language-server's CLI options are used as-is in jedi-language-server.
Unlike python-language-server, jedi-language-server:
- Uses pygls instead of creating its own low-level Language Server Protocol bindings
- Supports one powerful 3rd party static analysis / completion / refactoring library: Jedi. By only supporting Jedi, we can focus on supporting all Jedi features without exposing ourselves to too many broken 3rd party dependencies (I'm looking at you, rope).
- Is supremely simple because of its scope constraints. Leave complexity to the Jedi master. If the force is strong with you, please submit a PR!
Articles
Written by
Samuel Roeca samuel.roeca@gmail.com
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for jedi-language-server-0.32.0.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | 08eb5bff423d61ad56ae3bffb036638c1f6ae154daf57218148c274f4a9ea591 |
|
MD5 | 0053d0d22ea13729136fd36f93422731 |
|
BLAKE2b-256 | 39af94a5ebc485b12247caee1b38102bffdab6e033bd712243bc32f9e975b870 |
Hashes for jedi_language_server-0.32.0-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 43f552c64f35ee08c20c9f9812e8b5c85d5e906d10405c56d09d737840817c55 |
|
MD5 | 3f54141007e7ab8df64044eb5536cfe0 |
|
BLAKE2b-256 | 77d6c74246900ba6d5f4f07d4de2f4188062096343ae7a8a61de65117bf601dc |