Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[feature] lsp signature help supports #40

Merged
merged 6 commits into from
Feb 1, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions TODO.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
- lsp request err not handle
14 changes: 11 additions & 3 deletions lua/LspUI/_meta.lua
Original file line number Diff line number Diff line change
Expand Up @@ -43,9 +43,9 @@
--
-- this is just some config for definition, type definition, declaration, reference, implementation
--- @class LspUI_pos_config
--- @field secondary_keybind { jump: string?, jump_tab: string?, jump_split: string?, jump_vsplit: string?, quit:string?, hide_main:string?, fold_all:string?, expand_all:string?, enter: string? }?
--- @field main_keybind { back: string?, hide_secondary: string? }?
--- @field transparency number
--- @field secondary_keybind { jump: string?, jump_tab: string?, jump_split: string?, jump_vsplit: string?, quit:string?, hide_main:string?, fold_all:string?, expand_all:string?, enter: string? }? secondary view keybind
--- @field main_keybind { back: string?, hide_secondary: string? }? main view keybind
--- @field transparency number? transparency for pos_config

--- @class LspUI_definition_config
--- @field enable boolean? whether enable `definition` module
Expand All @@ -71,6 +71,13 @@
--- @field enable boolean? whether enable `call_hierarchy` module
--- @field command_enable boolean? whether enable command for `call_hierarchy`

--- @class LspUI_signature
--- @field enable boolean? whether enable `signature` module
--- @field command_enable boolean? whether enable command for `signature`
--- @field icon string? the icon for float signature
--- @field color {fg: string?, bg: string?}? the color for signature
--- @field debounce (integer|boolean)? whether enable debounce for signature ? defalt is 250 milliseconds, this will reduce calculations when you move the cursor frequently, but it will cause the delay of signature, false will diable it

--- @class LspUI_config config for LspUI
--- @field rename LspUI_rename_config? `rename` module
--- @field lightbulb LspUI_lightbulb_config? `lightbulb` module
Expand All @@ -86,3 +93,4 @@
--- @field pos_keybind LspUI_pos_keybind_config? keybind for `definition`, `type definition`, `declaration`, `reference`, implementation
--- @field pos_config LspUI_pos_config? keybind for `definition`, `type definition`, `declaration`, `reference`, implementation
--- @field call_hierarchy LspUI_call_hierarchy_config? `call_hierarchy` module
--- @field signature LspUI_signature? `signature` module
3 changes: 2 additions & 1 deletion lua/LspUI/api.lua
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ M.api = {
implementation = modules.implementation.run,
inlay_hint = modules.inlay_hint.run,
call_hierarchy = modules.call_hierarchy.run,
signature = modules.signature.status_line,
}

return M
return M.api
33 changes: 33 additions & 0 deletions lua/LspUI/config.lua
Original file line number Diff line number Diff line change
Expand Up @@ -139,12 +139,26 @@ local default_pos_config = {
transparency = default_transparency,
}

-- TODO: now, this is not avaiable
--
--- @type LspUI_call_hierarchy_config
local default_call_hierarchy_config = {
enable = true,
command_enable = true,
}

--- @type LspUI_signature
local default_signature_config = {
enable = false,
command_enable = true,
icon = "✨",
color = {
fg = "#FF8C00",
bg = nil,
},
debounce = 300,
}

