@@ -58,6 +58,22 @@ function! lsp#omni#complete(findstart, base) abort
58
58
let s: completion [' status' ] = s: completion_status_pending
59
59
endif
60
60
61
+ " Find first item which has refresh_pattern
62
+ let l: refresh_pattern = ' \(\k\+$\)'
63
+ for l: server_name in l: info [' server_names' ]
64
+ let l: server_info = lsp#get_server_info (l: server_name )
65
+ if has_key (l: server_info , ' config' ) && has_key (l: server_info [' config' ], ' refresh_pattern' )
66
+ let l: refresh_pattern = l: server_info [' config' ][' refresh_pattern' ]
67
+ break
68
+ endif
69
+ endfor
70
+ let l: curpos = getcurpos ()
71
+ let l: left = strpart (getline (l: curpos [1 ]), 0 , l: curpos [2 ]-1 )
72
+ let s: completion [' startcol' ] = matchstrpos (l: left , l: refresh_pattern )[1 ]
73
+ if s: completion [' startcol' ] == -1
74
+ let s: completion [' startcol' ] = strlen (l: left )
75
+ endif
76
+
61
77
call s: send_completion_request (l: info )
62
78
63
79
if g: lsp_async_completion
@@ -76,24 +92,9 @@ function! lsp#omni#complete(findstart, base) abort
76
92
endif
77
93
endfunction
78
94
79
- function ! s: get_insertion_point (item, current_line, typed_pattern) abort
80
- let l: insert_start = -1
81
-
82
- let l: user_data = lsp#omni#get_managed_user_data_from_completed_item (a: item )
83
- if has_key (l: user_data , ' completion_item' ) && has_key (l: user_data [' completion_item' ], ' textEdit' )
84
- let l: insert_start = l: user_data [' completion_item' ][' textEdit' ][' range' ][' start' ][' character' ]
85
- endif
86
-
87
- if l: insert_start >= 0
88
- return l: insert_start
89
- else
90
- return match (a: current_line , a: typed_pattern )
91
- endif
92
- endfunction
93
-
94
95
function ! s: get_filter_label (item) abort
95
96
let l: user_data = lsp#omni#get_managed_user_data_from_completed_item (a: item )
96
- if has_key (l: user_data , ' completion_item' ) && has_key (l: user_data [' completion_item' ], ' filterText' )
97
+ if has_key (l: user_data , ' completion_item' ) && has_key (l: user_data [' completion_item' ], ' filterText' ) && ! empty ( l: user_data [ ' completion_item ' ][ ' filterText ' ])
97
98
return trim (l: user_data [' completion_item' ][' filterText' ])
98
99
endif
99
100
return trim (a: item [' word' ])
@@ -124,13 +125,9 @@ function! s:display_completions(timer, info) abort
124
125
let l: server_name = a: info [' server_names' ][0 ]
125
126
let l: server_info = lsp#get_server_info (l: server_name )
126
127
127
- let l: typed_pattern = has_key (l: server_info , ' config' ) && has_key (l: server_info [' config' ], ' typed_pattern' ) ? l: server_info [' config' ][' typed_pattern' ] : ' \k*$'
128
128
let l: current_line = strpart (getline (' .' ), 0 , col (' .' ) - 1 )
129
-
130
- let s: start_pos = min (map (copy (s: completion [' matches' ]), {_, item - > s: get_insertion_point (item, l: current_line , l: typed_pattern ) }))
131
-
132
129
let l: filter = has_key (l: server_info , ' config' ) && has_key (l: server_info [' config' ], ' filter' ) ? l: server_info [' config' ][' filter' ] : { ' name' : ' prefix' }
133
- let l: last_typed_word = strpart (l: current_line , s: start_pos )
130
+ let l: last_typed_word = strpart (l: current_line , s: completion [ ' startcol ' ] )
134
131
135
132
if l: filter [' name' ] == ? ' prefix'
136
133
let s: completion [' matches' ] = filter (s: completion [' matches' ], {_, item - > s: prefix_filter (item, l: last_typed_word )})
@@ -141,7 +138,7 @@ function! s:display_completions(timer, info) abort
141
138
let s: completion [' status' ] = ' '
142
139
143
140
if mode () is # ' i'
144
- call complete (s: start_pos + 1 , s: completion [' matches' ])
141
+ call complete (s: completion [ ' startcol ' ] + 1 , s: completion [' matches' ])
145
142
endif
146
143
endfunction
147
144
0 commit comments