Skip to content

Commit

Permalink
Secondary support LspUI command (#36)
Browse files Browse the repository at this point in the history
* add a function to get var

* add function `is_secondary_buffer`

* little change

* basically available
  • Loading branch information
jinzhongjia authored Dec 12, 2023
1 parent e157a04 commit bd2251d
Show file tree
Hide file tree
Showing 7 changed files with 277 additions and 55 deletions.
58 changes: 48 additions & 10 deletions lua/LspUI/declaration/init.lua
Original file line number Diff line number Diff line change
Expand Up @@ -47,21 +47,59 @@ M.run = function()
-- get current buffer
local current_buffer = api.nvim_get_current_buf()

local clients = util.get_clients(current_buffer)
if clients == nil then
lib_notify.Warn("no client supports declaration!")
return
local clients

local window = nil
local params

if pos_abstract.is_secondary_buffer(current_buffer) then
if
pos_abstract.get_current_method().name
== pos_abstract.method.declaration.name
then
return
end
local current_item = pos_abstract.get_current_item()

current_buffer = vim.uri_to_bufnr(current_item.uri)

clients = util.get_clients(current_buffer)

if clients == nil then
lib_notify.Warn("no client supports declaration!")
return
end

if current_item.range then
--- @type lsp.TextDocumentPositionParams
params = {
textDocument = {
uri = current_item.uri,
},
position = {
line = current_item.range.start.line,
character = current_item.range.start.character,
},
}
else
return
end
else
clients = util.get_clients(current_buffer)

if clients == nil then
lib_notify.Warn("no client supports declaration!")
return
end

window = api.nvim_get_current_win()
params = util.make_params(window)
end

-- get current window
local current_window = api.nvim_get_current_win()

local params = util.make_params(current_window)

pos_abstract.go(
pos_abstract.method.declaration,
current_buffer,
current_window,
window,
clients,
params
)
Expand Down
58 changes: 48 additions & 10 deletions lua/LspUI/definition/init.lua
Original file line number Diff line number Diff line change
Expand Up @@ -47,21 +47,59 @@ M.run = function()
-- get current buffer
local current_buffer = api.nvim_get_current_buf()

local clients = util.get_clients(current_buffer)
if clients == nil then
lib_notify.Warn("no client supports definition!")
return
local clients

local window = nil
local params

if pos_abstract.is_secondary_buffer(current_buffer) then
if
pos_abstract.get_current_method().name
== pos_abstract.method.definition.name
then
return
end
local current_item = pos_abstract.get_current_item()

current_buffer = vim.uri_to_bufnr(current_item.uri)

clients = util.get_clients(current_buffer)

if clients == nil then
lib_notify.Warn("no client supports definition!")
return
end

if current_item.range then
--- @type lsp.TextDocumentPositionParams
params = {
textDocument = {
uri = current_item.uri,
},
position = {
line = current_item.range.start.line,
character = current_item.range.start.character,
},
}
else
return
end
else
clients = util.get_clients(current_buffer)

if clients == nil then
lib_notify.Warn("no client supports definition!")
return
end

window = api.nvim_get_current_win()
params = util.make_params(window)
end

-- get current window
local current_window = api.nvim_get_current_win()

local params = util.make_params(current_window)

pos_abstract.go(
pos_abstract.method.definition,
current_buffer,
current_window,
window,
clients,
params
)
Expand Down
59 changes: 48 additions & 11 deletions lua/LspUI/implementation/init.lua
Original file line number Diff line number Diff line change
Expand Up @@ -46,22 +46,59 @@ M.run = function()
end
-- get current buffer
local current_buffer = api.nvim_get_current_buf()

local clients = util.get_clients(current_buffer)
if clients == nil then
lib_notify.Warn("no client supports implementation!")
return
local clients

local window = nil
local params

if pos_abstract.is_secondary_buffer(current_buffer) then
if
pos_abstract.get_current_method().name
== pos_abstract.method.implementation.name
then
return
end
local current_item = pos_abstract.get_current_item()

current_buffer = vim.uri_to_bufnr(current_item.uri)

clients = util.get_clients(current_buffer)

if clients == nil then
lib_notify.Warn("no client supports implementation!")
return
end

if current_item.range then
--- @type lsp.TextDocumentPositionParams
params = {
textDocument = {
uri = current_item.uri,
},
position = {
line = current_item.range.start.line,
character = current_item.range.start.character,
},
}
else
return
end
else
clients = util.get_clients(current_buffer)

if clients == nil then
lib_notify.Warn("no client supports implementation!")
return
end

window = api.nvim_get_current_win()
params = util.make_params(window)
end

-- get current window
local current_window = api.nvim_get_current_win()

local params = util.make_params(current_window)

pos_abstract.go(
pos_abstract.method.implementation,
current_buffer,
current_window,
window,
clients,
params
)
Expand Down
10 changes: 10 additions & 0 deletions lua/LspUI/lib/util.lua
Original file line number Diff line number Diff line change
Expand Up @@ -197,4 +197,14 @@ M.create_push_tagstack = function(window_id)
end
end

--- @param buffer_id integer
---@param key string
M.get_buf_var = function(buffer_id, key)
local status, result = pcall(api.nvim_buf_get_var, buffer_id, key)
if status then
return result
end
return nil
end

return M
27 changes: 24 additions & 3 deletions lua/LspUI/pos_abstract.lua
Original file line number Diff line number Diff line change
Expand Up @@ -833,7 +833,6 @@ M.secondary_view_render = function()
lib_windows.set_border_window(second_window_wrap, "single")
lib_windows.set_zindex_window(second_window_wrap, 11)
lib_windows.set_anchor_window(second_window_wrap, "NW")
lib_windows.set_center_title_window(second_window_wrap, method.name)

M.secondary_view_window(lib_windows.display_window(second_window_wrap))
end
Expand All @@ -843,6 +842,12 @@ M.secondary_view_render = function()
win = M.secondary_view_window(),
})
end)

