initial commit

This commit is contained in:
2025-10-14 12:29:46 +02:00
parent 0439bb0ff7
commit 903704e4d7
99 changed files with 8495 additions and 0 deletions

View File

@@ -0,0 +1,188 @@
local function keymap(args)
-- get client
local bufnr = args.buf
local client = vim.lsp.get_client_by_id(args.data.client_id)
if not client then
return
end
-- loading workspace diagnostics
require('workspace-diagnostics').populate_workspace_diagnostics(client, bufnr)
-- Enable completion triggered by <c-x><c-o>
vim.api.nvim_buf_set_option(bufnr, 'omnifunc', 'v:lua.vim.lsp.omnifunc')
-- Mappings.
-- See `:help vim.lsp.*` for documentation on any of the below functions
local bufopts = { noremap = true, silent = true, buffer = bufnr }
vim.keymap.set('n', 'gD', vim.lsp.buf.declaration, bufopts)
vim.keymap.set('n', 'gd', vim.lsp.buf.definition, bufopts)
vim.keymap.set('n', 'K', vim.lsp.buf.hover, bufopts)
vim.keymap.set('n', 'gi', vim.lsp.buf.implementation, bufopts)
vim.keymap.set('n', '<C-k>', vim.lsp.buf.signature_help, bufopts)
vim.keymap.set('n', '<A-k>', function()
vim.diagnostic.open_float({ focusable = false, border = "rounded" })
end, bufopts)
vim.keymap.set('n', '<space>wa', vim.lsp.buf.add_workspace_folder, bufopts)
vim.keymap.set('n', '<space>wr', vim.lsp.buf.remove_workspace_folder, bufopts)
vim.keymap.set('n', '<space>wl', function()
print(vim.inspect(vim.lsp.buf.list_workspace_folders()))
end, bufopts)
vim.keymap.set('n', '<space>D', vim.lsp.buf.type_definition, bufopts)
vim.keymap.set('n', '<space>ca', vim.lsp.buf.code_action, bufopts)
vim.keymap.set('n', '<space>rn', vim.lsp.buf.rename, bufopts)
-- autoformat
if client.supports_method('textDocument/formatting') then
vim.api.nvim_create_autocmd('BufWritePre', {
group = vim.api.nvim_create_augroup('LspFormatting', { clear = true }),
buffer = args.buf,
callback = function()
if vim.fn.exists(":LspEslintFixAll") == 1 then
vim.cmd(":LspEslintFixAll")
else
vim.lsp.buf.format { bufnr = args.buf, id = client.id }
end
end
})
end
-- vim.lsp.inlay_hint.enable(true, { bufnr })
end
local function diagnostic_icons()
local signs = {
Error = "",
Warn = "",
Hint = "",
Info = ""
}
for type, icon in pairs(signs) do
local hl = "DiagnosticSign" .. type
vim.fn.sign_define(hl, { text = icon, texthl = hl, numhl = hl })
end
end
local function configToHandler(server, config)
return function()
require("lspconfig")[server].setup(config)
end
end
local function lsp_setup()
local lspconfig = require("lspconfig")
-- adding edge cases for workspace diagnostics
require('workspace-diagnostics').setup {
workspace_files = function()
local gitPath = vim.fn.systemlist("git rev-parse --show-toplevel")[1]
local workspace_files = vim.fn.split(vim.fn.system("git ls-files " .. gitPath), "\n")
-- this makes nuxt laod the nuxt typescript definition
table.insert(workspace_files, '.nuxt/nuxt.d.ts')
return workspace_files
end
}
vim.api.nvim_create_autocmd("LspAttach", {
desc = "LSP actions",
callback = keymap
})
local capabilities = require("cmp_nvim_lsp").default_capabilities()
local with_defaults = function(config)
config.capabilities = capabilities
return config
end
require('mason').setup({})
require('mason-lspconfig').setup { ensure_installed = {} }
vim.lsp.enable({
'vue_ls',
'nil_ls',
'nixd',
'rust_analyzer',
'lua_ls',
'gdscript',
'jsonls',
'r_language_server',
'tailwindcss',
'html',
'taplo',
'protols',
'yamlls',
'clangd',
'eslint',
'nushell',
'tinymist'
-- 'jdtls'
})
-- not collision between deno lsp and ts lsp
if require("lib.lsp").has_file("deno.json") then
vim.lsp.enable("denols")
else
vim.lsp.enable("vtsls")
-- vim.lsp.enable("ts_ls") this is disabled vtsls for vue required
end
vim.lsp.config('*', with_defaults({}))
vim.lsp.config('vue_ls', with_defaults(require("plugins.spec.server_configurations.vue")))
vim.lsp.config('nil_ls', with_defaults(require("plugins.spec.server_configurations.nix")['nil']))
vim.lsp.config('nixd', with_defaults(require("plugins.spec.server_configurations.nix")['nixd']))
vim.lsp.config('rust_analyzer', with_defaults(require("plugins.spec.server_configurations.rust")))
vim.lsp.config('lua_ls', with_defaults(require("plugins.spec.server_configurations.lua")))
vim.lsp.config('gdscript', with_defaults(require("plugins.spec.server_configurations.gdscript")))
vim.lsp.config('ts_ls', with_defaults(require("plugins.spec.server_configurations.typescript").config()))
vim.lsp.config('jsonls', with_defaults(require("plugins.spec.server_configurations.json")))
vim.lsp.config('yamlls', with_defaults(require("plugins.spec.server_configurations.yaml")))
vim.lsp.config('denols', with_defaults(require("plugins.spec.server_configurations.deno").config()))
vim.lsp.config('r_language_server', with_defaults({
cmd = { "R", "--no-echo", "-e", "languageserver::run()" }
}))
vim.lsp.config('jdtls', with_defaults(require("plugins.spec.server_configurations.java")))
vim.lsp.config('tailwindcss', with_defaults(require("plugins.spec.server_configurations.tailwindcss")))
vim.lsp.config('html', with_defaults(require("plugins.spec.server_configurations.html")))
vim.lsp.config('taplo', with_defaults(require("plugins.spec.server_configurations.taplo")))
vim.lsp.config('protols', with_defaults(require("plugins.spec.server_configurations.proto")))
vim.lsp.config('clangd', with_defaults(require("plugins.spec.server_configurations.clang")))
vim.lsp.config('vtsls', with_defaults(require("plugins.spec.server_configurations.vtsls").config()))
vim.lsp.config('eslint', with_defaults(require("plugins.spec.server_configurations.eslint")))
vim.lsp.config('tinymist', with_defaults({
cmd = { "tinymist" }
}))
vim.diagnostic.config({
virtual_text = {
prefix = '', -- or '■', '▎', 'x', '' whatever you want
spacing = 2,
},
underline = true,
update_in_insert = false, -- set to true if you want real-time errors while typing
severity_sort = true,
signs = {
text = {
[vim.diagnostic.severity.ERROR] = "",
[vim.diagnostic.severity.WARN] = "",
[vim.diagnostic.severity.INFO] = "",
[vim.diagnostic.severity.HINT] = "",
}
}
})
end
return {
'neovim/nvim-lspconfig',
event = { "BufReadPost", "BufNewFile" },
config = function()
lsp_setup()
end,
dependencies = {
{ 'williamboman/mason.nvim' },
{ 'williamboman/mason-lspconfig.nvim' },
'artemave/workspace-diagnostics.nvim',
}
}