7 Commits 2d7f3ad9a7 ... e4f548cb93

Tác giả SHA1 Thông báo Ngày
  Thomas Dy e4f548cb93 nixpkgs/neovim: simplify LSP format autocmd 2 tuần trước cách đây
  Thomas Dy 9efddfcd19 nixpkgs/neovim: have telescope open commits in fugitive 2 tuần trước cách đây
  Thomas Dy 4bd8503437 nixpkgs/neovim: remove redundant mappings 1 tháng trước cách đây
  Thomas Dy 901715fb5c nixpkgs/neovim: update LSP mappings to match defaults 1 tháng trước cách đây
  Thomas Dy 045750d07f nixpkgs/neovim: rename with mini.files instead 1 tháng trước cách đây
  Thomas Dy d9766c68f9 nixpkgs/neovim: enable mini.files 1 tháng trước cách đây
  Thomas Dy e6e82cd9c8 nixpkgs/neovim: update nvim-lspconfig and remove upstreamed code 1 tháng trước cách đây

+ 34 - 6
.config/nixpkgs/neovim/autocmd.lua

@@ -32,6 +32,37 @@ vim.api.nvim_create_autocmd('BufLeave', {
   command = 'stopinsert',
   command = 'stopinsert',
 })
 })
 
 
+-- rename
+vim.api.nvim_create_autocmd('User', {
+  pattern = 'MiniFilesActionRename',
+  callback = function(opts)
+    local params = {
+      files = {{
+        oldUri = vim.uri_from_fname(opts.data.from),
+        newUri = vim.uri_from_fname(opts.data.to),
+      }}
+    }
+    local bufnr = vim.fn.bufadd(opts.data.to)
+
+    local clients = vim.lsp.get_clients({ bufnr = bufnr })
+    for _, client in ipairs(clients) do
+      if client:supports_method('workspace/willRenameFiles') then
+        local resp = client:request_sync('workspace/willRenameFiles', params, 5000, bufnr)
+        if resp and resp.result ~= nil then
+          vim.lsp.util.apply_workspace_edit(resp.result, client.offset_encoding)
+        end
+      end
+    end
+
+    for _, client in ipairs(clients) do
+      if client:supports_method('workspace/didRenameFiles') then
+        client:notify('workspace/didRenameFiles', params)
+      end
+    end
+  end,
+  nested = true,
+})
+
 -- formatting
 -- formatting
 vim.api.nvim_create_autocmd('BufWritePre', {
 vim.api.nvim_create_autocmd('BufWritePre', {
   callback = function(opts)
   callback = function(opts)
@@ -41,12 +72,9 @@ vim.api.nvim_create_autocmd('BufWritePre', {
 
 
     if not vim.g.no_lsp_format then
     if not vim.g.no_lsp_format then
       -- check if can LSP format
       -- check if can LSP format
-      local clients = vim.lsp.get_active_clients({ bufnr = opts.buf })
-      for _, client in ipairs(clients) do
-        if client.supports_method('textDocument/formatting', { bufnr = opts.buf }) then
-          vim.lsp.buf.format({ bufnr = opts.buf })
-          return
-        end
+      local clients = vim.lsp.get_clients({ bufnr = opts.buf, method = 'textDocument/formatting' })
+      if #clients > 0 then
+        vim.lsp.buf.format({ bufnr = opts.buf })
       end
       end
     end
     end
 
 

+ 0 - 64
.config/nixpkgs/neovim/lsp.lua

@@ -43,21 +43,6 @@ else
       ['$/typescriptVersion'] = function(err, result, ctx, config)
       ['$/typescriptVersion'] = function(err, result, ctx, config)
         vim.notify(string.format('Typescript %s', result.version))
         vim.notify(string.format('Typescript %s', result.version))
       end,
       end,
-
-      -- handler used with extract type to interface, etc which asks to rename
-      -- the newly created type
-      ['_typescript.rename'] = function(err, result, ctx)
-        local client = vim.lsp.get_client_by_id(ctx.client_id)
-        vim.lsp.util.show_document({
-          uri = result.textDocument.uri,
-          range = {
-            start = result.position,
-            ['end'] = result.position,
-          }
-        }, client.offset_encoding)
-        vim.lsp.buf.rename()
-        return result
-      end,
     },
     },
     flags = {
     flags = {
       debounce_text_changes = 150,
       debounce_text_changes = 150,
@@ -74,55 +59,6 @@ else
         settings = make_settings(),
         settings = make_settings(),
       })
       })
     end,
     end,
-    on_attach = function(client)
-      -- add custom commands, we follow upstream's Lsp* prefix convention
-
-      -- setup custom source actions, unlike code actions these apply to the
-      -- whole file rather than a particular line.
-      local function source_action(usercmd_name, command_name)
-        vim.api.nvim_buf_create_user_command(0, usercmd_name, function()
-          vim.lsp.buf.code_action({
-            context = { only = { command_name } },
-            apply = true,
-          })
-        end, {})
-      end
-
-      source_action("LspAddMissingImports", "source.addMissingImports.ts")
-      source_action("LspOrganizeImports", "source.organizeImports.ts")
-      source_action("LspRemoveUnusedImports", "source.removeUnusedImports.ts")
-
-      -- rename file with import renaming, this does no error checking
-      vim.api.nvim_buf_create_user_command(0, "LspRenameFile", function()
-        local source = vim.api.nvim_buf_get_name(0)
-
-        local function do_rename(target)
-          if target == nil then
-            return
-          end
-
-          -- rename the buffer
-          vim.lsp.util.rename(source, target)
-
-          -- ask LSP to rename imports
-          client:exec_cmd({
-            command = "_typescript.applyRenameFile",
-            arguments = {
-              {
-                sourceUri = vim.uri_from_fname(source),
-                targetUri = vim.uri_from_fname(target),
-              }
-            }
-          })
-        end
-
-        vim.ui.input({
-          prompt = "New Filename: ",
-          completion = "file",
-          default = source,
-        }, do_rename)
-      end, {})
-    end,
   })
   })
   vim.lsp.enable("ts_ls")
   vim.lsp.enable("ts_ls")
 end
 end

