1
1
" constants {{{
2
2
3
- let s: kind_text_mappings = {
3
+ let s: default_completion_item_kinds = {
4
4
\ ' 1' : ' text' ,
5
5
\ ' 2' : ' method' ,
6
6
\ ' 3' : ' function' ,
@@ -28,6 +28,8 @@ let s:kind_text_mappings = {
28
28
\ ' 25' : ' type parameter' ,
29
29
\ }
30
30
31
+ let s: completion_item_kinds = {}
32
+
31
33
let s: completion_status_success = ' success'
32
34
let s: completion_status_failed = ' failed'
33
35
let s: completion_status_pending = ' pending'
@@ -96,7 +98,7 @@ function! s:handle_omnicompletion(server_name, complete_counter, data) abort
96
98
return
97
99
endif
98
100
99
- let l: result = s: get_completion_result (a: data )
101
+ let l: result = s: get_completion_result (a: server_name , a: data )
100
102
let l: matches = l: result [' matches' ]
101
103
102
104
if g: lsp_async_completion
@@ -107,8 +109,25 @@ function! s:handle_omnicompletion(server_name, complete_counter, data) abort
107
109
endif
108
110
endfunction
109
111
110
- function ! lsp#omni#get_kind_text (completion_item) abort
111
- return has_key (a: completion_item , ' kind' ) && has_key (s: kind_text_mappings , a: completion_item [' kind' ]) ? s: kind_text_mappings [a: completion_item [' kind' ]] : ' '
112
+ function ! lsp#omni#get_kind_text (completion_item, ... ) abort
113
+ let l: server = get (a: , 1 , ' ' )
114
+ if empty (l: server ) " server name
115
+ let l: completion_item_kinds = s: default_completion_item_kinds
116
+ else
117
+ if ! has_key (s: completion_item_kinds , l: server )
118
+ let l: server_info = lsp#get_server_info (l: server )
119
+ if has_key (l: server_info , ' config' ) && has_key (l: server_info [' config' ], ' completion_item_kinds' )
120
+ let s: completion_item_kinds [l: server ] = s: default_completion_item_kinds
121
+ call extend (s: completion_item_kinds [l: server ] , l: server_info [' config' ][' completion_item_kinds' ])
122
+ else
123
+ let s: completion_item_kinds [l: server ] = s: default_completion_item_kinds
124
+ endif
125
+ endif
126
+ let l: completion_item_kinds = s: completion_item_kinds [l: server ]
127
+ endif
128
+
129
+ return has_key (a: completion_item , ' kind' ) && has_key (l: completion_item_kinds , a: completion_item [' kind' ])
130
+ \ ? l: completion_item_kinds [a: completion_item [' kind' ]] : ' '
112
131
endfunction
113
132
114
133
" auxiliary functions {{{
@@ -140,7 +159,7 @@ function! s:send_completion_request(info) abort
140
159
\ })
141
160
endfunction
142
161
143
- function ! s: get_completion_result (data) abort
162
+ function ! s: get_completion_result (server_name, data) abort
144
163
let l: result = a: data [' response' ][' result' ]
145
164
146
165
if type (l: result ) == type ([])
@@ -154,7 +173,7 @@ function! s:get_completion_result(data) abort
154
173
let l: incomplete = 0
155
174
endif
156
175
157
- let l: matches = type (l: items ) == type ([]) ? map (l: items , {_, item - > lsp#omni#get_vim_completion_item (item, 1 ) }) : []
176
+ let l: matches = type (l: items ) == type ([]) ? map (l: items , {_, item - > lsp#omni#get_vim_completion_item (item, a: server_name , 1 ) }) : []
158
177
159
178
return {' matches' : l: matches , ' incomplete' : l: incomplete }
160
179
endfunction
@@ -182,7 +201,8 @@ function! s:remove_typed_part(word) abort
182
201
endfunction
183
202
184
203
function ! lsp#omni#default_get_vim_completion_item (item, ... ) abort
185
- let l: do_remove_typed_part = get (a: , 1 , 0 )
204
+ let l: server_name = get (a: , 1 , ' ' )
205
+ let l: do_remove_typed_part = get (a: , 2 , 0 )
186
206
187
207
if g: lsp_insert_text_enabled && has_key (a: item , ' insertText' ) && ! empty (a: item [' insertText' ])
188
208
if has_key (a: item , ' insertTextFormat' ) && a: item [' insertTextFormat' ] != 1
@@ -199,7 +219,8 @@ function! lsp#omni#default_get_vim_completion_item(item, ...) abort
199
219
if l: do_remove_typed_part
200
220
let l: word = s: remove_typed_part (l: word )
201
221
endif
202
- let l: kind = lsp#omni#get_kind_text (a: item )
222
+
223
+ let l: kind = lsp#omni#get_kind_text (a: item , l: server_name )
203
224
204
225
let l: completion = {
205
226
\ ' word' : l: word ,
@@ -370,7 +391,7 @@ function! s:get_cursor_pos_and_edit_length(text_edit) abort
370
391
endfunction
371
392
372
393
function ! lsp#omni#get_completion_item_kinds () abort
373
- return map (keys (s: kind_text_mappings ), {idx, key - > str2nr (key )})
394
+ return map (keys (s: default_completion_item_kinds ), {idx, key - > str2nr (key )})
374
395
endfunction
375
396
376
397
" }}}
0 commit comments