about summary refs log blame commit diff stats
path: root/hm/soispha/conf/nvim/plgs/lsp-progress-nvim/lua/lsp-progress-nvim.lua
blob: 4273085c07b608017d8eb50958f96220ec494781 (plain) (tree)
1
2
3
4
5
6
7
8
9
10
11
                               


                                                                        
 


                                          
 






                                                                          
 


                                     
 






                                                                           
 


                                                            
 





                                                                           
 






                                                                                          
 

































                                                                          
 

















                                                                                               
 











                                                                                               
 


                   
 


                                        
 


                       
 





                                                                              
  
--- @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";
})