enc: optimize lsp config & optimize foramat on save

This commit is contained in:
asep.komarudin 2024-06-25 05:41:42 +07:00
parent 618b816d52
commit a3143f9ae0
12 changed files with 437 additions and 322 deletions

View file

@ -10,9 +10,9 @@ local cmd, _ = pcall(require, "user.autocommands")
if cmd then
require("user.autocommands")
end
local onsave, _ = pcall(require, "user.format_onsave")
if onsave then
require("user.format_onsave")
end
-- local onsave, _ = pcall(require, "user.format_onsave")
-- if onsave then
-- require("user.format_onsave")
-- end
vim.g.pcode_icons = require("user.icons")
return {}

View file

@ -1,30 +1,110 @@
return {
{
"neovim/nvim-lspconfig",
lazy = true,
event = "BufRead",
cmd = {
"LspInfo",
"LspInstall",
"LspUninstall",
"williamboman/mason-lspconfig.nvim",
dependencies = {
{
"neovim/nvim-lspconfig",
lazy = true,
event = "BufRead",
cmd = {
"LspInfo",
"LspInstall",
"LspUninstall",
},
config = function()
require("lspconfig.ui.windows").default_options.border = "rounded"
end,
},
{
"williamboman/mason.nvim",
lazy = true,
cmd = {
"Mason",
"MasonInstall",
"MasonUninstall",
"MasonUninstallAll",
"MasonLog",
},
opts = function()
local icons = vim.g.pcode_icons.ui
return {
ui = {
-- border = "none",
border = icons.Border,
icons = {
package_pending = icons.DotCircle,
package_installed = icons.CheckCircle,
package_uninstalled = icons.BlankCircle,
},
keymaps = {
-- Keymap to expand a server in the UI
toggle_server_expand = "<CR>",
-- Keymap to install the server under the current cursor position
install_server = "i",
-- Keymap to reinstall/update the server under the current cursor position
update_server = "u",
-- Keymap to check for new version for the server under the current cursor position
check_server_version = "c",
-- Keymap to update all installed servers
update_all_servers = "U",
-- Keymap to check which installed servers are outdated
check_outdated_servers = "C",
-- Keymap to uninstall a server
uninstall_server = "X",
},
},
log_level = vim.log.levels.INFO,
max_concurrent_installers = 4,
}
end,
config = function(_, opts)
require("mason").setup(opts)
end,
},
},
config = function()
require("lspconfig.ui.windows").default_options.border = "rounded"
event = "BufReadPre",
opts = function()
local servers = { "lua_ls" }
local mason_install = pcode.mason_ensure_installed or {}
vim.list_extend(servers, mason_install)
return {
ensure_installed = servers,
automatic_installation = true,
}
end,
},
{
"williamboman/mason.nvim",
lazy = true,
dependencies = { "williamboman/mason-lspconfig.nvim" },
cmd = {
"Mason",
"MasonInstall",
"MasonUninstall",
"MasonUninstallAll",
"MasonLog",
},
config = function()
require("user.lsp")
config = function(_, opts)
require("mason-lspconfig").setup(opts)
local option = {}
local unregis_lsp = pcode.unregister_lsp or {}
require("mason-lspconfig").setup_handlers({
function(server_name) -- default handler (optional)
local capabilities = require("user.lsp.handlers").capabilities
if server_name == "clangd" then
capabilities.offsetEncoding = { "utf-16" }
end
local is_skip = false
local my_index = idxOf(unregis_lsp, server_name)
if my_index ~= nil then
is_skip = true
end
if not is_skip then
option = {
on_attach = require("user.lsp.handlers").on_attach,
capabilities = capabilities,
}
server_name = vim.split(server_name, "@")[1]
local require_ok, conf_opts = pcall(require, "user.lsp.settings." .. server_name)
if require_ok then
option = vim.tbl_deep_extend("force", conf_opts, option)
end
require("lspconfig")[server_name].setup(option)
end
end,
})
require("user.lsp.handlers").setup()
end,
},
}

View file

@ -32,8 +32,17 @@ return {
debug = false,
sources = sources,
on_attach = function(client, bufnr)
if client.supports_method("textDocument/formatting") then
vim.api.nvim_clear_autocmds({ group = augroup, buffer = bufnr })
vim.api.nvim_clear_autocmds({ group = augroup, buffer = bufnr })
local filetype = vim.bo.filetype
local n = require("null-ls")
local s = require("null-ls.sources")
local method = n.methods.FORMATTING
local available_formatters = s.get_available(filetype, method)
if
(#available_formatters > 0 and client.name == "null-ls")
or client.supports_method("textDocument/formatting")
then
vim.api.nvim_create_autocmd("BufWritePre", {
group = augroup,
buffer = bufnr,
@ -41,10 +50,24 @@ return {
vim.lsp.buf.format({ bufnr = bufnr, timeout_ms = pcode.format_timeout_ms or 5000 })
end,
})
else
vim.api.nvim_create_autocmd("BufWritePre", {
group = augroup,
buffer = bufnr,
callback = function()
vim.lsp.buf.format({ bufnr = bufnr, timeout_ms = pcode.format_timeout_ms or 5000, filter = nil })
end,
})
end
end,
}
else
vim.schedule(function()
pcall(function()
vim.api.nvim_clear_autocmds({ group = "LspFormatting" })
end)
end)
return {
debug = false,
sources = sources,

View file

@ -28,6 +28,15 @@ _G.all_trim = function(s)
return s:match("^%s*(.-)%s*$")
end
_G.idxOf = function(array, value)
for i, v in ipairs(array) do
if v == value then
return i
end
end
return nil
end
-- run if rust config true
if pcode.active_rust_config then
table.insert(pcode.mason_ensure_installed, "rust_analyzer")