From d6ad146301f44a5e5f4e45c3f7f05e7791ebaf3c Mon Sep 17 00:00:00 2001 From: TJ DeVries Date: Wed, 15 Feb 2023 15:53:09 -0500 Subject: [PATCH] add example of autoformatting --- init.lua | 4 ++- lua/kickstart/autoformat.lua | 61 ++++++++++++++++++++++++++++++++++++ 2 files changed, 64 insertions(+), 1 deletion(-) create mode 100644 lua/kickstart/autoformat.lua diff --git a/init.lua b/init.lua index 33cd4c2..4e6738a 100644 --- a/init.lua +++ b/init.lua @@ -78,7 +78,7 @@ require('lazy').setup({ }, -- TODO: - -- { import = 'kickstart' }, + { import = 'kickstart.plugins' }, -- { import = 'custom.plugins' }, }, {}) @@ -373,6 +373,8 @@ require('fidget').setup() local cmp = require 'cmp' local luasnip = require 'luasnip' +luasnip.config.setup {} + cmp.setup { snippet = { expand = function(args) diff --git a/lua/kickstart/autoformat.lua b/lua/kickstart/autoformat.lua new file mode 100644 index 0000000..7519c2c --- /dev/null +++ b/lua/kickstart/autoformat.lua @@ -0,0 +1,61 @@ +-- Toggle this on/off for autoformatting +local autoformatting = false +if not autoformatting then + return +end + +-- 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 + +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 format_is_enabled then + return + end + + vim.lsp.buf.format { async = false } + end, + }) + end, +})