97 lines
3.8 KiB
Lua
97 lines
3.8 KiB
Lua
# 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
|