+ 10 - 13
.config/nixpkgs/neovim/mappings.lua

@@ -25,15 +25,14 @@ vim.keymap.set('n', '<Leader>ff', '<cmd>Telescope live_grep<CR>', opts)
 vim.keymap.set('n', '<Leader>fr', '<cmd>Telescope resume<CR>', opts)
 vim.keymap.set('n', '<Leader>fr', '<cmd>Telescope resume<CR>', opts)
 vim.keymap.set('n', '<Leader>fp', '<cmd>Telescope pickers<CR>', opts)
 vim.keymap.set('n', '<Leader>fp', '<cmd>Telescope pickers<CR>', opts)
 
 
+-- directory tree
+vim.keymap.set('n', '<Leader>ft', function() MiniFiles.open(MiniFiles.get_latest_path()) end, opts)
+vim.keymap.set('n', '<Leader>fc', function() MiniFiles.open(vim.api.nvim_buf_get_name(0)) end, opts)
+
 -- jumplist navigation
 -- jumplist navigation
 vim.keymap.set('n', '[f', '<C-O>', opts)
 vim.keymap.set('n', '[f', '<C-O>', opts)
 vim.keymap.set('n', ']f', '<C-I>', opts)
 vim.keymap.set('n', ']f', '<C-I>', opts)
 
 
--- quickfix navigation
-vim.keymap.set('n', '[q', '<cmd>cprevious<CR>', opts)
-vim.keymap.set('n', ']q', '<cmd>cnext<CR>', opts)
-vim.keymap.set('n', '<space>qc', '<cmd>cclose<CR>', opts)
-
 -- conflicts navigation
 -- conflicts navigation
 vim.keymap.set('n', '[x', '?^[<lt>=>]\\{7}<CR>', opts)
 vim.keymap.set('n', '[x', '?^[<lt>=>]\\{7}<CR>', opts)
 vim.keymap.set('n', ']x', '/^[<lt>=>]\\{7}<CR>', opts)
 vim.keymap.set('n', ']x', '/^[<lt>=>]\\{7}<CR>', opts)
