aboutsummaryrefslogtreecommitdiffstats
path: root/home-manager/soispha/config/neovim/nixvim/plugins/lsp-progress-nvim/lua/lsp-progress-nvim.lua
diff options
context:
space:
mode:
Diffstat (limited to 'home-manager/soispha/config/neovim/nixvim/plugins/lsp-progress-nvim/lua/lsp-progress-nvim.lua')
-rw-r--r--home-manager/soispha/config/neovim/nixvim/plugins/lsp-progress-nvim/lua/lsp-progress-nvim.lua160
1 files changed, 160 insertions, 0 deletions
diff --git a/home-manager/soispha/config/neovim/nixvim/plugins/lsp-progress-nvim/lua/lsp-progress-nvim.lua b/home-manager/soispha/config/neovim/nixvim/plugins/lsp-progress-nvim/lua/lsp-progress-nvim.lua
new file mode 100644
index 00000000..80c01e4a
--- /dev/null
+++ b/home-manager/soispha/config/neovim/nixvim/plugins/lsp-progress-nvim/lua/lsp-progress-nvim.lua
@@ -0,0 +1,160 @@
+--- @type table<string, any>
+require("lsp-progress").setup({
+ -- Spinning icons.
+ --
+ --- @type string[]
+ spinner = { "⣾", "⣽", "⣻", "⢿", "⡿", "⣟", "⣯", "⣷" },
+
+ -- Spinning update time in milliseconds.
+ --
+ --- @type integer
+ spin_update_time = 200,
+
+ -- Last message cached decay time in milliseconds.
+ --
+ -- Message could be really fast(appear and disappear in an
+ -- instant) that user cannot even see it, thus we cache the last message
+ -- for a while for user view.
+ --
+ --- @type integer
+ decay = 700,
+
+ -- User event name.
+ --
+ --- @type string
+ event = "LspProgressStatusUpdated",
+
+ -- Event update time limit in milliseconds.
+ --
+ -- Sometimes progress handler could emit many events in an instant, while
+ -- refreshing statusline cause too heavy synchronized IO, so we limit the
+ -- event rate to reduce this cost.
+ --
+ --- @type integer
+ event_update_time_limit = 100,
+
+ -- Max progress string length, by default -1 is unlimited.
+ --
+ --- @type integer
+ max_size = -1,
+
+ -- Regular internal update time.
+ --
+ -- Emit user event to update the lsp progress status, even there's no new
+ -- message.
+ --
+ --- @type integer
+ regular_internal_update_time = 500,
+
+ -- Disable emitting events on specific mode/filetype.
+ -- User events would interrupt insert mode, thus break which-key like plugins behaviour.
+ -- See:
+ -- * https://github.com/linrongbin16/lsp-progress.nvim/issues/50
+ -- * https://neovim.io/doc/user/builtin.html#mode()
+ --
+ --- @type table[]
+ disable_events_opts = {
+ {
+ mode = "i",
+ filetype = "TelescopePrompt",
+ },
+ },
+
+ -- Format series message.
+ --
+ -- By default it looks like: `formatting isort (100%) - done`.
+ --
+ --- @param title string|nil
+ --- Message title.
+ --- @param message string|nil
+ --- Message body.
+ --- @param percentage number|nil
+ --- Progress in percentage numbers: 0-100.
+ --- @param done boolean
+ --- Indicate whether this series is the last one in progress.
+ --- @return string|nil messages
+ --- The returned value will be passed to function `client_format` as
+ --- one of the `series_messages` array, or ignored if return nil.
+ series_format = function(title, message, percentage, done)
+ local builder = {}
+ local has_title = false
+ local has_message = false
+ if title and title ~= "" then
+ table.insert(builder, title)
+ has_title = true
+ end
+ if message and message ~= "" then
+ table.insert(builder, message)
+ has_message = true
+ end
+ if percentage and (has_title or has_message) then
+ table.insert(builder, string.format("(%.0f%%%%)", percentage))
+ end
+ if done and (has_title or has_message) then
+ table.insert(builder, "- done")
+ end
+ return table.concat(builder, " ")
+ end,
+
+ -- Format client message.
+ --
+ -- By default it looks like:
+ -- `[null-ls] ⣷ formatting isort (100%) - done, formatting black (50%)`.
+ --
+ --- @param client_name string
+ --- Client name.
+ --- @param spinner string
+ --- Spinner icon.
+ --- @param series_messages string[]|table[]
+ --- Messages array.
+ --- @return string|nil messages
+ --- The returned value will be passed to function `format` as one of the
+ --- `client_messages` array, or ignored if return nil.
+ client_format = function(client_name, spinner, series_messages)
+ return #series_messages > 0
+ and ("[" .. client_name .. "] " .. spinner .. " " .. table.concat(
+ series_messages,
+ ", "
+ ))
+ or nil
+ end,
+
+ -- Format (final) message.
+ --
+ -- By default it looks like:
+ -- ` LSP [null-ls] ⣷ formatting isort (100%) - done, formatting black (50%)`
+ --
+ --- @param client_messages string[]|table[]
+ --- Client messages array.
+ --- @return nil|string message
+ --- The returned value will be returned from `progress` API.
+ format = function(client_messages)
+ local sign = " LSP" -- nf-fa-gear \uf013
+ return #client_messages > 0
+ and (sign .. " " .. table.concat(client_messages, " "))
+ or sign
+ end,
+
+ -- Enable debug.
+ --
+ --- @type boolean
+ debug = false,
+
+ -- Print log to console(command line).
+ --
+ --- @type boolean
+ console_log = false,
+
+ -- Print log to file.
+ --
+ --- @type boolean
+ file_log = true,
+
+ -- Log file to write, work with `file_log=true`.
+ --
+ -- For Windows: `$env:USERPROFILE\AppData\Local\nvim-data\lsp-progress.log`.
+ -- For *NIX: `~/.local/share/nvim/lsp-progress.log`.
+ --
+ --- @type string
+ file_log_name = "lsp-progress.log",
+})