Initial PyLSP documentation (#26835)

Closes https://github.com/zed-industries/zed/issues/26820

Release Notes:

- N/A
This commit is contained in:
Peter Tripp 2025-03-15 11:03:35 -04:00 committed by GitHub
parent c282acbe65
commit 5f390f1bf8
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -3,15 +3,36 @@
Python support is available natively in Zed.
- Tree-sitter: [tree-sitter-python](https://github.com/tree-sitter/tree-sitter-python)
- Language Server: [microsoft/pyright](https://github.com/microsoft/pyright)
- Language Servers:
- [microsoft/pyright](https://github.com/microsoft/pyright)
- [python-lsp/python-lsp-server](https://github.com/python-lsp/python-lsp-server) (PyLSP)
## Configuration
## Language Servers
Zed supports multiple Python language servers some of which may require configuration to work properly.
See: [Working with Language Servers](https://zed.dev/docs/configuring-languages#working-with-language-servers) for more information.
## Virtual Environments in the Terminal {#terminal-detect_venv}
Zed will detect Python virtual environments and automatically activate them in terminal if available.
See: [detect_venv documentation](../configuring-zed.md#terminal-detect_venv) for more.
## PyLSP
[python-lsp-server](https://github.com/python-lsp/python-lsp-server/), more commonly known as PyLSP, by default integrates with a number of external tools (autopep8, mccabe, pycodestyle, yapf) while others are optional and must be explicitly enabled and configured (flake8, pylint).
See [Python Language Server Configuration](https://github.com/python-lsp/python-lsp-server/blob/develop/CONFIGURATION.md) for more.
## PyRight
### PyRight Configuration
The [pyright](https://github.com/microsoft/pyright) language server offers flexible configuration options specified in a JSON-formatted text configuration. By default, the file is called `pyrightconfig.json` and is located within the root directory of your project. Pyright settings can also be specified in a `[tool.pyright]` section of a `pyproject.toml` file. A `pyrightconfig.json` file always takes precedence over `pyproject.toml` if both are present.
For more information, see the Pyright [configuration documentation](https://microsoft.github.io/pyright/#/configuration).
## Settings
### PyRight Settings
The [pyright](https://github.com/microsoft/pyright) language server also accepts specific LSP-related settings, not necessarily connected to a project. These can be changed in the `lsp` section of your `settings.json`.
@ -41,7 +62,7 @@ For example, in order to:
For more information, see the Pyright [settings documentation](https://microsoft.github.io/pyright/#/settings).
## Virtual environments
### Pyright Virtual environments
A Python [virtual environment](https://docs.python.org/3/tutorial/venv.html) allows you to store all of a project's dependencies, including the Python interpreter and package manager, in a single directory that's isolated from any other Python projects on your computer.
@ -94,17 +115,12 @@ You can also configure this option directly in your `settings.json` file ([pyrig
}
```
## Code formatting & Linting
### Code formatting & Linting
The Pyright language server does not provide code formatting or linting. If you want to detect lint errors and reformat your Python code upon saving, you'll need to set up.
A common tool for formatting Python code is [Ruff](https://docs.astral.sh/ruff/). It is another tool written in Rust, an extremely fast Python linter and code formatter. It is available through the [Ruff extension](https://github.com/zed-industries/zed/tree/main/extensions/ruff/). To configure the Ruff extension to work within Zed, see the setup documentation [here](https://docs.astral.sh/ruff/editors/setup/#zed).
## Virtual Environments in the Terminal {#terminal-detect_venv}
Zed will also detect virtual environments and automatically activate them in terminal if available.
See: [detect_venv documentation](../configuring-zed.md#terminal-detect_venv) for more.
<!--
TBD: Expand Python Ruff docs.
TBD: Ruff pyproject.toml, ruff.toml docs. `ruff.configuration`.