mirror of
https://github.com/ivuorinen/dotfiles.git
synced 2026-01-26 11:14:08 +00:00
88 lines
3.3 KiB
Lua
88 lines
3.3 KiB
Lua
-- Quickstart configs for Nvim LSP
|
|
-- https://github.com/neovim/nvim-lspconfig
|
|
-- luacheck: globals vim
|
|
return {
|
|
-- LSP auto-complete.
|
|
"neovim/nvim-lspconfig",
|
|
dependencies = {
|
|
-- Automatically install LSPs to stdpath for neovim
|
|
{ "williamboman/mason.nvim", config = true },
|
|
{ "williamboman/mason-lspconfig.nvim" },
|
|
|
|
-- Useful status updates for LSP
|
|
-- NOTE: `opts = {}` is the same as calling `require('fidget').setup({})`
|
|
-- NOTE: using tag legacy, fidget is being re-written completely
|
|
{ "j-hui/fidget.nvim", event = "LspAttach", tag = "legacy", opts = {} },
|
|
|
|
-- Additional lua configuration, makes nvim stuff amazing!
|
|
{ "folke/neodev.nvim" },
|
|
},
|
|
init = function()
|
|
-- disable lsp watcher. Too slow on linux
|
|
local ok, wf = pcall(require, "vim.lsp._watchfiles")
|
|
if ok then
|
|
wf._watchfunc = function()
|
|
return function() end
|
|
end
|
|
end
|
|
end,
|
|
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,
|
|
}
|