diff options
author | Mathias Fussenegger <f.mathias@zignar.net> | 2021-03-18 11:07:06 +0100 |
---|---|---|
committer | Mathias Fussenegger <f.mathias@zignar.net> | 2021-03-18 19:53:42 +0100 |
commit | 191afb42be90c3f39f445c8340632e732e6710f8 (patch) | |
tree | 07c72f708c883b6d7c4737d8c661e449dc033d06 /runtime/lua/vim | |
parent | 5e401b693b929da36d08943d4fda0191fe12f02c (diff) | |
download | rneovim-191afb42be90c3f39f445c8340632e732e6710f8.tar.gz rneovim-191afb42be90c3f39f445c8340632e732e6710f8.tar.bz2 rneovim-191afb42be90c3f39f445c8340632e732e6710f8.zip |
lsp: Add support for create workspaceEdit resource operation
Diffstat (limited to 'runtime/lua/vim')
-rw-r--r-- | runtime/lua/vim/lsp/protocol.lua | 2 | ||||
-rw-r--r-- | runtime/lua/vim/lsp/util.lua | 16 |
2 files changed, 16 insertions, 2 deletions
diff --git a/runtime/lua/vim/lsp/protocol.lua b/runtime/lua/vim/lsp/protocol.lua index 187aad7684..085ca7b4a1 100644 --- a/runtime/lua/vim/lsp/protocol.lua +++ b/runtime/lua/vim/lsp/protocol.lua @@ -750,7 +750,7 @@ function protocol.make_client_capabilities() workspaceFolders = true; applyEdit = true; workspaceEdit = { - resourceOperations = {'rename',}, + resourceOperations = {'rename', 'create',}, }; }; callHierarchy = { diff --git a/runtime/lua/vim/lsp/util.lua b/runtime/lua/vim/lsp/util.lua index 601a6ae8ca..82fd77ea90 100644 --- a/runtime/lua/vim/lsp/util.lua +++ b/runtime/lua/vim/lsp/util.lua @@ -635,6 +635,18 @@ function M.rename(old_fname, new_fname, opts) end +local function create_file(change) + local opts = change.options or {} + -- from spec: Overwrite wins over `ignoreIfExists` + local fname = vim.uri_to_fname(change.uri) + if not opts.ignoreIfExists or opts.overwrite then + local file = io.open(fname, 'w') + file:close() + end + vim.fn.bufadd(fname) +end + + --- Applies a `WorkspaceEdit`. --- --@param workspace_edit (table) `WorkspaceEdit` @@ -648,8 +660,10 @@ function M.apply_workspace_edit(workspace_edit) vim.uri_to_fname(change.newUri), change.options ) + elseif change.kind == 'create' then + create_file(change) elseif change.kind then - -- TODO(ashkan) handle CreateFile/DeleteFile + -- TODO(ashkan) handle DeleteFile error(string.format("Unsupported change: %q", vim.inspect(change))) else M.apply_text_document_edit(change, idx) |