-- 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 = { 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 -- 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 = true, compositeLiteralFields = true, compositeLiteralTypes = true, constantValues = true, functionTypeParameters = true, -- parameterNames = true, 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 }