aboutsummaryrefslogtreecommitdiff
path: root/lua/user/scripts/lsp-ext.lua
diff options
context:
space:
mode:
authorsrdusr <trevorgray@srdusr.com>2022-10-19 23:55:51 +0200
committersrdusr <trevorgray@srdusr.com>2022-10-19 23:55:51 +0200
commit27a7c25f0727b373b5d0e4693d5bb2cb4c9c3a88 (patch)
treee6a22147b9ff4bf1a4dbe30ae0072a569a6f1e4c /lua/user/scripts/lsp-ext.lua
parent8242c19f6427996a94e6f6079b11ccebdb003cf2 (diff)
downloaddotfiles-27a7c25f0727b373b5d0e4693d5bb2cb4c9c3a88.tar.gz
dotfiles-27a7c25f0727b373b5d0e4693d5bb2cb4c9c3a88.zip
Made Sourcing lua config easier
Diffstat (limited to 'lua/user/scripts/lsp-ext.lua')
-rw-r--r--lua/user/scripts/lsp-ext.lua48
1 files changed, 48 insertions, 0 deletions
diff --git a/lua/user/scripts/lsp-ext.lua b/lua/user/scripts/lsp-ext.lua
new file mode 100644
index 0000000..c4378c6
--- /dev/null
+++ b/lua/user/scripts/lsp-ext.lua
@@ -0,0 +1,48 @@
+--
+-- lsp-ext.lua
+
+
+M = {}
+
+function M.preview_location(location, context, before_context)
+ -- location may be LocationLink or Location (more useful for the former)
+ context = context or 15
+ before_context = before_context or 0
+ local uri = location.targetUri or location.uri
+ if uri == nil then
+ return
+ end
+ local bufnr = vim.uri_to_bufnr(uri)
+ if not vim.api.nvim_buf_is_loaded(bufnr) then
+ vim.fn.bufload(bufnr)
+ end
+ local range = location.targetRange or location.range
+ local contents =
+ vim.api.nvim_buf_get_lines(bufnr, range.start.line - before_context, range["end"].line + 1 + context, false)
+ local filetype = vim.api.nvim_buf_get_option(bufnr, "filetype")
+ return vim.lsp.util.open_floating_preview(contents, filetype)
+end
+
+function M.preview_location_callback(_, method, result)
+ local context = 15
+ if result == nil or vim.tbl_isempty(result) then
+ print("No location found: " .. method)
+ return nil
+ end
+ if vim.tbl_islist(result) then
+ M.floating_buf, M.floating_win = M.preview_location(result[1], context)
+ else
+ M.floating_buf, M.floating_win = M.preview_location(result, context)
+ end
+end
+
+function M.peek_definition()
+ if vim.tbl_contains(vim.api.nvim_list_wins(), M.floating_win) then
+ vim.api.nvim_set_current_win(M.floating_win)
+ else
+ local params = vim.lsp.util.make_position_params()
+ return vim.lsp.buf_request(0, "textDocument/definition", params, M.preview_location_callback)
+ end
+end
+
+return M