perf(data source): support 'LspProgress' event in v0.10 (#109)

docs(install): update installation and integration
This commit is contained in:
linrongbin16 2024-01-11 10:55:27 +08:00 committed by GitHub
parent 509b17fb21
commit 2032169287
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
10 changed files with 231 additions and 222 deletions

View file

@ -6,4 +6,4 @@ insert_final_newline = false
charset = utf-8
trim_trailing_whitespace = true
indent_style = space
indent_size = 4
indent_size = 2

View file

@ -14,8 +14,7 @@ jobs:
if: ${{ github.ref != 'refs/heads/main' }}
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- uses: actions/checkout@v4
# - uses: webiny/action-conventional-commits@v1.1.0
- uses: ytanikin/PRConventionalCommits@1.1.0
with:
@ -24,28 +23,23 @@ jobs:
name: Lua check
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: LuaLs typecheck
uses: stevearc/nvim-typecheck-action@v1
- uses: actions/checkout@v4
- uses: stevearc/nvim-typecheck-action@v1
with:
path: lua
level: Information
configpath: ".luarc.json"
neodev-version: stable
- name: Luacheck
uses: lunarmodules/luacheck@v1
- uses: lunarmodules/luacheck@v1
with:
args: lua --config .luacheckrc
- name: Stylua
uses: JohnnyMorganz/stylua-action@v3
- uses: JohnnyMorganz/stylua-action@v3
with:
token: ${{ secrets.GITHUB_TOKEN }}
version: latest
args: --config-path .stylua.toml lua/ test/
- name: Auto Commit
- uses: stefanzweifel/git-auto-commit-action@v4
if: ${{ github.ref != 'refs/heads/main' }}
uses: stefanzweifel/git-auto-commit-action@v4
with:
commit_message: "chore(pr): auto-commit"
unit_test:
@ -55,20 +49,16 @@ jobs:
nvim_version: [stable, nightly, v0.6.0]
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Install neovim
uses: rhysd/action-setup-vim@v1
- uses: actions/checkout@v4
- uses: rhysd/action-setup-vim@v1
id: vim
with:
neovim: true
version: ${{ matrix.nvim_version }}
- name: Install luajit
uses: leafo/gh-actions-lua@v10
- uses: leafo/gh-actions-lua@v10
with:
luaVersion: "luajit-2.1.0-beta3"
- name: Install luarocks
uses: leafo/gh-actions-luarocks@v4
- uses: leafo/gh-actions-luarocks@v4
- name: Run test cases
shell: bash
run: |
@ -88,8 +78,7 @@ jobs:
ls -l .
echo "cat ./luacov.report.out"
cat ./luacov.report.out
- name: Upload coverage reports to Codecov
uses: codecov/codecov-action@v3
- uses: codecov/codecov-action@v3
with:
files: luacov.report.out
env:
@ -122,7 +111,6 @@ jobs:
LUAROCKS_API_KEY: ${{ secrets.LUAROCKS_API_KEY }}
with:
version: ${{ steps.release.outputs.tag_name }}
summary: "A performant lsp progress status for Neovim."
labels: |
vim
neovim

3
.nvim.lua Normal file
View file

@ -0,0 +1,3 @@
vim.opt.tabstop = 2
vim.opt.softtabstop = 2
vim.opt.shiftwidth = 2

191
README.md
View file

@ -1,16 +1,31 @@
<!-- markdownlint-disable MD001 MD013 MD034 MD033 MD051 -->
# lsp-progress.nvim
<p align="center">
<a href="https://github.com/neovim/neovim/releases/v0.6.0"><img alt="Neovim" src="https://img.shields.io/badge/Neovim-v0.6-57A143?logo=neovim&logoColor=57A143" /></a>
<a href="https://luarocks.org/modules/linrongbin16/lsp-progress.nvim"><img alt="luarocks" src="https://custom-icon-badges.demolab.com/luarocks/v/linrongbin16/lsp-progress.nvim?label=LuaRocks&labelColor=063B70&logo=tag&logoColor=fff&color=008B8B" /></a>
<a href="https://github.com/neovim/neovim/releases/v0.6.0"><img alt="Neovim" src="https://img.shields.io/badge/Neovim-v0.6+-57A143?logo=neovim&logoColor=57A143" /></a>
<a href="https://luarocks.org/modules/linrongbin16/lsp-progress.nvim"><img alt="luarocks" src="https://custom-icon-badges.demolab.com/luarocks/v/linrongbin16/lsp-progress.nvim?label=LuaRocks&labelColor=2C2D72&logo=tag&logoColor=fff&color=blue" /></a>
<a href="https://github.com/linrongbin16/lsp-progress.nvim/actions/workflows/ci.yml"><img alt="ci.yml" src="https://img.shields.io/github/actions/workflow/status/linrongbin16/lsp-progress.nvim/ci.yml?label=GitHub%20CI&labelColor=181717&logo=github&logoColor=fff" /></a>
<a href="https://app.codecov.io/github/linrongbin16/lsp-progress.nvim"><img alt="codecov" src="https://img.shields.io/codecov/c/github/linrongbin16/lsp-progress.nvim?logo=codecov&logoColor=F01F7A&label=Codecov" /></a>
</p>
A performant lsp progress status for Neovim.
<p align="center"><i> A performant lsp progress status for Neovim. </i></p>
<!-- https://github.com/linrongbin16/lsp-progress.nvim/assets/6496887/a0436100-d35c-48a1-a9c4-4346b09d6b25 -->
![default](https://github.com/linrongbin16/lsp-progress.nvim/assets/6496887/e089234b-d465-45ae-840f-72a57b846b0d)
<details>
<summary><i>Click here to see how to configure</i></summary>
```lua
require("lsp-progress").setup()
```
</details>
<!-- https://github.com/linrongbin16/lsp-progress.nvim/assets/6496887/84f17744-9404-4a7b-bbdf-aac5babc0ed3 -->
![client-names](https://github.com/linrongbin16/lsp-progress.nvim/assets/6496887/01dac7a0-678a-421d-a243-9dba2576b15b)
<details>
@ -18,59 +33,61 @@ A performant lsp progress status for Neovim.
```lua
require("lsp-progress").setup({
client_format = function(client_name, spinner, series_messages)
if #series_messages == 0 then
return nil
end
return {
name = client_name,
body = spinner .. " " .. table.concat(series_messages, ", "),
}
end,
format = function(client_messages)
--- @param name string
--- @param msg string?
--- @return string
local function stringify(name, msg)
return msg and string.format("%s %s", name, msg) or name
end
client_format = function(client_name, spinner, series_messages)
if #series_messages == 0 then
return nil
end
return {
name = client_name,
body = spinner .. " " .. table.concat(series_messages, ", "),
}
end,
format = function(client_messages)
--- @param name string
--- @param msg string?
--- @return string
local function stringify(name, msg)
return msg and string.format("%s %s", name, msg) or name
end
local sign = "" -- nf-fa-gear \uf013
local lsp_clients = vim.lsp.get_active_clients()
local messages_map = {}
for _, climsg in ipairs(client_messages) do
messages_map[climsg.name] = climsg.body
end
local sign = "" -- nf-fa-gear \uf013
local lsp_clients = vim.lsp.get_active_clients()
local messages_map = {}
for _, climsg in ipairs(client_messages) do
messages_map[climsg.name] = climsg.body
end
if #lsp_clients > 0 then
table.sort(lsp_clients, function(a, b)
return a.name < b.name
end)
local builder = {}
for _, cli in ipairs(lsp_clients) do
if
type(cli) == "table"
and type(cli.name) == "string"
and string.len(cli.name) > 0
then
if messages_map[cli.name] then
table.insert(builder, stringify(cli.name, messages_map[cli.name]))
else
table.insert(builder, stringify(cli.name))
if #lsp_clients > 0 then
table.sort(lsp_clients, function(a, b)
return a.name < b.name
end)
local builder = {}
for _, cli in ipairs(lsp_clients) do
if
type(cli) == "table"
and type(cli.name) == "string"
and string.len(cli.name) > 0
then
if messages_map[cli.name] then
table.insert(builder, stringify(cli.name, messages_map[cli.name]))
else
table.insert(builder, stringify(cli.name))
end
end
end
if #builder > 0 then
return sign .. " " .. table.concat(builder, ", ")
end
end
if #builder > 0 then
return sign .. " " .. table.concat(builder, ", ")
end
end
return ""
end,
return ""
end,
})
```
</details>
<!-- https://github.com/linrongbin16/lsp-progress.nvim/assets/6496887/9436de63-ea94-4ada-adb7-3812681a5106 -->
![green-check](https://github.com/linrongbin16/lsp-progress.nvim/assets/6496887/2666b105-4939-4985-8b5e-74bc43e5615c)
<details>
@ -130,11 +147,8 @@ require("lsp-progress").setup({
- [Performance](#performance)
- [Requirement](#requirement)
- [Install](#install)
- [packer.nvim](#packernvim)
- [lazy.nvim](#lazynvim)
- [vim-plug](#vim-plug)
- [Usage](#usage)
- [Statusline Integration](#statusline-integration)
- [Lualine Integration](#lualine-integration)
- [Configuration](#configuration)
- [Credit](#credit)
- [Contribute](#contribute)
@ -150,100 +164,67 @@ For more details, please see [Design & Technics](https://github.com/linrongbin16
## Requirement
- Neovim version &ge; 0.6.0.
- Neovim &ge; 0.6.0.
- [Nerd fonts](https://www.nerdfonts.com/) for icons.
## Install
### [packer.nvim](https://github.com/wbthomason/packer.nvim)
<details>
<summary><b>With <a href="https://github.com/wbthomason/packer.nvim">packer.nvim</a></b></summary>
```lua
-- lua
return require('packer').startup(function(use)
use {'nvim-tree/nvim-web-devicons'},
use {
'linrongbin16/lsp-progress.nvim',
config = function()
require('lsp-progress').setup()
end
}
-- integrate with lualine
use {
'nvim-lualine/lualine.nvim',
config = ...,
}
-- integrate with heirline
use {
'rebelot/heirline.nvim',
config = ...,
}
end)
```
### [lazy.nvim](https://github.com/folke/lazy.nvim)
</details>
<details>
<summary><b>With <a href="https://github.com/folke/lazy.nvim">lazy.nvim</a></b></summary>
```lua
-- lua
require("lazy").setup({
{
'linrongbin16/lsp-progress.nvim',
dependencies = { 'nvim-tree/nvim-web-devicons' },
config = function()
require('lsp-progress').setup()
end
}
-- integrate with lualine
{
'nvim-lualine/lualine.nvim',
dependencies = {
'nvim-tree/nvim-web-devicons',
'linrongbin16/lsp-progress.nvim',
},
config = ...
},
-- integrate with heirline
{
'rebelot/heirline.nvim',
dependencies = {
'linrongbin16/lsp-progress.nvim',
},
config = ...
}
})
```
### [vim-plug](https://github.com/junegunn/vim-plug)
</details>
<details>
<summary><b>With <a href="https://github.com/junegunn/vim-plug">vim-plug</a></b></summary>
```vim
" vim
call plug#begin()
Plug 'nvim-tree/nvim-web-devicons'
Plug 'linrongbin16/lsp-progress.nvim'
" integrate with lualine
Plug 'nvim-lualine/lualine.nvim'
" integrate with heirline
Plug 'rebelot/heirline.nvim'
call plug#end()
lua require('lsp-progress').setup()
```
</details>
## Usage
- `LspProgressStatusUpdated`: user event to notify new status, and trigger statusline
refresh.
- `require('lsp-progress').progress(option)`: get lsp progress status, parameter
`option` is an optional lua table:
- `require('lsp-progress').progress(opts)`: get lsp progress status, parameter
`opts` is an optional lua table:
```lua
require('lsp-progress').progress({
@ -252,12 +233,10 @@ lua require('lsp-progress').setup()
})
```
The fields share the same schema with `setup(option)` (see [Configuration](#configuration))
The fields are the same value passing to `setup` (see [Configuration](#configuration))
to provide more dynamic abilities.
### Statusline Integration
#### [lualine](https://github.com/nvim-lualine/lualine.nvim)
### [lualine.nvim](https://github.com/nvim-lualine/lualine.nvim) Integration
```lua
require("lualine").setup({
@ -281,7 +260,7 @@ vim.api.nvim_create_autocmd("User", {
})
```
#### [heirline](https://github.com/rebelot/heirline.nvim)
### [heirline.nvim](https://github.com/rebelot/heirline.nvim) Integration
```lua
local LspProgress = {
@ -299,6 +278,8 @@ local StatusLine = {
-- Other StatusLine components
{ ... },
{ ... },
-- Lsp progress status component here
LspProgress
}
@ -312,10 +293,10 @@ require('heirline').setup({
To configure options, please use:
```lua
require('lsp-progress').setup(option)
require('lsp-progress').setup(opts)
```
The `option` is an optional lua table that override the default options.
The `opts` is an optional lua table that overwrite the default options.
For complete options and defaults, please check [defaults.lua](https://github.com/linrongbin16/lsp-progress.nvim/blob/main/lua/lsp-progress/defaults.lua).

View file

@ -8,31 +8,30 @@ local Client = require("lsp-progress.client").Client
local Registered = false
--- @type Configs
--- @type lsp_progress.Configs
local Configs = {}
-- client manager {
--- @type table<integer, Client>
--- @type table<lsp_progress.ClientId, lsp_progress.Client>
local LspClients = {}
--- @package
--- @param client_id integer
--- @param client_id lsp_progress.ClientId
--- @return boolean
local function _has_client(client_id)
return LspClients[client_id] ~= nil
end
--- @package
--- @param client_id integer
--- @return Client
--- @param client_id lsp_progress.ClientId
--- @return lsp_progress.Client
local function _get_client(client_id)
return LspClients[client_id]
end
--- @package
--- @param client_id integer
--- @return nil
--- @param client_id lsp_progress.ClientId
local function _remove_client(client_id)
LspClients[client_id] = nil
if not next(LspClients) then
@ -41,9 +40,8 @@ local function _remove_client(client_id)
end
--- @package
--- @param client_id integer
--- @param client_id lsp_progress.ClientId
--- @param client_name string
--- @return nil
local function _register_client(client_id, client_name)
if not _has_client(client_id) then
LspClients[client_id] = Client:new(client_id, client_name)
@ -56,11 +54,9 @@ end
-- client manager }
--- @param client_id integer
--- @param token string
--- @return nil
--- @param client_id lsp_progress.ClientId
--- @param token lsp_progress.SeriesToken
local function spin(client_id, token)
--- @return nil
local function spin_again()
spin(client_id, token)
end
@ -164,20 +160,19 @@ local function spin(client_id, token)
event.emit()
end
--- @param err any
--- @param msg table<string, any>
--- @param ctx table<string, any>
--- @return nil
local function progress_handler(err, msg, ctx)
local client_id = ctx.client_id
local nvim_lsp_client = vim.lsp.get_client_by_id(client_id)
local client_name = nvim_lsp_client and nvim_lsp_client.name or "unknown"
--- @alias lsp_progress.LspClientObj {id:lsp_progress.ClientId,name:string}
--- @alias lsp_progress.LspProgressObj {token:lsp_progress.SeriesToken,value:{kind:"begin"|"report"|"end",title:string?,message:string?,percentage:integer?}}
--- @param client lsp_progress.LspClientObj
--- @param progress lsp_progress.LspProgressObj
local function update_progress(client, progress)
local client_id = client.id
local client_name = client.name
-- register client id if not exist
_register_client(client_id, client_name)
local value = msg.value
local token = msg.token
local token = progress.token
local value = progress.value
local cli = _get_client(client_id)
if value.kind == "begin" then
@ -238,7 +233,37 @@ local function progress_handler(err, msg, ctx)
event.emit()
end
--- @param option Configs?
--- @param err string?
--- @param msg table<string, any>
--- @param ctx table<string, any>
local function method_handler(err, msg, ctx)
local client = vim.lsp.get_client_by_id(ctx.client_id) --[[@as table]]
update_progress(client, msg)
end
local function _is_lsp_client_obj(c)
return type(c) == "table" and c.id and type(c.name) == "string"
end
local function _is_lsp_progress_obj(p)
return type(p) == "table" and p.token and type(p.value) == "table"
end
local function event_handler()
local lsp_clients = vim.lsp.get_active_clients()
for _, client in ipairs(lsp_clients) do
if _is_lsp_client_obj(client) and type(client.progress) == "table" then
for progress in client.progress do
-- logger.debug("|setup| v0.10 progress:%s", vim.inspect(progress))
if _is_lsp_progress_obj(progress) then
update_progress(client, progress)
end
end
end
end
end
--- @param option lsp_progress.Configs?
--- @return string?
local function progress(option)
option = vim.tbl_deep_extend("force", vim.deepcopy(Configs), option or {})
@ -285,8 +310,7 @@ local function progress(option)
return content
end
--- @param option table<string, any>
--- @return nil
--- @param option lsp_progress.Configs
local function setup(option)
-- setup config
Configs = defaults.setup(option)
@ -313,17 +337,24 @@ local function setup(option)
-- init client
require("lsp-progress.client").setup(Configs.client_format, Configs.spinner)
if not Registered then
if vim.lsp.handlers["$/progress"] then
local old_handler = vim.lsp.handlers["$/progress"]
vim.lsp.handlers["$/progress"] = function(...)
old_handler(...)
progress_handler(...)
if vim.fn.has("nvim-0.10") > 0 then
-- see:
-- https://github.com/neovim/neovim/blob/582d7f47905d82f315dc852a9d2937cd5b655e55/runtime/doc/news.txt#L44
-- https://github.com/neovim/neovim/blob/582d7f47905d82f315dc852a9d2937cd5b655e55/runtime/lua/vim/lsp/util.lua#L348
vim.api.nvim_create_autocmd("LspProgress", { callback = event_handler })
else
if not Registered then
if vim.lsp.handlers["$/progress"] then
local old_handler = vim.lsp.handlers["$/progress"]
vim.lsp.handlers["$/progress"] = function(...)
old_handler(...)
method_handler(...)
end
else
vim.lsp.handlers["$/progress"] = method_handler
end
else
vim.lsp.handlers["$/progress"] = progress_handler
Registered = true
end
Registered = true
end
end

View file

@ -1,25 +1,28 @@
local logger = require("lsp-progress.logger")
--- @alias ClientFormatResult string|any|nil
--- @alias ClientFormat fun(client_name:string,spinner:string,series_messages:string[]|table[]):ClientFormatResult
--- @type ClientFormat?
--- @alias lsp_progress.ClientFormatResult string|any|nil
--- @alias lsp_progress.ClientFormat fun(client_name:string,spinner:string,series_messages:string[]|table[]):lsp_progress.ClientFormatResult
--- @type lsp_progress.ClientFormat?
local ClientFormat = nil
--- @type string[]|nil
local Spinner = nil
--- @class Client
--- @field client_id integer|nil
---@alias lsp_progress.ClientId integer
---@alias lsp_progress.SeriesToken integer|string
---
--- @class lsp_progress.Client
--- @field client_id lsp_progress.ClientId?
--- @field client_name string|nil
--- @field spin_index integer
--- @field serieses table<string, Series> map: key => SeriesObject.
--- @field private _format_cache ClientFormatResult
--- @field private _deduped_tokens table<string, string> map: title+message => token.
--- @field serieses table<lsp_progress.SeriesToken, lsp_progress.Series> map series token => series object.
--- @field private _format_cache lsp_progress.ClientFormatResult
--- @field private _deduped_tokens table<string, lsp_progress.SeriesToken> map: title+message => token.
local Client = {}
--- @param client_id integer
--- @param client_id lsp_progress.ClientId
--- @param client_name string
--- @return Client
--- @return lsp_progress.Client
function Client:new(client_id, client_name)
local o = {
client_id = client_id,
@ -38,7 +41,7 @@ function Client:new(client_id, client_name)
return o
end
--- @param token string
--- @param token lsp_progress.SeriesToken
--- @return boolean
function Client:has_series(token)
return self.serieses[token] ~= nil
@ -63,7 +66,7 @@ end
--- @package
--- @param title string
--- @param message string
--- @param token string
--- @param token lsp_progress.SeriesToken
function Client:_set_dedup_token(title, message, token)
self._deduped_tokens[_get_dedup_key(title, message)] = token
end
@ -78,12 +81,12 @@ end
--- @package
--- @param title string
--- @param message string
--- @return string token
--- @return lsp_progress.SeriesToken
function Client:_get_dedup_token(title, message)
return self._deduped_tokens[_get_dedup_key(title, message)]
end
--- @param token string
--- @param token lsp_progress.SeriesToken
function Client:remove_series(token)
if self:has_series(token) then
local series = self:get_series(token)
@ -102,14 +105,14 @@ function Client:remove_series(token)
self:format()
end
--- @param token string
--- @return Series
--- @param token lsp_progress.SeriesToken
--- @return lsp_progress.Series
function Client:get_series(token)
return self.serieses[token]
end
--- @param token string
--- @param series Series
--- @param token lsp_progress.SeriesToken
--- @param series lsp_progress.Series
function Client:add_series(token, series)
self:_set_dedup_token(series.title, series.message, token)
self.serieses[token] = series
@ -135,18 +138,19 @@ function Client:increase_spin_index()
self:format()
end
--- @return string
function Client:get_spin_index()
assert(Spinner ~= nil, "Spinner cannot be nil")
assert(#Spinner > 0, "Spinner length must greater than 0")
return Spinner[self.spin_index + 1]
end
--- @return ClientFormatResult
--- @return lsp_progress.ClientFormatResult
function Client:format()
--- @type SeriesFormatResult[]
--- @type lsp_progress.SeriesFormatResult[]
local series_messages = {}
--- @type table<string, boolean>
--- @type table<lsp_progress.SeriesToken, boolean>
local visited_tokens = {}
for dedup_key, token in pairs(self._deduped_tokens) do
@ -188,14 +192,13 @@ function Client:format()
return self._format_cache
end
--- @return ClientFormatResult
--- @return lsp_progress.ClientFormatResult
function Client:format_result()
return self._format_cache
end
--- @param client_format ClientFormat
--- @param client_format lsp_progress.ClientFormat
--- @param spinner string[]
--- @return nil
local function setup(client_format, spinner)
ClientFormat = client_format
Spinner = spinner

View file

@ -1,5 +1,5 @@
--- @alias Configs table<any, any>
--- @type Configs
--- @alias lsp_progress.Configs table<any, any>
--- @type lsp_progress.Configs
local Defaults = {
-- Spinning icons.
--
@ -52,7 +52,7 @@ local Defaults = {
-- * https://github.com/linrongbin16/lsp-progress.nvim/issues/50
-- * https://neovim.io/doc/user/builtin.html#mode()
--
--- @type DisableEventOpt[]
--- @type lsp_progress.DisableEventOpt[]
disable_events_opts = {
{
mode = "i",
@ -72,7 +72,7 @@ local Defaults = {
--- Progress in percentage numbers: 0-100.
--- @param done boolean
--- Indicate whether this series is the last one in progress.
--- @return SeriesFormatResult
--- @return lsp_progress.SeriesFormatResult
--- 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)
@ -109,7 +109,7 @@ local Defaults = {
--- Spinner icon.
--- @param series_messages string[]|table[]
--- Messages array.
--- @return ClientFormatResult
--- @return lsp_progress.ClientFormatResult
--- 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)
@ -131,7 +131,8 @@ local Defaults = {
--- @return string
--- The returned value will be returned as the result of `progress` API.
format = function(client_messages)
local sign = " LSP" -- nf-fa-gear \uf013
-- icon: nf-fa-gear \uf013
local sign = " LSP"
if #client_messages > 0 then
return sign .. " " .. table.concat(client_messages, " ")
end
@ -165,8 +166,8 @@ local Defaults = {
file_log_name = "lsp-progress.log",
}
--- @param option Configs
--- @return Configs
--- @param option lsp_progress.Configs
--- @return lsp_progress.Configs
local function setup(option)
local config =
vim.tbl_deep_extend("force", vim.deepcopy(Defaults), option or {})
@ -174,7 +175,7 @@ local function setup(option)
end
--- @package
--- @return Configs
--- @return lsp_progress.Configs
local function _get_defaults()
return Defaults
end

View file

@ -1,6 +1,6 @@
local logger = require("lsp-progress.logger")
--- @type Configs
--- @type lsp_progress.Configs
local Configs = {
--- @type string?
name = nil,
@ -12,7 +12,7 @@ local Configs = {
emit = false,
}
--- @class DisableEventOpt
--- @class lsp_progress.DisableEventOpt
--- @field mode string?
--- @field filetype string?
local DisableEventOpt = {
@ -21,8 +21,8 @@ local DisableEventOpt = {
}
--- @package
--- @param opts Configs
--- @return DisableEventOpt
--- @param opts lsp_progress.Configs
--- @return lsp_progress.DisableEventOpt
function DisableEventOpt:new(opts)
local o = {
mode = opts.mode,
@ -57,15 +57,15 @@ function DisableEventOpt:match()
return mode_match and filetype_match
end
--- @class DisableEventOptsManager
--- @field disable_event_opts DisableEventOpt[]
--- @class lsp_progress.DisableEventOptsManager
--- @field disable_event_opts lsp_progress.DisableEventOpt[]
local DisableEventOptsManager = {
disable_event_opts = {},
}
--- @package
--- @param opts Configs[]?
--- @return DisableEventOptsManager
--- @param opts lsp_progress.Configs[]?
--- @return lsp_progress.DisableEventOptsManager
function DisableEventOptsManager:new(opts)
local disable_event_opts = {}
if type(opts) == "table" then
@ -92,7 +92,7 @@ function DisableEventOptsManager:match()
return false
end
--- @type DisableEventOptsManager?
--- @type lsp_progress.DisableEventOptsManager?
local GlobalDisabledEventOptsManager = nil
--- @package
@ -128,8 +128,7 @@ end
--- @param event_name string
--- @param event_update_time_limit integer
--- @param internal_regular_update_time integer
--- @param disable_events_opts Configs[]?
--- @return nil
--- @param disable_events_opts lsp_progress.Configs[]?
local function setup(
event_name,
event_update_time_limit,
@ -145,7 +144,6 @@ local function setup(
regular_update()
end
--- @type table<string, any>
local M = {
setup = setup,
emit = emit,

View file

@ -1,3 +1,6 @@
local uv = (vim.fn.has("nvim-0.10") > 0 and vim.uv ~= nil) and vim.uv
or vim.loop
local PATH_SEPARATOR = (vim.fn.has("win32") > 0 or vim.fn.has("win64") > 0)
and "\\"
or "/"
@ -27,7 +30,7 @@ local LogHighlights = {
[4] = "ErrorMsg",
}
--- @type Configs
--- @type lsp_progress.Configs
local Configs = {
level = LogLevels.INFO,
console_log = true,
@ -39,7 +42,6 @@ local Configs = {
--- @param console_log boolean
--- @param file_log boolean
--- @param file_log_name string
--- @return nil
local function setup(level, console_log, file_log, file_log_name)
Configs.level = LogLevels[level]
Configs.console_log = console_log
@ -76,10 +78,12 @@ local function log(level, msg)
local fp = io.open(Configs.file_name, "a")
if fp then
for _, line in ipairs(msg_lines) do
local secs, ms = uv.gettimeofday()
fp:write(
string.format(
"%s [%s]: %s\n",
os.date("%Y-%m-%d %H:%M:%S"),
"%s.%03d [%s]: %s\n",
os.date("%Y-%m-%d %H:%M:%S", secs),
math.floor(ms / 1000),
LogLevelNames[level],
line
)

View file

@ -1,22 +1,22 @@
local logger = require("lsp-progress.logger")
--- @alias SeriesFormatResult string|any|nil
--- @alias SeriesFormat fun(title:string?,message:string?,percentage:integer?,done:boolean):SeriesFormatResult
--- @type SeriesFormat?
--- @alias lsp_progress.SeriesFormatResult string|any|nil
--- @alias lsp_progress.SeriesFormat fun(title:string?,message:string?,percentage:integer?,done:boolean):lsp_progress.SeriesFormatResult
--- @type lsp_progress.SeriesFormat?
local SeriesFormat = nil
--- @class Series
--- @class lsp_progress.Series
--- @field title string?
--- @field message string?
--- @field percentage integer?
--- @field done boolean
--- @field private _format_cache SeriesFormatResult
--- @field private _format_cache lsp_progress.SeriesFormatResult
local Series = {}
--- @param title string?
--- @param message string?
--- @param percentage integer?
--- @return Series
--- @return lsp_progress.Series
function Series:new(title, message, percentage)
local o = {
title = title,
@ -36,7 +36,7 @@ function Series:new(title, message, percentage)
end
--- @package
--- @return SeriesFormatResult
--- @return lsp_progress.SeriesFormatResult
function Series:_format()
assert(SeriesFormat ~= nil, "SeriesFormat cannot be null")
@ -92,12 +92,12 @@ function Series:finish(message)
-- logger.debug("|series - Series:finish| finish: %s", vim.inspect(self))
end
--- @return SeriesFormatResult
--- @return lsp_progress.SeriesFormatResult
function Series:format_result()
return self._format_cache
end
--- @param series_format SeriesFormat
--- @param series_format lsp_progress.SeriesFormat
local function setup(series_format)
SeriesFormat = series_format
end