diff options
| author | Florian Fischer <florian.fischer@muhq.space> | 2024-04-12 11:10:17 +0200 |
|---|---|---|
| committer | Florian Fischer <florian.fischer@muhq.space> | 2024-04-15 18:04:10 +0200 |
| commit | 0e71c4a1e7aabcad269ffb1cdd3f53da6ef31df4 (patch) | |
| tree | 7dae080636002f1469444b606c8ffa1f06e3fc30 /init.lua | |
| parent | efaf185f4368aeb04de0b851f76b5bad020804e7 (diff) | |
| download | vis-lspc-0e71c4a1e7aabcad269ffb1cdd3f53da6ef31df4.tar.gz vis-lspc-0e71c4a1e7aabcad269ffb1cdd3f53da6ef31df4.zip | |
make the way messages are presented configurable
The two options are either using vis:message (the default) which will
keep all messages in the vis message buffer and include a header line to
distinguish the different messages.
The second option is using open and presenting messages in a separate
window supporting syntax highlighting.
Diffstat (limited to 'init.lua')
| -rw-r--r-- | init.lua | 63 |
1 files changed, 35 insertions, 28 deletions
@@ -501,11 +501,21 @@ local function vis_apply_textEdits(win, file, textEdits) win:draw() end -local function _show_message(msg) - vis:command("open") +local function lspc_show_message(msg, hdr, syntax) + if lspc.show_message == 'message' then + vis:message((hdr or '') .. msg) + + elseif lspc.show_message == 'open' then + vis:command('open') + if syntax then + vis:command('set syntax ' .. syntax) + end - vis.win.file:insert(0, msg) - vis.win.selection.pos = 0 + vis.win.file:insert(0, msg) + vis.win.selection.pos = 0 + else + lspc_err('invalid message configuration "' .. lspc.show_message .. '".') + end end -- apply a WorkspaceEdit received from the language server @@ -534,7 +544,7 @@ local function vis_apply_workspaceEdit(_, _, workspaceEdit) end end - _show_message(summary) + lspc_show_message(summary) vis:redraw() -- get user confirmation @@ -829,14 +839,6 @@ local function lspc_handle_completion_method_response(win, result, old_pos) lspc_err('Unsupported completion') end -local function _show_markdown_message(msg) - vis:command("open") - vis:command("set syntax markdown") - - vis.win.file:insert(0, msg) - vis.win.selection.pos = 0 -end - local function lspc_handle_hover_method_response(win, result, old_pos) if not result or not result.contents then lspc_warn('no hover available') @@ -845,27 +847,30 @@ local function lspc_handle_hover_method_response(win, result, old_pos) local sel = vis_pos_to_sel(win, old_pos) + local hover_header = + '--- hover: ' .. (win.file.path or '') .. ': ' .. sel.line .. ', ' .. sel.col .. ' ---\n' + local hover_msg = '' + -- The most common markup kind in LSP is markdown + local markup_kind = 'markdown' + -- result is MarkedString[] if type(result.contents) == 'table' and #result.contents > 0 then lspc.log('hover returned list of length ' .. #result.contents) - local hover_header = '--- hover: ' .. (win.file.path or '') .. ': ' .. sel.line .. ', ' .. sel.col .. ' ---' - local hover_msg = '' - - for i, v in ipairs(result.contents) do + for i, marked_string in ipairs(result.contents) do if i == 1 then - hover_msg = v.value or v + hover_msg = marked_string.value or marked_string else - hover_msg = hover_msg .. '\n---\n' .. (v.value or v) + hover_msg = hover_msg .. '\n---\n' .. (marked_string.value or marked_string) end end - - _show_message(hover_header .. '\n' .. hover_msg) - -- result is either MarkedString or MarkupContent - else - _show_markdown_message(result.contents.value or result.contents) + else -- result is either MarkedString or MarkupContent + hover_msg = result.contents.value or result.contents + if result.contents.kind and result.contents.kind == 'plaintext' then + markup_kind = 'text' + end end - + lspc_show_message(hover_msg, hover_header, markup_kind) end local function lspc_handle_signature_help_method_response(win, result, call_pos) @@ -878,7 +883,7 @@ local function lspc_handle_signature_help_method_response(win, result, call_pos) local sel = vis_pos_to_sel(win, call_pos) local help_header = '--- signature help: ' .. (win.file.path or '') .. ': ' .. sel.line .. ', ' .. - sel.col .. ' ---' + sel.col .. ' ---\n' -- local help_msg = json.encode(result) local help_msg = '' @@ -890,7 +895,9 @@ local function lspc_handle_signature_help_method_response(win, result, call_pos) end help_msg = help_msg .. '\n' .. sig_msg end - _show_message(help_header .. help_msg) + -- strip first new line from the message + help_msg = help_msg:sub(2) + lspc_show_message(help_msg, help_header) end local function lspc_handle_rename_method_response(win, result) @@ -1398,7 +1405,7 @@ local function lspc_show_diagnostic(ls, win, line) end if diagnostics_msg ~= '' then - _show_message(diagnostics_msg) + lspc_show_message(diagnostics_msg) else lspc_warn('No diagnostics available for line: ' .. line) end |
