diff options
Diffstat (limited to 'runtime/lua/vim/lsp/buf.lua')
| -rw-r--r-- | runtime/lua/vim/lsp/buf.lua | 32 | 
1 files changed, 32 insertions, 0 deletions
diff --git a/runtime/lua/vim/lsp/buf.lua b/runtime/lua/vim/lsp/buf.lua index 839e00c67d..476bb3ba6f 100644 --- a/runtime/lua/vim/lsp/buf.lua +++ b/runtime/lua/vim/lsp/buf.lua @@ -143,6 +143,38 @@ function M.document_symbol()    request('textDocument/documentSymbol', params)  end +local function pick_call_hierarchy_item(call_hierarchy_items) +  if not call_hierarchy_items then return end +  if #call_hierarchy_items == 1 then +    return call_hierarchy_items[1] +  end +  local items = {} +  for i, item in ipairs(call_hierarchy_items) do +    local entry = item.detail or item.name +    table.insert(items, string.format("%d. %s", i, entry)) +  end +  local choice = vim.fn.inputlist(items) +  if choice < 1 or choice > #items then +    return +  end +  return choice +end + +function M.incoming_calls() +  local params = util.make_position_params() +  request('textDocument/prepareCallHierarchy', params, function(_, _, result) +    local call_hierarchy_item = pick_call_hierarchy_item(result) +    vim.lsp.buf_request(0, 'callHierarchy/incomingCalls', { item = call_hierarchy_item }) +  end) +end + +function M.outgoing_calls() +  local params = util.make_position_params() +  request('textDocument/prepareCallHierarchy', params, function(_, _, result) +    local call_hierarchy_item = pick_call_hierarchy_item(result) +    vim.lsp.buf_request(0, 'callHierarchy/outgoingCalls', { item = call_hierarchy_item }) +  end) +end  --- Lists all symbols in the current workspace in the quickfix window.  ---  | 
