From 6f02ac5d7cec310a4abf6cfd28b0e8590a85078a Mon Sep 17 00:00:00 2001 From: Jane Lewis Date: Wed, 22 May 2024 14:03:24 -0700 Subject: [PATCH] Visually demonstrate how to set nativeServer --- crates/ruff_server/README.md | 26 ++++++++++++++++-- .../ruff_server/docs/assets/nativeServer.png | Bin 0 -> 23426 bytes 2 files changed, 23 insertions(+), 3 deletions(-) create mode 100644 crates/ruff_server/docs/assets/nativeServer.png diff --git a/crates/ruff_server/README.md b/crates/ruff_server/README.md index 4bcd8e9635476b..6af76d9a9ba33a 100644 --- a/crates/ruff_server/README.md +++ b/crates/ruff_server/README.md @@ -9,9 +9,29 @@ files in your editor's workspace, and will refresh its in-memory configuration w 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). **As this server is still in beta, you will need to enable the `Native Server` extension setting**. 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. -- Neovim: See the [Neovim setup guide](docs/setup/NEOVIM.md). -- Helix: See the [Helix setup guide](docs/setup//HELIX.md). +#### Visual Studio Code + +Install the [Ruff extension from the VS Code Marketplace](https://marketplace.visualstudio.com/items?itemName=charliermarsh.ruff). + +**As this server is still in beta, you will need to enable the `Native Server` extension setting**. + +!\[image\](assets/nativeServer.png A screenshot showing an enabled "Native Server" extension setting in the VS Code settings view) + +You can also set it in your user / workspace JSON settings as follows: + +```json +"ruff.nativeServer": true +``` + +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. + +#### Neovim + +See the [Neovim setup guide](docs/setup/NEOVIM.md). + +#### Helix + +See the [Helix setup guide](docs/setup//HELIX.md). If you are transferring your configuration from `ruff-lsp`, regardless of editor, there are several settings which have changed or are no longer available which you should be aware of. See the [migration guide](docs/MIGRATION.md) for more details. diff --git a/crates/ruff_server/docs/assets/nativeServer.png b/crates/ruff_server/docs/assets/nativeServer.png new file mode 100644 index 0000000000000000000000000000000000000000..ec36115c30bfe2470a5ed40cc86b9e8cf4ede1b7 GIT binary patch literal 23426 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 literal 0 HcmV?d00001