init: autoformat sub-plugin

This commit is contained in:
TJ DeVries 2022-12-19 17:50:28 -05:00
parent e3b768619c
commit 2eada65d52
2 changed files with 61 additions and 0 deletions

1
.gitignore vendored
View File

@ -2,3 +2,4 @@ tags
test.sh test.sh
.luarc.json .luarc.json
nvim nvim
plugin/packer_compiled.lua

View File

@ -0,0 +1,60 @@
local enable_autoformat = true
if not enable_autoformat then
return
end
-- Switch for controlling whether you want autoformatting.
-- Use :KickstartFormatToggle to toggle autoformatting on or off
local enabled = true
vim.api.nvim_create_user_command('KickstartFormatToggle', function()
enabled = not enabled
print('Setting autoformatting to: ' .. tostring(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
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
vim.api.nvim_create_autocmd('BufWritePre', {
group = get_augroup(client),
buffer = bufnr,
callback = function()
if not enabled then
return
end
vim.lsp.buf.format { async = false }
end,
})
end,
})