Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -2,3 +2,4 @@ tags
test.sh
.luarc.json
nvim
plugin/packer_compiled.lua
60 changes: 60 additions & 0 deletions after/plugin/autoformat.lua
Original file line number Diff line number Diff line change
@@ -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,
})