init.lua 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  1. require('nvim-treesitter.configs').setup {
  2. highlight = {
  3. enable = true,
  4. },
  5. }
  6. local orig_util_open_floating_preview = vim.lsp.util.open_floating_preview
  7. function vim.lsp.util.open_floating_preview(contents, syntax, opts, ...)
  8. opts = opts or {}
  9. opts.border = opts.border or 'single'
  10. return orig_util_open_floating_preview(contents, syntax, opts, ...)
  11. end
  12. vim.diagnostic.config({
  13. virtual_text = { severity = { min = vim.diagnostic.severity.WARN } }
  14. })
  15. local opts = { noremap=true, silent=true }
  16. vim.api.nvim_set_keymap('n', '<space>e', '<cmd>lua vim.diagnostic.open_float()<CR>', opts)
  17. vim.api.nvim_set_keymap('n', '[d', '<cmd>lua vim.diagnostic.goto_prev()<CR>', opts)
  18. vim.api.nvim_set_keymap('n', ']d', '<cmd>lua vim.diagnostic.goto_next()<CR>', opts)
  19. vim.api.nvim_set_keymap('n', '<space>q', '<cmd>lua vim.diagnostic.setqflist({ severity = { min = vim.diagnostic.severity.WARN } })<CR>', opts)
  20. -- Allow pressing enter to autocomplete
  21. vim.api.nvim_set_keymap('i', '<CR>', 'pumvisible() ? "\\<C-y>" : "\\<CR>"', { noremap = true, expr = true })
  22. function on_attach(client, bufnr)
  23. -- Enable completion triggered by <c-x><c-o>
  24. vim.api.nvim_buf_set_option(bufnr, 'omnifunc', 'v:lua.MiniCompletion.completefunc_lsp')
  25. -- Mappings.
  26. -- See `:help vim.lsp.*` for documentation on any of the below functions
  27. vim.api.nvim_buf_set_keymap(bufnr, 'n', 'gD', '<cmd>lua vim.lsp.buf.declaration()<CR>', opts)
  28. vim.api.nvim_buf_set_keymap(bufnr, 'n', 'gd', '<cmd>lua vim.lsp.buf.definition()<CR>', opts)
  29. vim.api.nvim_buf_set_keymap(bufnr, 'n', 'K', '<cmd>lua vim.lsp.buf.hover()<CR>', opts)
  30. vim.api.nvim_buf_set_keymap(bufnr, 'n', 'gi', '<cmd>lua vim.lsp.buf.implementation()<CR>', opts)
  31. vim.api.nvim_buf_set_keymap(bufnr, 'n', '<C-k>', '<cmd>lua vim.lsp.buf.signature_help()<CR>', opts)
  32. vim.api.nvim_buf_set_keymap(bufnr, 'n', '<space>wa', '<cmd>lua vim.lsp.buf.add_workspace_folder()<CR>', opts)
  33. vim.api.nvim_buf_set_keymap(bufnr, 'n', '<space>wr', '<cmd>lua vim.lsp.buf.remove_workspace_folder()<CR>', opts)
  34. vim.api.nvim_buf_set_keymap(bufnr, 'n', '<space>wl', '<cmd>lua print(vim.inspect(vim.lsp.buf.list_workspace_folders()))<CR>', opts)
  35. vim.api.nvim_buf_set_keymap(bufnr, 'n', '<space>D', '<cmd>lua vim.lsp.buf.type_definition()<CR>', opts)
  36. vim.api.nvim_buf_set_keymap(bufnr, 'n', '<space>rn', '<cmd>lua vim.lsp.buf.rename()<CR>', opts)
  37. vim.api.nvim_buf_set_keymap(bufnr, 'n', '<space>ca', '<cmd>lua vim.lsp.buf.code_action()<CR>', opts)
  38. vim.api.nvim_buf_set_keymap(bufnr, 'n', 'gr', '<cmd>lua vim.lsp.buf.references()<CR>', opts)
  39. vim.api.nvim_buf_set_keymap(bufnr, 'n', '<space>f', '<cmd>lua vim.lsp.buf.formatting()<CR>', opts)
  40. end
  41. require'nvim-treesitter.configs'.setup {
  42. highlight = {
  43. enable = true,
  44. },
  45. }
  46. require('mini.completion').setup({
  47. delay = {
  48. -- disable autocomplete
  49. completion = 100000000,
  50. info = 100,
  51. signature = 50,
  52. },
  53. lsp_completion = {
  54. source_func = 'omnifunc',
  55. auto_setup = false,
  56. },
  57. });
  58. local nvim_lsp = require('lspconfig')
  59. local null_ls = require('null-ls')
  60. local null_ls_sources = {}
  61. if vim.fn.executable("node_modules/.bin/eslint") == 1 then
  62. table.insert(null_ls_sources, null_ls.builtins.formatting.eslint_d)
  63. table.insert(null_ls_sources, null_ls.builtins.diagnostics.eslint_d)
  64. table.insert(null_ls_sources, null_ls.builtins.code_actions.eslint_d)
  65. end
  66. if vim.fn.executable("gofmt") == 1 then
  67. table.insert(null_ls_sources, null_ls.builtins.formatting.gofmt)
  68. end
  69. if vim.fn.executable("shellcheck") == 1 then
  70. table.insert(null_ls_sources, null_ls.builtins.diagnostics.shellcheck)
  71. table.insert(null_ls_sources, null_ls.builtins.code_actions.shellcheck)
  72. end
  73. if vim.fn.executable("deno") == 1 then
  74. nvim_lsp.denols.setup({
  75. capabilities = require('cmp_nvim_lsp').update_capabilities(vim.lsp.protocol.make_client_capabilities()),
  76. on_attach = on_attach,
  77. });
  78. table.insert(null_ls_sources, null_ls.builtins.formatting.deno_fmt);
  79. end
  80. if vim.fn.executable("node_modules/.bin/tsc") == 1 then
  81. local ts_utils = require("nvim-lsp-ts-utils")
  82. nvim_lsp.tsserver.setup({
  83. init_options = ts_utils.init_options,
  84. flags = {
  85. debounce_text_changes = 150,
  86. },
  87. on_attach = function(client, bufnr)
  88. client.resolved_capabilities.document_formatting = false
  89. client.resolved_capabilities.document_range_formatting = false
  90. on_attach(client, bufnr)
  91. ts_utils.setup({
  92. debug = false,
  93. disable_commands = false,
  94. enable_import_on_completion = true,
  95. -- import all
  96. import_all_timeout = 5000, -- ms
  97. -- lower numbers = higher priority
  98. import_all_priorities = {
  99. same_file = 1, -- add to existing import statement
  100. local_files = 2, -- git files or files with relative path markers
  101. buffer_content = 3, -- loaded buffer content
  102. buffers = 4, -- loaded buffer names
  103. },
  104. import_all_scan_buffers = 100,
  105. import_all_select_source = false,
  106. -- filter diagnostics
  107. filter_out_diagnostics_by_severity = {},
  108. filter_out_diagnostics_by_code = {},
  109. -- inlay hints
  110. auto_inlay_hints = true,
  111. inlay_hints_highlight = "Comment",
  112. -- update imports on file move
  113. update_imports_on_move = false,
  114. require_confirmation_on_move = false,
  115. watch_dir = nil,
  116. })
  117. -- required to fix code action ranges and filter diagnostics
  118. ts_utils.setup_client(client)
  119. end,
  120. })
  121. end
  122. null_ls.setup({
  123. sources = null_ls_sources,
  124. on_attach = function(client, bufnr)
  125. if client.resolved_capabilities.document_formatting then
  126. vim.cmd([[
  127. augroup LspFormatting
  128. autocmd! * <buffer>
  129. autocmd BufWritePre <buffer> lua vim.lsp.buf.formatting_sync()
  130. augroup END
  131. ]])
  132. end
  133. end,
  134. });