-- default config
--- @type LspUI_config
local default_config = {
Expand All @@ -161,6 +175,7 @@ local default_config = {
reference = default_reference_config,
pos_keybind = default_pos_keybind_config,
call_hierarchy = default_call_hierarchy_config,
signature = default_signature_config,
}

-- Prevent plugins from being initialized multiple times
Expand Down Expand Up @@ -396,6 +411,24 @@ M.inlay_hint_setup = function(inlay_hint_config)
end
end

-- separate function for `signature` module
--- @param signature_config LspUI_signature
M.signature_setup = function(signature_config)
M.options.signature = vim.tbl_deep_extend(
"force",
M.options.signature or default_signature_config,
signature_config
)

local signature = require("LspUI.signature")

if signature_config.enable then
signature.init()
else
signature.deinit()
end
end

-- TODO:add separate setup function for call_hierarchy

return M
10 changes: 5 additions & 5 deletions lua/LspUI/diagnostic/util.lua
Original file line number Diff line number Diff line change
Expand Up @@ -38,13 +38,13 @@ local diagnostic_severity_to_hightlight = function(severity)
return arr[severity] or nil
end

--- @param diagnostics Diagnostic[]
--- @return Diagnostic[][][]
--- @param diagnostics vim.Diagnostic[]
--- @return vim.Diagnostic[][][]
local sort_diagnostics = function(diagnostics)
local sorted_diagnostics = {}

for _, diagnostic in pairs(diagnostics) do
--- @type Diagnostic[][]?
--- @type vim.Diagnostic[][]?
local lnum_diagnostics = sorted_diagnostics[diagnostic.lnum]
if lnum_diagnostics == nil then
lnum_diagnostics = {}
Expand All @@ -64,12 +64,12 @@ local sort_diagnostics = function(diagnostics)
end

-- get next position diagnostics
--- @param sorted_diagnostics Diagnostic[][][]
--- @param sorted_diagnostics vim.Diagnostic[][][]
--- @param row integer (row,col) is a tuple, get from `nvim_win_get_cursor`, 1 based
--- @param col integer (row,col) is a tuple, get from `nvim_win_get_cursor`, 0 based
--- @param search_forward boolean true is down, false is up
--- @param buffer_id integer
--- @return Diagnostic[]?
--- @return vim.Diagnostic[]?
local next_position_diagnostics = function(
sorted_diagnostics,
row,
Expand Down
1 change: 1 addition & 0 deletions lua/LspUI/modules.lua
Original file line number Diff line number Diff line change
Expand Up @@ -11,4 +11,5 @@ return {
reference = require("LspUI.reference"),
inlay_hint = require("LspUI.inlay_hint"),
call_hierarchy = require("LspUI.call_hierarchy"),
signature = require("LspUI.signature"),
}
6 changes: 3 additions & 3 deletions lua/LspUI/pos_abstract.lua
Original file line number Diff line number Diff line change
Expand Up @@ -432,10 +432,10 @@ local secondary_view_autocmd = function()
buffer = M.secondary_view_buffer(),
callback = function()
-- get current cursor position
local cursor_position =
api.nvim_win_get_cursor(M.secondary_view_window())

local lnum = cursor_position[1]
--- @type integer
---@diagnostic disable-next-line: assign-type-mismatch
local lnum = fn.line(".")

local uri, range = get_lsp_position_by_lnum(lnum)
if not uri then
Expand Down
55 changes: 54 additions & 1 deletion lua/LspUI/signature/init.lua
Original file line number Diff line number Diff line change
@@ -1 +1,54 @@
-- TODO: complete this
local api, fn = vim.api, vim.fn
local config = require("LspUI.config")
local lib_notify = require("LspUI.lib.notify")
local util = require("LspUI.signature.util")

local M = {}

local is_initialized = false

M.init = function()
if not config.options.signature.enable then
return
end

if is_initialized then
return
end

is_initialized = true

local hl_val = {
fg = config.options.signature.color.fg,
italic = true,
-- standout = true,
undercurl = true,
}

if config.options.signature.color.bg then
hl_val.fg = config.options.signature.color.bg
end
api.nvim_set_hl(0, "LspUI_Signature", hl_val)

-- init autocmd
util.autocmd()
end

M.deinit = function()
if not is_initialized then
lib_notify.Info("signature has been deinit")
end

is_initialized = false

-- remove autocmd
util.deautocmd()
end

M.run = function()
lib_notify.Info("signature has no run func")
end

M.status_line = util.status_line

return M
Loading
Loading