Skip to main content

A language server for Jedi!

Project description

jedi-language-server

image-version image-license image-python-versions image-pypi-downloads github-action-testing

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

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:

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

jedi-language-server-0.32.0.tar.gz (23.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

jedi_language_server-0.32.0-py3-none-any.whl (26.2 kB view details)

Uploaded Python 3

File details

Details for the file jedi-language-server-0.32.0.tar.gz.

File metadata

  • Download URL: jedi-language-server-0.32.0.tar.gz
  • Upload date:
  • Size: 23.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.1.5 CPython/3.9.5 Linux/5.8.0-1033-azure

File hashes

Hashes for jedi-language-server-0.32.0.tar.gz
Algorithm Hash digest
SHA256 08eb5bff423d61ad56ae3bffb036638c1f6ae154daf57218148c274f4a9ea591
MD5 0053d0d22ea13729136fd36f93422731
BLAKE2b-256 39af94a5ebc485b12247caee1b38102bffdab6e033bd712243bc32f9e975b870

See more details on using hashes here.

File details

Details for the file jedi_language_server-0.32.0-py3-none-any.whl.

File metadata

File hashes

Hashes for jedi_language_server-0.32.0-py3-none-any.whl
Algorithm Hash digest
SHA256 43f552c64f35ee08c20c9f9812e8b5c85d5e906d10405c56d09d737840817c55
MD5 3f54141007e7ab8df64044eb5536cfe0
BLAKE2b-256 77d6c74246900ba6d5f4f07d4de2f4188062096343ae7a8a61de65117bf601dc

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page