@@ -2,8 +2,12 @@ local util = require('lsp-status/util')
2
2
3
3
local clients = {}
4
4
local messages = {}
5
- local function init (_messages , _ )
6
- messages = _messages
5
+ local function init (_messages , _ ) messages = _messages end
6
+
7
+ -- Unregister stopped clients
8
+ local function unregister_client (id )
9
+ messages [id ] = nil
10
+ clients [id ] = nil
7
11
end
8
12
9
13
local function progress_callback (_ , _ , msg , client_id )
@@ -15,18 +19,19 @@ local function progress_callback(_, _, msg, client_id)
15
19
title = val .title ,
16
20
message = val .message ,
17
21
percentage = val .percentage ,
18
- spinner = 1 ,
22
+ spinner = 1
19
23
}
20
24
elseif val .kind == ' report' then
21
25
messages [client_id ].progress [msg .token ].message = val .message
22
26
messages [client_id ].progress [msg .token ].percentage = val .percentage
23
- messages [client_id ].progress [msg .token ].spinner = messages [client_id ].progress [msg .token ].spinner + 1
27
+ messages [client_id ].progress [msg .token ].spinner =
28
+ messages [client_id ].progress [msg .token ].spinner + 1
24
29
elseif val .kind == ' end' then
25
30
if messages [client_id ].progress [msg .token ] == nil then
26
31
vim .api .nvim_command (' echohl WarningMsg' )
27
32
vim .api .nvim_command (
28
- ' echom "[lsp-status] Received `end` message with no corresponding `begin` from ' .. clients [ client_id ] .. ' !" '
29
- )
33
+ ' echom "[lsp-status] Received `end` message with no corresponding `begin` from '
34
+ .. clients [ client_id ] .. ' !" ' )
30
35
vim .api .nvim_command (' echohl None' )
31
36
else
32
37
messages [client_id ].progress [msg .token ].message = val .message
@@ -35,7 +40,7 @@ local function progress_callback(_, _, msg, client_id)
35
40
end
36
41
end
37
42
else
38
- table.insert (messages [client_id ], { content = val , show_once = true , shown = 0 })
43
+ table.insert (messages [client_id ], {content = val , show_once = true , shown = 0 })
39
44
end
40
45
41
46
vim .api .nvim_command (' doautocmd User LspMessageUpdate' )
@@ -47,56 +52,50 @@ local function get_messages()
47
52
local msg_remove = {}
48
53
local progress_remove = {}
49
54
for client , data in pairs (messages ) do
50
- for token , ctx in pairs (data .progress ) do
51
- table.insert (new_messages , {
52
- name = data .name ,
53
- title = ctx .title ,
54
- message = ctx .message ,
55
- percentage = ctx .percentage ,
56
- progress = true ,
57
- spinner = ctx .spinner ,
58
- })
59
-
60
- if ctx .done then
61
- table.insert (progress_remove , { client = client , token = token })
55
+ if vim .lsp .client_is_stopped (client ) then
56
+ unregister_client (client )
57
+ else
58
+ for token , ctx in pairs (data .progress ) do
59
+ table.insert (new_messages , {
60
+ name = data .name ,
61
+ title = ctx .title ,
62
+ message = ctx .message ,
63
+ percentage = ctx .percentage ,
64
+ progress = true ,
65
+ spinner = ctx .spinner
66
+ })
67
+
68
+ if ctx .done then table.insert (progress_remove , {client = client , token = token }) end
62
69
end
63
- end
64
70
65
- for i , msg in ipairs (data .messages ) do
66
- if msg .show_once then
67
- msg .shown = msg .shown + 1
68
- if msg .shown > 1 then
69
- table.insert (msg_remove , { client = client , idx = i })
71
+ for i , msg in ipairs (data .messages ) do
72
+ if msg .show_once then
73
+ msg .shown = msg .shown + 1
74
+ if msg .shown > 1 then table.insert (msg_remove , {client = client , idx = i }) end
70
75
end
71
- end
72
76
73
- table.insert (new_messages , { name = data .name , content = msg .content })
74
- end
77
+ table.insert (new_messages , {name = data .name , content = msg .content })
78
+ end
75
79
76
- if next (data .status ) ~= nil then
77
- table.insert (new_messages , {
78
- name = data .name ,
79
- content = data .status .content ,
80
- uri = data .status .uri ,
81
- status = true
82
- })
80
+ if next (data .status ) ~= nil then
81
+ table.insert (new_messages , {
82
+ name = data .name ,
83
+ content = data .status .content ,
84
+ uri = data .status .uri ,
85
+ status = true
86
+ })
87
+ end
83
88
end
84
89
end
85
90
86
- for _ , item in ipairs (msg_remove ) do
87
- table.remove (messages [item .client ].messages , item .idx )
88
- end
91
+ for _ , item in ipairs (msg_remove ) do table.remove (messages [item .client ].messages , item .idx ) end
89
92
90
- for _ , item in ipairs (progress_remove ) do
91
- messages [item .client ].progress [item .token ] = nil
92
- end
93
+ for _ , item in ipairs (progress_remove ) do messages [item .client ].progress [item .token ] = nil end
93
94
94
95
return new_messages
95
96
end
96
97
97
- local function register_progress ()
98
- vim .lsp .callbacks [' $/progress' ] = progress_callback
99
- end
98
+ local function register_progress () vim .lsp .callbacks [' $/progress' ] = progress_callback end
100
99
101
100
-- Client registration for messages
102
101
local function register_client (id , name )
@@ -114,7 +113,7 @@ local M = {
114
113
register_progress = register_progress ,
115
114
register_client = register_client ,
116
115
_init = init ,
117
- capabilities = capabilities ,
116
+ capabilities = capabilities
118
117
}
119
118
120
119
return M
0 commit comments