init.lua 6.8 KB

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