123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146 |
- vim.diagnostic.config({
- -- only show virtual text for WARN and higher
- virtual_text = { severity = { min = vim.diagnostic.severity.WARN } },
- })
- local capabilities = require('cmp_nvim_lsp').default_capabilities()
- local nvim_lsp = require('lspconfig')
- nvim_lsp.bashls.setup({
- capabilities = capabilities,
- on_attach = on_attach,
- });
- if vim.fn.executable("node_modules/.bin/eslint") == 1 then
- local options = {}
- -- some projects have local rules, this isn't exactly generic but is good
- -- enough
- if vim.fn.isdirectory("lint-rules") == 1 then
- options.rulePaths = { "./lint-rules" }
- end
- nvim_lsp.eslint.setup({
- settings = {
- options = options,
- },
- handlers = {
- ["client/registerCapability"] = function(err, result, ctx, config)
- -- ignore as we can't handle any of this and it just spams the logs
- return vim.NIL
- end
- },
- on_init = function(client)
- -- add formatting capability, the language server registers this
- -- dynamically but neovim does not support that yet
- -- https://github.com/microsoft/vscode-eslint/pull/1307
- client.server_capabilities.documentFormattingProvider = true
- client.server_capabilities.documentRangeFormattingProvider = true
- end,
- -- mappings should have been attached by typescript and re-attaching can
- -- overwrite the typescript specific overrides
- })
- end
- if vim.fn.executable("dprint") == 1 then
- local version = vim.version.parse(vim.fn.system("dprint --version"))
- if vim.version.cmp(version, {0,45,0}) >= 0 then
- nvim_lsp.dprint.setup({})
- end
- end
- if vim.fn.executable("deno") == 1 then
- nvim_lsp.denols.setup({
- capabilities = capabilities,
- on_attach = on_attach,
- });
- else
- require('typescript').setup({
- server = {
- init_options = {
- completionDisableFilterText = true,
- preferences = {
- importModuleSpecifierPreference = 'non-relative',
- },
- },
- capabilities = capabilities,
- handlers = {
- ['$/typescriptVersion'] = function(err, result, ctx, config)
- vim.notify(string.format('Typescript %s', result.version))
- end
- },
- flags = {
- debounce_text_changes = 150,
- },
- on_init = function(client)
- -- mark tsserver as not having formatting available as we rely on
- -- eslint and dprint for that
- client.server_capabilities.documentFormattingProvider = false
- client.server_capabilities.documentRangeFormattingProvider = false
- end,
- on_attach = function(client, bufnr)
- on_attach(client, bufnr)
- -- override mappings for typescript
- local opts = { silent = true, buffer = bufnr }
- -- exclude import statements from reference search (may have false positives)
- vim.keymap.set('n', 'gr', '<cmd>Telescope lsp_references default_text=!import\\ <CR>', opts)
- vim.keymap.set('n', 'gD', '<cmd>Telescope lsp_definitions<CR>', opts)
- vim.keymap.set('n', 'gd', '<cmd>TypescriptGoToSourceDefinition<CR>', opts)
- end
- }
- })
- end
- if vim.fn.executable("gopls") == 1 then
- nvim_lsp.gopls.setup({
- capabilities = capabilities,
- on_attach = on_attach,
- });
- end
- if vim.fn.executable("solargraph") == 1 then
- nvim_lsp.solargraph.setup({
- capabilities = capabilities,
- on_attach = on_attach,
- init_options = {
- formatting = false,
- }
- })
- end
- if vim.fn.executable("nil") == 1 then
- nvim_lsp.nil_ls.setup({
- on_attach = on_attach,
- });
- end
- if vim.fn.executable("jdtls") == 1 then
- nvim_lsp.jdtls.setup({
- on_attach = on_attach,
- handlers = {
- ["$/progress"] = function()
- -- this is quite noisy so just disable it
- end
- },
- });
- end
- -- custom LSP servers
- local configs = require('lspconfig.configs')
- if not configs.elvish then
- configs.elvish = {
- default_config = {
- cmd = {'elvish', '--lsp'},
- filetypes = {'elvish'},
- root_dir = nvim_lsp.util.root_pattern('*.elv'),
- settings = {},
- },
- }
- end
- nvim_lsp.elvish.setup({
- capabilities = capabilities,
- on_attach = on_attach,
- })
|