@@ -83,6 +82,7 @@ vim.keymap.set('n', ']D', function() vim.diagnostic.jump({ count = 1, float = tr
 vim.keymap.set('n', '<space>qe', function() vim.diagnostic.setqflist({ severity = vim.diagnostic.severity.ERROR }) end, opts)
 vim.keymap.set('n', '<space>qe', function() vim.diagnostic.setqflist({ severity = vim.diagnostic.severity.ERROR }) end, opts)
 vim.keymap.set('n', '<space>qw', function() vim.diagnostic.setqflist({ severity = { min = vim.diagnostic.severity.WARN } }) end, opts)
 vim.keymap.set('n', '<space>qw', function() vim.diagnostic.setqflist({ severity = { min = vim.diagnostic.severity.WARN } }) end, opts)
 vim.keymap.set('n', '<space>qd', function() vim.diagnostic.setqflist({}) end, opts)
 vim.keymap.set('n', '<space>qd', function() vim.diagnostic.setqflist({}) end, opts)
+vim.keymap.set('n', '<space>qc', '<cmd>cclose<CR>', opts)
 
 
 -- LSP-specific
 -- LSP-specific
 vim.api.nvim_create_autocmd('LspAttach', {
 vim.api.nvim_create_autocmd('LspAttach', {
@@ -99,18 +99,15 @@ vim.api.nvim_create_autocmd('LspAttach', {
 
 
     vim.keymap.set('n', 'gD', '<cmd>lua vim.lsp.buf.declaration()<CR>', opts)
     vim.keymap.set('n', 'gD', '<cmd>lua vim.lsp.buf.declaration()<CR>', opts)
     vim.keymap.set('n', 'gd', '<cmd>Telescope lsp_definitions<CR>', opts)
     vim.keymap.set('n', 'gd', '<cmd>Telescope lsp_definitions<CR>', opts)
-    vim.keymap.set('n', 'K', '<cmd>lua vim.lsp.buf.hover()<CR>', opts)
-    vim.keymap.set('n', 'gi', '<cmd>Telescope lsp_implementations<CR>', opts)
-    vim.keymap.set({'n', 'i'}, '<C-k>', '<cmd>lua vim.lsp.buf.signature_help()<CR>', opts)
+    vim.keymap.set('n', 'gri', '<cmd>Telescope lsp_implementations<CR>', opts)
     vim.keymap.set('n', '<space>D', '<cmd>Telescope lsp_type_definitions<CR>', opts)
     vim.keymap.set('n', '<space>D', '<cmd>Telescope lsp_type_definitions<CR>', opts)
-    vim.keymap.set('n', '<space>rn', '<cmd>lua vim.lsp.buf.rename()<CR>', opts)
-    vim.keymap.set({'n', 'v'}, '<space>ca', function() vim.lsp.buf.code_action() end, opts)
-    vim.keymap.set('n', 'gr', '<cmd>Telescope lsp_references<CR>', opts)
-    vim.keymap.set('n', '<Leader>fs', '<cmd>Telescope lsp_document_symbols<CR>', opts)
+    vim.keymap.set('n', 'grr', '<cmd>Telescope lsp_references<CR>', opts)
+    vim.keymap.set('n', 'gO', '<cmd>Telescope lsp_document_symbols<CR>', opts)
 
 
     if client.name == 'ts_ls' then
     if client.name == 'ts_ls' then
       -- exclude import statements from reference search (may have false positives)
       -- 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', 'grr', '<cmd>Telescope lsp_references default_text=!import\\ <CR>', opts)
+      vim.keymap.set('n', 'grA', '<cmd>LspTypescriptSourceAction<CR>', opts)
     end
     end
   end,
   end,
 })
 })

+ 39 - 0
.config/nixpkgs/neovim/plugins.lua

@@ -13,6 +13,24 @@ vim.filetype.add({
 })
 })
 
 
 -- file/buffer/etc picker
 -- file/buffer/etc picker
+local telescope_actions = require('telescope.actions')
+local action_state = require('telescope.actions.state')
+local actions = {}
+
+actions.git_show_commit = function(prompt_bufnr)
+  local selection = action_state.get_selected_entry()
+  local path = vim.fn.FugitiveFind(selection.value)
+  telescope_actions.close(prompt_bufnr)
+  vim.cmd.edit(path)
+end
+
+local commit_mappings = {
+  i = {
+    ['<CR>'] = actions.git_show_commit,
+    ['<C-r>c'] = telescope_actions.git_checkout,
+  }
+}
+
 require('telescope').setup({
 require('telescope').setup({
   defaults = {
   defaults = {
     mappings = {
     mappings = {
@@ -81,6 +99,12 @@ require('telescope').setup({
     find_files = {
     find_files = {
       find_command = { "fd", "--type", "f", "--strip-cwd-prefix" }
       find_command = { "fd", "--type", "f", "--strip-cwd-prefix" }
     },
     },
+    git_commits = {
+      mappings = commit_mappings,
+    },
+    git_bcommits = {
+      mappings = commit_mappings,
+    },
   },
   },
 })
 })
 
 
@@ -94,6 +118,13 @@ local telescope_previewers = require('telescope.previewers')
 local telescope_putils = require('telescope.previewers.utils')
 local telescope_putils = require('telescope.previewers.utils')
 local telescope_conf = require('telescope.config').values
 local telescope_conf = require('telescope.config').values
 
 
+-- arbitrary git log picker
+vim.api.nvim_create_user_command('GLg', function(opts)
+  local git_command = { "git", "log", "--pretty=oneline", "--abbrev-commit" }
+  vim.list_extend(git_command, opts.fargs)
+  telescope_builtin.git_commits({ git_command = git_command })
+end, { nargs = '*', complete = vim.fn['fugitive#LogComplete'] })
+
 -- custom picker to fallback to files if no git
 -- custom picker to fallback to files if no git
 _G.project_files = function()
 _G.project_files = function()
   local ok = pcall(telescope_builtin.git_files, { show_untracked = true })
   local ok = pcall(telescope_builtin.git_files, { show_untracked = true })
@@ -233,6 +264,14 @@ require('mini.pairs').setup({
 require('mini.notify').setup()
 require('mini.notify').setup()
 vim.notify = require('mini.notify').make_notify()
 vim.notify = require('mini.notify').make_notify()
 
 
+-- file explorer
+require('mini.files').setup({
+  content = {
+    -- remove icons
+    prefix = function() end,
+  }
+})
+
 -- rest client
 -- rest client
 require('rest-nvim').setup({})
 require('rest-nvim').setup({})
 
 

+ 2 - 2
.config/nixpkgs/neovim/plugins/sources.json

@@ -44,8 +44,8 @@
     "sha256": "01h4lx190vd25vnr1zmmzsi195v45f83dvsisgrqvbqgrbdkhr7d"
     "sha256": "01h4lx190vd25vnr1zmmzsi195v45f83dvsisgrqvbqgrbdkhr7d"
   },
   },
   "neovim/nvim-lspconfig": {
   "neovim/nvim-lspconfig": {
-    "rev": "5dae152ee422ed9383217965aff92b331c4c248e",
-    "sha256": "055fc8xpzjvrz9zmzqlnl6wb3cqdqh34ljg6rngxzb3g3fljdpfr"
+    "rev": "c48fac0936f24a5a2dbea9c8379ec9414a45eb8b",
+    "sha256": "1csggqvgn9pr71jmpndfcv3qglgvzwsngs40j1yq4201x38v7z1g"
   },
   },
   "nvim-treesitter/nvim-treesitter-textobjects": {
   "nvim-treesitter/nvim-treesitter-textobjects": {
     "rev": "205e3369bc83d8cb83f7409c36120e24611f8c5c",
     "rev": "205e3369bc83d8cb83f7409c36120e24611f8c5c",