Skip to content

Commit

Permalink
[feature] lsp signature help supports (#40), but default is disabled
Browse files Browse the repository at this point in the history
* [feat]: LSP Signature help support, but default is disabled
  • Loading branch information
jinzhongjia authored Feb 1, 2024
1 parent 83b2b48 commit 1e29734
Show file tree
Hide file tree
Showing 9 changed files with 417 additions and 13 deletions.
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

0 comments on commit 1e29734

Please sign in to comment.