api.nvim_win_set_config(M.secondary_view_window(), {
title_pos = "center",
title = method.name,
})

M.secondary_view_hide(false)

secondary_view_autocmd()
Expand Down Expand Up @@ -1078,8 +1083,21 @@ local find_position_from_params = function(params)
return 2
end

--- @param buffer_id integer
M.is_secondary_buffer = function(buffer_id)
return M.secondary_view_buffer() == buffer_id
end

M.get_current_item = function()
return current_item
end

M.get_current_method = function()
return method
end

--- @param buffer_id integer which buffer do method
--- @param window_id integer which window do method
--- @param window_id integer? which window do method
--- @param clients lsp.Client[]
--- @param params table
--- @param new_method { method: string, name: string, fold: boolean }
Expand All @@ -1095,7 +1113,9 @@ M.go = function(new_method, buffer_id, window_id, clients, params)

M.datas(data)

push_tagstack = lib_util.create_push_tagstack(window_id)
if window_id then
push_tagstack = lib_util.create_push_tagstack(window_id)
end

M.secondary_view_render()

Expand All @@ -1109,6 +1129,7 @@ M.go = function(new_method, buffer_id, window_id, clients, params)
end)
end

-- autochange secondary window
api.nvim_create_autocmd("VimResized", {
callback = function()
if not api.nvim_win_is_valid(M.secondary_view_window()) then
Expand Down
62 changes: 51 additions & 11 deletions lua/LspUI/reference/init.lua
Original file line number Diff line number Diff line change
Expand Up @@ -46,22 +46,62 @@ M.run = function()
end
-- get current buffer
local current_buffer = api.nvim_get_current_buf()

local clients = util.get_clients(current_buffer)
if clients == nil then
lib_notify.Warn("no client supports reference!")
return
local clients

local window = nil
local params

if pos_abstract.is_secondary_buffer(current_buffer) then
if
pos_abstract.get_current_method().name
== pos_abstract.method.reference.name
then
return
end
local current_item = pos_abstract.get_current_item()

current_buffer = vim.uri_to_bufnr(current_item.uri)

clients = util.get_clients(current_buffer)

if clients == nil then
lib_notify.Warn("no client supports reference!")
return
end

if current_item.range then
--- @type lsp.TextDocumentPositionParams
params = {
textDocument = {
uri = current_item.uri,
},
position = {
line = current_item.range.start.line,
character = current_item.range.start.character,
},
context = {
includeDeclaration = true,
},
}
else
return
end
else
clients = util.get_clients(current_buffer)

if clients == nil then
lib_notify.Warn("no client supports reference!")
return
end

window = api.nvim_get_current_win()
params = util.make_params(window)
end

-- get current window
local current_window = api.nvim_get_current_win()

local params = util.make_params(current_window)

pos_abstract.go(
pos_abstract.method.reference,
current_buffer,
current_window,
window,
clients,
params
)
Expand Down
Loading

0 comments on commit bd2251d

Please sign in to comment.