# MIT License # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in all # copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. -- autoformat.lua -- -- Use your language server to automatically format your code on save. -- Adds additional commands as well to manage the behavior return { 'neovim/nvim-lspconfig', config = function() -- Switch for controlling whether you want autoformatting. -- Use :KickstartFormatToggle to toggle autoformatting on or off local format_is_enabled = true vim.api.nvim_create_user_command('KickstartFormatToggle', function() format_is_enabled = not format_is_enabled print('Setting autoformatting to: ' .. tostring(format_is_enabled)) end, {}) -- Create an augroup that is used for managing our formatting autocmds. -- We need one augroup per client to make sure that multiple clients -- can attach to the same buffer without interfering with each other. local _augroups = {} local get_augroup = function(client) if not _augroups[client.id] then local group_name = 'kickstart-lsp-format-' .. client.name local id = vim.api.nvim_create_augroup(group_name, { clear = true }) _augroups[client.id] = id end return _augroups[client.id] end -- Whenever an LSP attaches to a buffer, we will run this function. -- -- See `:help LspAttach` for more information about this autocmd event. vim.api.nvim_create_autocmd('LspAttach', { group = vim.api.nvim_create_augroup('kickstart-lsp-attach-format', { clear = true }), -- This is where we attach the autoformatting for reasonable clients callback = function(args) local client_id = args.data.client_id local client = vim.lsp.get_client_by_id(client_id) local bufnr = args.buf -- Only attach to clients that support document formatting if not client.server_capabilities.documentFormattingProvider then return end -- Tsserver usually works poorly. Sorry you work with bad languages -- You can remove this line if you know what you're doing :) if client.name == 'tsserver' then return end -- Create an autocmd that will run *before* we save the buffer. -- Run the formatting command for the LSP that has just attached. vim.api.nvim_create_autocmd('BufWritePre', { group = get_augroup(client), buffer = bufnr, callback = function() if not format_is_enabled then return end vim.lsp.buf.format({ async = false, filter = function(c) return c.id == client.id end, }) end, }) end, }) end, } -- The line beneath this is called `modeline`. See `:help modeline` -- vim: ts=2 sts=2 sw=2 et