Formatting LSP

    Definição curta: Tutorial para configurar formatação automática de código via LSP no Neovim. Usa null-ls ou built-in LSP formatting.

    Antes de começar

    • Neovim v0.11 ou mais recente instalado — confira com nvim --version
    • Um init.lua que já carrega, ainda que vazio

    O que você vai aprender

    • Explicar Built-in formatting com suas palavras
    • Explicar null-ls setup com suas palavras
    • Explicar Formatting on save com suas palavras
    • Localizar o assunto desta página no :help do seu próprio Neovim

    O que é

    O LSP permite formatação de código padronizada. No Neovim v0.11+, o formatting pode ser feito via built-in vim.lsp.buf.format() ou com null-ls.

    Índice de sub-tópicos

    Built-in formatting

    Disponível no Neovim 0.10+:

    vim.keymap.set("n", "<leader>gf", function()
      vim.lsp.buf.format({ async = true })
    end, { silent = true })

    null-ls setup

    -- plugins/null-ls.lua
    return {
      "jose-elias-alvarez/null-ls.nvim",
      dependencies = { "nvim-lua/plenary.nvim" },
    }
    -- setup/null-ls.lua
    local null_ls = require("null-ls")
    
    null_ls.setup({
      sources = {
        null_ls.builtins.formatting.stylua,      -- Lua
        null_ls.builtins.formatting.black,        -- Python
        null_ls.builtins.formatting.prettier,    -- JS/TS
        null_ls.builtins.formatting.rustfmt,     -- Rust
        null_ls.builtins.formatting.gofmt,        -- Go
      },
    })

    Formatting on save

    -- setup/formatting.lua
    vim.api.nvim_create_autocmd("BufWritePre", {
      pattern = "*.lua",
      callback = function()
        vim.lsp.buf.format({ async = true })
      end,
    })

    Keymaps

    vim.keymap.set("n", "<leader>gf", function()
      vim.lsp.buf.format({ async = true })
    end, { desc = "Format buffer with LSP" })

    Você aprendeu

    • Built-in formatting
    • null-ls setup
    • Formatting on save
    • Keymaps

    Perguntas para reflexão

    1. O que Built-in formatting resolve, e o que se perde sem isso?
    2. O que null-ls setup resolve, e o que se perde sem isso?
    3. O que Formatting on save resolve, e o que se perde sem isso?
    4. Qual parte desta página você conseguiria reproduzir sem consultar, direto no editor?

    Artigos relacionados

    Veja também

    Referências