summaryrefslogtreecommitdiff
path: root/.config/nvim/lua/language-servers.lua
diff options
context:
space:
mode:
Diffstat (limited to '.config/nvim/lua/language-servers.lua')
-rw-r--r--.config/nvim/lua/language-servers.lua155
1 files changed, 155 insertions, 0 deletions
diff --git a/.config/nvim/lua/language-servers.lua b/.config/nvim/lua/language-servers.lua
new file mode 100644
index 0000000..f7e28c1
--- /dev/null
+++ b/.config/nvim/lua/language-servers.lua
@@ -0,0 +1,155 @@
+-- NOTE: a table or true to enable, false to disable
+return {
+ lua_ls = {
+ settings = {
+ diagnostics = { globals = { 'vim' } },
+ telemetry = { enabled = false },
+ hint = { enable = true },
+ workspace = {
+ library = {
+ [vim.fn.expand('$VIMRUNTIME/lua')] = true,
+ [vim.fn.stdpath('config') .. '/lua'] = true,
+ },
+ },
+ },
+ }, -- lua
+ clangd = {
+ mason = false,
+ cmd = {
+ 'clangd',
+ '--background-index',
+ '--clang-tidy',
+ '--header-insertion=iwyu',
+ '--completion-style=detailed',
+ '--function-arg-placeholders',
+ '--fallback-style=llvm',
+ },
+ root_dir = function(filename)
+ return require('lspconfig/util').root_pattern(
+ '.clang-tidy',
+ '.clang-format',
+ 'compile_commands.json',
+ '.git'
+ )(filename) or vim.fn.getcwd()
+ end,
+ init_options = {
+ usePlaceholders = true,
+ completeUnimported = true,
+ clangdFileStatus = true,
+ },
+ }, -- c/cpp
+ neocmake = {
+ root_dir = function(filename)
+ return require('lspconfig/util').root_pattern(
+ 'CMakePresets.json',
+ 'CTestConfig.cmake',
+ 'build',
+ 'cmake',
+ '.git' -- NOTE: git is last due to monorepos (so it tries to use build/cmake first)
+ )(filename) or vim.fn.getcwd()
+ end,
+ },
+ pyright = {
+ settings = {
+ python = {
+ pythonPath = '~/python/venv/bin/python',
+ },
+ },
+ }, -- python
+ bashls = true, -- bash
+ taplo = true, -- toml
+ lemminx = true, -- xml
+ yamlls = true, -- yaml
+ jsonls = true, -- json
+ html = true, -- html
+ cssls = true, -- css
+ ts_ls = true, -- javascript/typescript
+ astro = true, -- astro framework
+ mdx_analyzer = true, -- markdown with JS I think
+ -- marksman = true, -- Markdown LSP
+ markdown_oxide = true, -- Markdown LSP but better
+ gopls = {
+ cmd = { 'gopls' },
+ filetypes = { 'go', 'gomod', 'gowork', 'gotmpl' },
+ root_dir = function(filename)
+ return require('lspconfig/util').root_pattern('go.work', 'go.mod', '.git')(filename)
+ end,
+ settings = {
+ gopls = {
+ gofumpt = true,
+ codelenses = {
+ gc_details = false,
+ generate = true,
+ regenerate_cgo = true,
+ run_govulncheck = true,
+ test = true,
+ tidy = true,
+ upgrade_dependency = true,
+ vendor = true,
+ },
+ hints = {
+ assignVariableTypes = false,
+ compositeLiteralFields = false,
+ compositeLiteralTypes = true,
+ constantValues = true,
+ functionTypeParameters = false,
+ parameterNames = false,
+ rangeVariableTypes = true,
+ },
+ analyses = {
+ fieldalignment = true,
+ nilness = true,
+ unusedparams = true,
+ unusedwrite = true,
+ useany = true,
+ },
+ usePlaceholders = false,
+ completeUnimported = true,
+ staticcheck = true,
+ directoryFilters = { '-.git', '-.vscode', '-.idea', '-.vscode-test', '-node_modules' },
+ semanticTokens = true,
+ },
+ },
+ }, -- Go LSP
+ jdtls = true, -- java
+ -- sqlls = true,
+ -- sqls = {
+ -- on_attach = function(client, bufnr)
+ -- require('sqls').on_attach(client, bufnr)
+ -- end,
+ -- settings = {
+ -- sqls = {
+ -- connections = {
+ -- {
+ -- driver = 'sqlite3',
+ -- dataSourceName = '/home/kyren/projects/eko/server.db',
+ -- },
+ -- },
+ -- },
+ -- },
+ -- },
+ zls = {
+ mason = false,
+ cmd = { 'zls' },
+ settings = {
+ zls = {
+ enable_build_on_save = true,
+ build_on_save_args = {},
+ enable_argument_placeholders = false,
+ warn_style = true,
+
+ inlay_hints_show_variable_type_hints = true,
+ inlay_hints_show_struct_literal_field_type = true,
+ inlay_hints_show_parameter_name = true,
+ inlay_hints_show_builtin = true,
+ inlay_hints_hide_redundant_param_names = true,
+ inlay_hints_hide_redundant_param_names_last_token = true,
+ },
+ },
+ }, -- zig
+ nil_ls = {}, -- nix
+ asm_lsp = {
+ mason = false,
+ cmd = { 'asm-lsp' },
+ },
+}