neovim

Personal neovim configuration files
git clone git://gtms.dev/neovim
Log | Files | Refs

rename_file.lua (1279B)


      1 local M = {}
      2 
      3 local function make_rename_files_params(old_fname, new_fname)
      4   return {
      5     files = --
      6     { --
      7       { --
      8         oldUri = vim.uri_from_fname(old_fname),
      9         newUri = vim.uri_from_fname(new_fname),
     10       },
     11     },
     12   }
     13 end
     14 
     15 function M.rename_file()
     16   local old_fname = vim.api.nvim_buf_get_name(0)
     17 
     18   vim.ui.input({ --
     19     prompt = 'filename',
     20     default = old_fname,
     21     completion = 'file',
     22   }, function(new_fname)
     23     if not new_fname then
     24       return
     25     end
     26 
     27     local alreadyRenamed = false
     28     for _, client in pairs(vim.lsp.get_clients()) do
     29       if vim.tbl_get(client.server_capabilities, 'workspace', 'fileOperations', 'willRename') then
     30         local params = make_rename_files_params(old_fname, new_fname)
     31         local response = client.request_sync('workspace/willRenameFiles', params, nil, 0)
     32         local result = response.result
     33         if result then
     34           for _, change in ipairs(result.documentChanges) do
     35             if change.kind == 'rename' then
     36               alreadyRenamed = true
     37             end
     38           end
     39           vim.lsp.util.apply_workspace_edit(result, client.offset_encoding)
     40         end
     41       end
     42     end
     43 
     44     if not alreadyRenamed then
     45       vim.lsp.util.rename(old_fname, new_fname)
     46     end
     47   end)
     48 end
     49 
     50 return M