A language server for Jedi!
Project description
jedi-language-server
A Language Server for the latest version(s) of Jedi.
Note: this tool is actively used by its primary author. He's happy to review pull requests / respond to issues you may discover.
Installation
From your command line (bash / zsh), run:
pip install -U jedi-language-server
-U
ensures that you're pulling the latest version from pypi.
Alternatively, consider using pipx to keep jedi-language-server isolated from your other Python dependencies.
Overview
jedi-language-server aims to support all of Jedi's capabilities and expose them through the Language Server Protocol. It currently supports the following Language Server requests:
- textDocument/completion
- textDocument/definition
- textDocument/documentSymbol
- textDocument/hover
- textDocument/publishDiagnostics
- textDocument/references
- textDocument/rename
- textDocument/signatureHelp
- workspace/symbol
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.
Neovim
Command line (bash / zsh)
At your terminal prompt:
jedi-language-server
jedi-language-server currently works only over IO. This may change in the future.
Configuration
jedi-language-server supports top-level configuration items in coc-settings.json
(or your editor-equivalent configuration file). The following is a snippet of coc-settings.json
with defaults:
{
"jedi.enabled": true,
"jedi.completion.triggerCharacters": [".", "'", "\""],
"jedi.signatureHelp.triggerCharacters": ["(", ",", ")"],
"jedi.diagnostics.enabled": true,
"jedi.diagnostics.didOpen": true,
"jedi.diagnostics.didChange": true,
"jedi.diagnostics.didSave": true
}
jedi.enabled
Enables (or disables) all jedi-language-server features (other than initialization)
- type:
boolean
- default:
true
jedi.completion.triggerCharacters
Defines characters that trigger completion automatically when typed
- type:
array<string>
- default:
[".", "'", "\""]
jedi.signatureHelp.triggerCharacters
Defines characters that trigger signature help automatically when typed
- type:
array<string>
- default:
["(", ",", ")"]
jedi.diagnostics.enabled
Enables (or disables) diagnostics provided by Jedi
- type:
boolean
- default:
true
jedi.diagnostics.didOpen
When diagnostics are enabled, run on document open
- type:
boolean
- default:
true
jedi.diagnostics.didChange
When diagnostics are enabled, run on in-memory document change (eg, while you're editing, without needing to save to disk)
- type:
boolean
- default:
true
jedi.diagnostics.didSave
When diagnostics are enabled, run on document save (to disk)
- type:
boolean
- default:
true
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.
If using Neovim/coc, this can easily be done with coc-diagnostic. Configure with pylint in your coc-settings.json
:
"diagnostic-languageserver.filetypes": {
"python": "pylint"
},
"diagnostic-languageserver.linters": {
"pylint": {
"sourceName": "pylint",
"command": "pylint",
"args": [
"--output-format",
"text",
"--score",
"no",
"--msg-template",
"'{line}:{column}:{category}:{msg} ({msg_id}:{symbol})'",
"%file"
],
"formatPattern": [
"^(\\d+?):(\\d+?):([a-z]+?):(.*)$",
{
"line": 1,
"column": 2,
"security": 3,
"message": 4
}
],
"securities": {
"informational": "hint",
"refactor": "info",
"convention": "info",
"warning": "warning",
"error": "error",
"fatal": "error"
},
"offsetColumn": 1,
"formatLines": 1
}
}
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. 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 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!
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.9.0.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | 6c2e3b49275bb815b060338ff66f4f9fe288cc53fe84bbf7337476db153635dc |
|
MD5 | 7bdd6fc8d69c8d6ee73f85267ba49f83 |
|
BLAKE2b-256 | d0c3d7732af5148e15b9f96dc6fab204de20dbd34f28b9fe97f9209654dcafba |
Hashes for jedi_language_server-0.9.0-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 2a11adac06aef1741896fcf4a241f2b16aedd905079696be7ab220b186d1ee69 |
|
MD5 | 4d0125770018c8552fa1d9f05c97afc6 |
|
BLAKE2b-256 | 9b3ae40b441d69bfac9e46a2857b3b159c30a403cad5efcf8c6fa1ed78e15a19 |