diff --git a/crates/ruff_server/README.md b/crates/ruff_server/README.md index 4ea5110781788..beccb4bdb12d6 100644 --- a/crates/ruff_server/README.md +++ b/crates/ruff_server/README.md @@ -5,6 +5,13 @@ listen for requests from the client, (in this case, the code editor of your choi crates to create real-time diagnostics or formatted code, which is then sent back to the client. It also tracks configuration files in your editor's workspace, and will refresh its in-memory configuration whenever those files are modified. +### Setup + +We have specific setup instructions depending on your editor. If you don't see your editor on this list and would like a setup guide, please open an issue. + +- Visual Studio Code: Install the [Ruff extension from the VS Code Marketplace](https://marketplace.visualstudio.com/items?itemName=charliermarsh.ruff). The language server used by the extension will be, by default, the one in your actively-installed `ruff` binary. If you don't have `ruff` installed and haven't provided a path to the extension, it comes with a bundled `ruff` version that it will use instead. Since the new Ruff language server has not yet been stabilized, you will need to use the pre-release version of the extension and enable the `Experimental Server` setting. +- Neovim: See the [Neovim setup guide](docs/setup/NEOVIM.md). + ### Contributing If you're interested in contributing to `ruff server` - well, first of all, thank you! Second of all, you might find the [**contribution guide**](CONTRIBUTING.md) to be a useful resource. Finally, don't hesitate to reach out on our [**Discord**](https://discord.com/invite/astral-sh) if you have questions. diff --git a/crates/ruff_server/docs/setup/NEOVIM.md b/crates/ruff_server/docs/setup/NEOVIM.md new file mode 100644 index 0000000000000..98258a46cc137 --- /dev/null +++ b/crates/ruff_server/docs/setup/NEOVIM.md @@ -0,0 +1,54 @@ +## Neovim Setup Guide for `ruff server` + +### Using `nvim-lspconfig` + +1. Install [`nvim-lspconfig`](https://github.com/neovim/nvim-lspconfig). +1. Setup `nvim-lspconfig` with the [suggested configuration](https://github.com/neovim/nvim-lspconfig/tree/master#suggested-configuration). +1. Finally, add this to your `init.lua`: + +```lua +require('lspconfig').ruff.setup() +``` + +See [`nvim-lspconfig`'s server configuration guide](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#ruff) for more details +on how to configure the server from there. + +> \[!IMPORTANT\] +> +> If you have the older language server (`ruff-lsp`) configured in Neovim, make sure to disable it to prevent any conflicts. + +#### Tips + +If you're using Ruff alongside another LSP (like Pyright), you may want to defer to that LSP for certain capabilities, like `textDocument/hover`: + +```lua +local on_attach = function(client, bufnr) + if client.name == 'ruff' then + -- Disable hover in favor of Pyright + client.server_capabilities.hoverProvider = false + end +end + +require('lspconfig').ruff.setup { + on_attach = on_attach, +} +``` + +If you'd like to use Ruff exclusively for linting, formatting, and import organization, you can disable those capabilities for Pyright: + +```lua +require('lspconfig').pyright.setup { + settings = { + pyright = { + -- Using Ruff's import organizer + disableOrganizeImports = true, + }, + python = { + analysis = { + -- Ignore all files for analysis to exclusively use Ruff for linting + ignore = { '*' }, + }, + }, + }, +} +```