diff options
author | Christian Chiarulli <[email protected]> | 2021-07-13 21:13:55 -0400 |
---|---|---|
committer | GitHub <[email protected]> | 2021-07-13 21:13:55 -0400 |
commit | a097fa4c04e6db34bb409e0dea302c20629da8ec (patch) | |
tree | fb1c5bdd14cac82a363ea6c25b03a475050305f2 /lua/lsp/init.lua | |
parent | 04f9f53914a7dd999117ed73c5fa0ab3b0dc95e4 (diff) |
LunarVim 0.4.8 (#919)0.4.8
Diffstat (limited to 'lua/lsp/init.lua')
-rw-r--r-- | lua/lsp/init.lua | 72 |
1 files changed, 69 insertions, 3 deletions
diff --git a/lua/lsp/init.lua b/lua/lsp/init.lua index 096ceabf..01f82737 100644 --- a/lua/lsp/init.lua +++ b/lua/lsp/init.lua @@ -1,4 +1,4 @@ --- TODO figure out why this don't work +-- TODO: figure out why this don't work vim.fn.sign_define( "LspDiagnosticsSignError", { texthl = "LspDiagnosticsSignError", text = "ï™™", numhl = "LspDiagnosticsSignError" } @@ -20,6 +20,7 @@ vim.cmd "nnoremap <silent> gd <cmd>lua vim.lsp.buf.definition()<CR>" vim.cmd "nnoremap <silent> gD <cmd>lua vim.lsp.buf.declaration()<CR>" vim.cmd "nnoremap <silent> gr <cmd>lua vim.lsp.buf.references()<CR>" vim.cmd "nnoremap <silent> gi <cmd>lua vim.lsp.buf.implementation()<CR>" +vim.cmd "nnoremap <silent> gp <cmd>lua require'lsp'.PeekDefinition()<CR>" vim.cmd "nnoremap <silent> K :lua vim.lsp.buf.hover()<CR>" -- vim.cmd('nnoremap <silent> <C-k> <cmd>lua vim.lsp.buf.signature_help()<CR>') vim.cmd "nnoremap <silent> <C-p> :lua vim.lsp.diagnostic.goto_prev({popup_opts = {border = O.lsp.popup_border}})<CR>" @@ -103,7 +104,72 @@ local function documentHighlight(client, bufnr) end local lsp_config = {} -if O.document_highlight then +-- Taken from https://www.reddit.com/r/neovim/comments/gyb077/nvimlsp_peek_defination_javascript_ttserver/ +function lsp_config.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, { border = O.lsp.popup_border }) +end + +function lsp_config.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 + lsp_config.floating_buf, lsp_config.floating_win = lsp_config.preview_location(result[1], context) + else + lsp_config.floating_buf, lsp_config.floating_win = lsp_config.preview_location(result, context) + end +end + +function lsp_config.PeekDefinition() + if vim.tbl_contains(vim.api.nvim_list_wins(), lsp_config.floating_win) then + vim.api.nvim_set_current_win(lsp_config.floating_win) + else + local params = vim.lsp.util.make_position_params() + return vim.lsp.buf_request(0, "textDocument/definition", params, lsp_config.preview_location_callback) + end +end + +function lsp_config.PeekTypeDefinition() + if vim.tbl_contains(vim.api.nvim_list_wins(), lsp_config.floating_win) then + vim.api.nvim_set_current_win(lsp_config.floating_win) + else + local params = vim.lsp.util.make_position_params() + return vim.lsp.buf_request(0, "textDocument/typeDefinition", params, lsp_config.preview_location_callback) + end +end + +function lsp_config.PeekImplementation() + if vim.tbl_contains(vim.api.nvim_list_wins(), lsp_config.floating_win) then + vim.api.nvim_set_current_win(lsp_config.floating_win) + else + local params = vim.lsp.util.make_position_params() + return vim.lsp.buf_request(0, "textDocument/implementation", params, lsp_config.preview_location_callback) + end +end + +if O.lsp.document_highlight then function lsp_config.common_on_attach(client, bufnr) documentHighlight(client, bufnr) end @@ -131,7 +197,7 @@ function lsp_config.tsserver_on_attach(client, bufnr) -- formatting enable_formatting = O.lang.tsserver.autoformat, - formatter = O.lang.tsserver.formatter, + formatter = O.lang.tsserver.formatter.exe, formatter_config_fallback = nil, -- parentheses completion |