aboutsummaryrefslogtreecommitdiffstats
path: root/hm/soispha/conf/nvim/plgs/lsp-progress-nvim
diff options
context:
space:
mode:
authorSoispha <soispha@vhack.eu>2023-08-29 21:33:43 +0200
committerSoispha <soispha@vhack.eu>2023-08-29 21:33:43 +0200
commit3925f6ee04f09d7d09b7aff018812670a0e89492 (patch)
tree12642e7332ebb53153bef1bf5d5f811e3f19884b /hm/soispha/conf/nvim/plgs/lsp-progress-nvim
parentFeat(hm/conf/nvim/plgs/debugprint): Init (diff)
downloadnixos-config-3925f6ee04f09d7d09b7aff018812670a0e89492.zip
Refactor(hm/conf/nvim/plugins): Rename to `plgs` to safe commit msg space
Diffstat (limited to 'hm/soispha/conf/nvim/plgs/lsp-progress-nvim')
-rw-r--r--hm/soispha/conf/nvim/plgs/lsp-progress-nvim/default.nix50
-rw-r--r--hm/soispha/conf/nvim/plgs/lsp-progress-nvim/lua/lsp-progress-nvim.lua150
2 files changed, 200 insertions, 0 deletions
diff --git a/hm/soispha/conf/nvim/plgs/lsp-progress-nvim/default.nix b/hm/soispha/conf/nvim/plgs/lsp-progress-nvim/default.nix
new file mode 100644
index 00000000..6602ceb6
--- /dev/null
+++ b/hm/soispha/conf/nvim/plgs/lsp-progress-nvim/default.nix
@@ -0,0 +1,50 @@
+{
+ lib,
+ pkgs,
+ ...
+}: {
+ programs.nixvim = {
+ # TODO: package lsp-progress-nvim though a module
+ extraConfigLuaPost = ''
+ ${lib.strings.fileContents ./lua/lsp-progress-nvim.lua}
+ '';
+ extraPlugins = [
+ pkgs.vimExtraPlugins.lsp-progress-nvim
+ ];
+
+ # Status line setup
+ autoGroups.lsp_refresh.clear = true;
+ autoCmd = [
+ {
+ event = ["User LspProgressStatusUpdated"];
+ pattern = ["*"];
+ callback =
+ /*
+ lua
+ */
+ {
+ __raw = ''
+ require("lualine").refresh
+ '';
+ };
+ group = "lsp_refresh";
+ description = "Refresh the statusbar when the lsp status was updated.";
+ }
+ ];
+ plugins.lualine = let
+ get_lsp_progress = {
+ __raw =
+ /*
+ lua
+ */
+ ''
+ require('lsp-progress').progress
+ '';
+ };
+ in {
+ sections = {
+ lualine_c = [{name = get_lsp_progress;}];
+ };
+ };
+ };
+}
diff --git a/hm/soispha/conf/nvim/plgs/lsp-progress-nvim/lua/lsp-progress-nvim.lua b/hm/soispha/conf/nvim/plgs/lsp-progress-nvim/lua/lsp-progress-nvim.lua
new file mode 100644
index 00000000..4273085c
--- /dev/null
+++ b/hm/soispha/conf/nvim/plgs/lsp-progress-nvim/lua/lsp-progress-nvim.lua
@@ -0,0 +1,150 @@
+--- @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";
+})