aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFlorian Fischer <florian.fischer@muhq.space>2025-07-12 21:00:14 -0400
committerFlorian Fischer <florian.fischer@muhq.space>2025-07-12 21:00:14 -0400
commit6a4755ec3ee4c8214d76bf8b0461534490df47dd (patch)
tree681d3e2557544e7008dba8644a98f0f37a1f2b37
parent05f2d8e253c3523e63ea08018f8bb9d23f6659b5 (diff)
downloadvis-lspc-6a4755ec3ee4c8214d76bf8b0461534490df47dd.tar.gz
vis-lspc-6a4755ec3ee4c8214d76bf8b0461534490df47dd.zip
add autoconfirm_edits configuration option
Some language servers replace the whole file content on an edit, thus producing potentially really big diffs not suitable for review and user confirmation. So some users may just accept the changes proposed from the language server.
-rw-r--r--README.md1
-rw-r--r--init.lua34
-rw-r--r--lspc.lua2
3 files changed, 21 insertions, 16 deletions
diff --git a/README.md b/README.md
index 6825aef..8475982 100644
--- a/README.md
+++ b/README.md
@@ -120,6 +120,7 @@ Available options are:
* `autostart = true` - try to start a language server in WIN_OPEN
* `menu_cmd = 'fzf' or 'vis-menu'` - program to prompt for user choices
* `confirm_cmd = 'vis-menu'` - program to prompt for user confirmation
+* `autoconfirm_edits = false` - apply workspaceEdits without user confirmation
* `ls_map` - a table mapping `vis` syntax names to language server configurations
* `highlight_diagnostics = 'line'` - highlight the `range` or `line`number of available diagnostics
* `diagnostic_style_id = nil` - vis style id used to highlight diagnostics, win.STYLE_LEXER_MAX is used by default
diff --git a/init.lua b/init.lua
index 469736b..29a4ed2 100644
--- a/init.lua
+++ b/init.lua
@@ -487,27 +487,29 @@ local function vis_apply_workspaceEdit(_, _, workspaceEdit)
end
end
- -- generate change summary
- local summary = '--- workspace edit summary ---\n'
- for uri, edits in pairs(file_edits) do
- local path = uri_to_path(uri)
- summary = summary .. path .. ':\n'
- for i, edit in ipairs(edits) do
- summary = summary .. '\t' .. i .. '.: ' .. lspc.json.encode(edit) .. '\n'
+ if not lspc.autoconfirm_edits then
+ -- generate change summary
+ local summary = '--- workspace edit summary ---\n'
+ for uri, edits in pairs(file_edits) do
+ local path = uri_to_path(uri)
+ summary = summary .. path .. ':\n'
+ for i, edit in ipairs(edits) do
+ summary = summary .. '\t' .. i .. '.: ' .. lspc.json.encode(edit) .. '\n'
+ end
end
- end
- lspc_show_message(summary)
- vis:redraw()
+ lspc_show_message(summary)
+ vis:redraw()
- -- get user confirmation
- local confirmation = lspc_confirm('apply changes:')
+ -- get user confirmation
+ local confirmation = lspc_confirm('apply changes:')
- -- close summary window
- lspc_close_message_win()
+ -- close summary window
+ lspc_close_message_win()
- if not confirmation then
- return
+ if not confirmation then
+ return
+ end
end
-- apply changes to open files
diff --git a/lspc.lua b/lspc.lua
index d8348a4..f34ba4d 100644
--- a/lspc.lua
+++ b/lspc.lua
@@ -23,6 +23,8 @@ local lspc = {
menu_cmd = 'vis-menu -l 10',
-- program used to ask the user for confirmation
confirm_cmd = 'vis-menu',
+ -- apply workspaceEdits without confirmation
+ autoconfirm_edits = false,
-- should diagnostics be highlighted if available
highlight_diagnostics = 'line',