1
+ let s: debounce_timer_id = 0
2
+
1
3
function ! s: not_supported (what) abort
2
4
return lsp#utils#error (a: what .' not supported for ' .&filetype )
3
5
endfunction
@@ -11,7 +13,6 @@ function! lsp#ui#vim#signature_help#get_signature_help_under_cursor() abort
11
13
endif
12
14
13
15
let l: position = lsp#get_position ()
14
- let l: position .character += 1
15
16
for l: server in l: servers
16
17
call lsp#send_request (l: server , {
17
18
\ ' method' : ' textDocument/signatureHelp' ,
@@ -110,21 +111,37 @@ function! s:get_parameter_doc(parameter) abort
110
111
return printf (' ***%s*** - %s' , a: parameter [' label' ], l: doc )
111
112
endfunction
112
113
113
- function ! s: insert_char_pre () abort
114
- let l: buf = bufnr (' %' )
115
- for l: server_name in lsp#get_whitelisted_servers (l: buf )
116
- let l: keys = lsp#capabilities#get_signature_help_trigger_characters (l: server_name )
117
- for l: key in l: keys
118
- if l: key == # v: char
119
- call timer_start (0 , {_- > lsp#ui#vim#signature_help#get_signature_help_under_cursor () })
120
- endif
121
- endfor
114
+ function ! s: on_cursor_moved () abort
115
+ let l: bufnr = bufnr (' %' )
116
+ call timer_stop (s: debounce_timer_id )
117
+ let s: debounce_timer_id = timer_start (200 , { - > s: on_text_changed_after (l: bufnr ) }, { ' repeat' : 1 })
118
+ endfunction
119
+
120
+ function ! s: on_text_changed_after (bufnr ) abort
121
+ if bufnr (' %' ) != a: bufnr
122
+ return
123
+ endif
124
+ if index ([' i' , ' s' ], mode ()[0 ]) == -1
125
+ return
126
+ endif
127
+ if win_id2win (lsp#ui#vim#output#getpreviewwinid ()) >= 1
128
+ return
129
+ endif
130
+
131
+ let l: chars = []
132
+ for l: server_name in lsp#get_whitelisted_servers (a: bufnr )
133
+ let l: chars += lsp#capabilities#get_signature_help_trigger_characters (l: server_name )
122
134
endfor
135
+
136
+ if index (l: chars , lsp#utils#_get_before_char_skip_white ()) >= 0
137
+ call lsp#ui#vim#signature_help#get_signature_help_under_cursor ()
138
+ endif
123
139
endfunction
124
140
125
141
function ! lsp#ui#vim#signature_help#setup () abort
126
142
augroup _lsp_signature_help_
127
143
autocmd !
128
- autocmd InsertCharPre <buffer> call s: insert_char_pre ()
144
+ autocmd CursorMoved , CursorMovedI * call s: on_cursor_moved ()
129
145
augroup END
130
146
endfunction
147
+
0 commit comments