From e1e5532ab13a1b20a96f122eeb908a6c9cf7cb9a Mon Sep 17 00:00:00 2001 From: Charlie Marsh Date: Wed, 29 Mar 2023 14:48:59 -0400 Subject: [PATCH] Add flymake-ruff to docs (#3800) --- docs/editor-integrations.md | 63 +++++++++++++++++++++++++++++++++++-- 1 file changed, 61 insertions(+), 2 deletions(-) diff --git a/docs/editor-integrations.md b/docs/editor-integrations.md index 8714531ffc..245c8474cd 100644 --- a/docs/editor-integrations.md +++ b/docs/editor-integrations.md @@ -126,9 +126,59 @@ Ruff can be integrated into any editor that supports the Language Server Protoco (see: [Language Server Protocol](#language-server-protocol-official)), including Vim and Neovim. It's recommended that you use [`ruff-lsp`](https://github.com/charliermarsh/ruff-lsp), the -officially supported LSP server for Ruff. +officially supported LSP server for Ruff. To use `ruff-lsp` with Neovim, install `ruff-lsp` from +PyPI along with [`nvim-lspconfig`](https://github.com/neovim/nvim-lspconfig). Then, add something +like the following to your `init.lua`: -However, Ruff is also available as part of the [coc-pyright](https://github.com/fannheyward/coc-pyright) +```lua +-- See: https://github.com/neovim/nvim-lspconfig/tree/54eb2a070a4f389b1be0f98070f81d23e2b1a715#suggested-configuration +local opts = { noremap=true, silent=true } +vim.keymap.set('n', 'e', vim.diagnostic.open_float, opts) +vim.keymap.set('n', '[d', vim.diagnostic.goto_prev, opts) +vim.keymap.set('n', ']d', vim.diagnostic.goto_next, opts) +vim.keymap.set('n', 'q', vim.diagnostic.setloclist, opts) + +-- Use an on_attach function to only map the following keys +-- after the language server attaches to the current buffer +local on_attach = function(client, bufnr) + -- Enable completion triggered by + vim.api.nvim_buf_set_option(bufnr, 'omnifunc', 'v:lua.vim.lsp.omnifunc') + + -- Mappings. + -- See `:help vim.lsp.*` for documentation on any of the below functions + local bufopts = { noremap=true, silent=true, buffer=bufnr } + vim.keymap.set('n', 'gD', vim.lsp.buf.declaration, bufopts) + vim.keymap.set('n', 'gd', vim.lsp.buf.definition, bufopts) + vim.keymap.set('n', 'K', vim.lsp.buf.hover, bufopts) + vim.keymap.set('n', 'gi', vim.lsp.buf.implementation, bufopts) + vim.keymap.set('n', '', vim.lsp.buf.signature_help, bufopts) + vim.keymap.set('n', 'wa', vim.lsp.buf.add_workspace_folder, bufopts) + vim.keymap.set('n', 'wr', vim.lsp.buf.remove_workspace_folder, bufopts) + vim.keymap.set('n', 'wl', function() + print(vim.inspect(vim.lsp.buf.list_workspace_folders())) + end, bufopts) + vim.keymap.set('n', 'D', vim.lsp.buf.type_definition, bufopts) + vim.keymap.set('n', 'rn', vim.lsp.buf.rename, bufopts) + vim.keymap.set('n', 'ca', vim.lsp.buf.code_action, bufopts) + vim.keymap.set('n', 'gr', vim.lsp.buf.references, bufopts) + vim.keymap.set('n', 'f', function() vim.lsp.buf.format { async = true } end, bufopts) +end + +-- Configure `ruff-lsp`. +-- See: https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#ruff_lsp +-- For the default config, along with instructions on how to customize the settings +require('lspconfig').ruff_lsp.setup { + on_attach = on_attach, + init_options = { + settings = { + -- Any extra CLI arguments for `ruff` go here. + args = {}, + } + } +} +``` + +Ruff is also available as part of the [coc-pyright](https://github.com/fannheyward/coc-pyright) extension for `coc.nvim`.
@@ -194,6 +244,15 @@ Ruff should then appear as a runnable action: Ruff is also available as the [Ruff](https://plugins.jetbrains.com/plugin/20574-ruff) plugin on the IntelliJ Marketplace (maintained by @koxudaxi). +## Emacs (Unofficial) + +Ruff is available as [`flymake-ruff`](https://melpa.org/#/flymake-ruff) on MELPA: + +```elisp +(require 'flymake-ruff) +(add-hook 'python-mode-hook #'flymake-ruff-load) +``` + ## TextMate (Unofficial) Ruff is also available via the [`textmate2-ruff-linter`](https://github.com/vigo/textmate2-ruff-linter)