From eab83e4b9b0c6220d07019364a97ed4db16e46d8 Mon Sep 17 00:00:00 2001 From: Cosson2017 <20379044@Cosson2017.noreply.github.com> Date: Sat, 16 Mar 2019 16:37:52 +0800 Subject: [PATCH 01/12] add float win --- autoload/lsp/ui/vim/float.vim | 56 +++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 autoload/lsp/ui/vim/float.vim diff --git a/autoload/lsp/ui/vim/float.vim b/autoload/lsp/ui/vim/float.vim new file mode 100644 index 000000000..00953e4fd --- /dev/null +++ b/autoload/lsp/ui/vim/float.vim @@ -0,0 +1,56 @@ +"""""""""""""""""""""""""""""""""""""""""" +" LICENSE: +" Author: +" Version: +" CreateTime: 2019-03-16 16:36:16 +" LastUpdate: 2019-03-16 16:36:16 +" Desc: float win +"""""""""""""""""""""""""""""""""""""""""" + +if exists("s:is_load") + finish +endif +let s:is_load = 1 + +let s:float_win = 0 +let s:curbuf = 0 + +function! lsp#ui#vim#float#float_open(data) + if s:curbuf ==# 0 + let s:curbuf = nvim_create_buf(v:false, v:true) + endif + call nvim_buf_set_lines(s:curbuf, 0, -1, v:true, a:data) + call s:open_float_win() +endfunction + +function! s:open_float_win() + let l:ww = winwidth('.') " win width + let l:fw = l:ww / 2 "float win width + let l:wh = winheight('.') " win height + let l:fh = l:wh / 2 " float win height + + let l:cline = winline() " cursor win line + let l:fline = 0 " float win start line + if l:cline <= l:fh + let l:fline = l:cline + else + let l:fline = l:cline - l:fh - 1 + endif + + let l:ccol = wincol() " cursor win col + let l:fcol = 0 " float won start col + if l:ccol <= l:fw + let l:fcol = l:ccol + else + let l:fcol = l:ccol - l:fw - 1 + endif + + let l:opts = {'relative': 'win', 'col': l:fcol, 'row': l:fline, 'anchor': 'NW'} + let s:float_win = nvim_open_win(s:curbuf, v:true, l:fw, l:fh, l:opts) + map :call float_close() +endfunction + +function! s:float_close() + call nvim_win_close(s:float_win, 1) + unmap +endfunction From 944b56d080f6a38344e2f71ad414aa48bbd3460d Mon Sep 17 00:00:00 2001 From: Cosson2017 <20379044@Cosson2017.noreply.github.com> Date: Mon, 18 Mar 2019 12:20:36 +0800 Subject: [PATCH 02/12] hover float --- autoload/lsp/ui/vim/float.vim | 43 +++++++++++++++++++++++++++++++---- autoload/lsp/ui/vim/hover.vim | 6 ++++- doc/vim-lsp.txt | 7 ++++++ plugin/lsp.vim | 1 + 4 files changed, 51 insertions(+), 6 deletions(-) diff --git a/autoload/lsp/ui/vim/float.vim b/autoload/lsp/ui/vim/float.vim index 00953e4fd..5911b5358 100644 --- a/autoload/lsp/ui/vim/float.vim +++ b/autoload/lsp/ui/vim/float.vim @@ -14,15 +14,48 @@ let s:is_load = 1 let s:float_win = 0 let s:curbuf = 0 +let s:data_buf = [] + +function! s:reset() + let s:data_buf = [] + call nvim_buf_set_option(s:curbuf, 'modifiable', v:true) +endfunction function! lsp#ui#vim#float#float_open(data) if s:curbuf ==# 0 let s:curbuf = nvim_create_buf(v:false, v:true) endif - call nvim_buf_set_lines(s:curbuf, 0, -1, v:true, a:data) + call s:reset() + call s:convert_to_data_buf(a:data) + call nvim_buf_set_lines(s:curbuf, 0, -1, v:true, s:data_buf) + call nvim_buf_set_option(s:curbuf, 'modifiable', v:false) call s:open_float_win() endfunction +function! s:convert_to_data_buf(data) + if type(a:data) == type([]) + for l:entry in a:data + call s:convert_to_data_buf(entry) + endfor + + return + elseif type(a:data) == type('') + call add(s:data_buf, a:data) + + return + elseif type(a:data) == type({}) && has_key(a:data, 'language') + call add(s:data_buf, '```'.a:data.language) + call add(s:data_buf, a:data.value) + call add(s:data_buf, '```') + + return + elseif type(a:data) == type({}) && has_key(a:data, 'kind') + call add(s:data_buf, a:data.value) + + return + endif +endfunction + function! s:open_float_win() let l:ww = winwidth('.') " win width let l:fw = l:ww / 2 "float win width @@ -31,7 +64,7 @@ function! s:open_float_win() let l:cline = winline() " cursor win line let l:fline = 0 " float win start line - if l:cline <= l:fh + if l:cline + l:fh <= l:wh let l:fline = l:cline else let l:fline = l:cline - l:fh - 1 @@ -39,10 +72,10 @@ function! s:open_float_win() let l:ccol = wincol() " cursor win col let l:fcol = 0 " float won start col - if l:ccol <= l:fw - let l:fcol = l:ccol + if l:ccol + l:fw <= l:ww + let l:fcol = l:ccol - 1 else - let l:fcol = l:ccol - l:fw - 1 + let l:fcol = l:ccol - l:fw endif let l:opts = {'relative': 'win', 'col': l:fcol, 'row': l:fline, 'anchor': 'NW'} diff --git a/autoload/lsp/ui/vim/hover.vim b/autoload/lsp/ui/vim/hover.vim index 4166d7783..a41f1c96e 100644 --- a/autoload/lsp/ui/vim/hover.vim +++ b/autoload/lsp/ui/vim/hover.vim @@ -35,7 +35,11 @@ function! s:handle_hover(server, data) abort endif if !empty(a:data['response']['result']) && !empty(a:data['response']['result']['contents']) - call lsp#ui#vim#output#preview(a:data['response']['result']['contents']) + if g:lsp_hover_win == "preview" + call lsp#ui#vim#output#preview(a:data['response']['result']['contents']) + else + call lsp#ui#vim#float#float_open(a:data['response']['result']['contents']) + endif return else call lsp#utils#error('No hover information found') diff --git a/doc/vim-lsp.txt b/doc/vim-lsp.txt index bf5a6a258..2e01b31f8 100644 --- a/doc/vim-lsp.txt +++ b/doc/vim-lsp.txt @@ -16,6 +16,7 @@ CONTENTS *vim-lsp-contents* g:lsp_insert_text_enabled |g:lsp_insert_text_enabled| g:lsp_signs_enabled |g:lsp_signs_enabled| g:lsp_use_event_queue |g:lsp_use_event_queue| + g:lsp_hover_win |g:lsp_hover_win| Functions |vim-lsp-functions| enable |vim-lsp-enable| disable |vim-lsp-disable| @@ -121,6 +122,12 @@ g:lsp_auto_enable *g:lsp_auto_enable* let g:lsp_auto_enable = 1 let g:lsp_auto_enable = 0 +g:lsp_hover_win *g:lsp_hover_win* + Type: String + Default: "float" + + Indicates hover info show position.Opt: "preview" | "float" + g:lsp_preview_keep_focus *g:lsp_preview_keep_focus* Type: |Number| Default: `1` diff --git a/plugin/lsp.vim b/plugin/lsp.vim index 30a92b227..5812607ce 100644 --- a/plugin/lsp.vim +++ b/plugin/lsp.vim @@ -21,6 +21,7 @@ let g:lsp_next_sign_id = get(g:, 'lsp_next_sign_id', 6999) let g:lsp_preview_keep_focus = get(g:, 'lsp_preview_keep_focus', 1) let g:lsp_use_event_queue = get(g:, 'lsp_use_event_queue', has('nvim') || has('patch-8.1.0889')) let g:lsp_insert_text_enabled= get(g:, 'lsp_insert_text_enabled', 1) +let g:lsp_hover_win = get(g:, "hover_win", "float") if g:lsp_auto_enable augroup lsp_auto_enable From efd1be4ba62fde6b68a2e2ac7a9f31e3d2de17a7 Mon Sep 17 00:00:00 2001 From: Cosson2017 <20379044@Cosson2017.noreply.github.com> Date: Mon, 18 Mar 2019 12:31:13 +0800 Subject: [PATCH 03/12] add has nvim-0.4.0 --- autoload/lsp/ui/vim/hover.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/autoload/lsp/ui/vim/hover.vim b/autoload/lsp/ui/vim/hover.vim index a41f1c96e..5ca16f9f5 100644 --- a/autoload/lsp/ui/vim/hover.vim +++ b/autoload/lsp/ui/vim/hover.vim @@ -35,7 +35,7 @@ function! s:handle_hover(server, data) abort endif if !empty(a:data['response']['result']) && !empty(a:data['response']['result']['contents']) - if g:lsp_hover_win == "preview" + if g:lsp_hover_win == "preview" || !has("nvim-0.4.0") call lsp#ui#vim#output#preview(a:data['response']['result']['contents']) else call lsp#ui#vim#float#float_open(a:data['response']['result']['contents']) From b35ed42bb8d281b16328e35feb78834655677f64 Mon Sep 17 00:00:00 2001 From: Cosson2017 <20379044@Cosson2017.noreply.github.com> Date: Mon, 18 Mar 2019 13:00:25 +0800 Subject: [PATCH 04/12] adjust nvim_open_win argument --- autoload/lsp/ui/vim/float.vim | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/autoload/lsp/ui/vim/float.vim b/autoload/lsp/ui/vim/float.vim index 5911b5358..7280e805f 100644 --- a/autoload/lsp/ui/vim/float.vim +++ b/autoload/lsp/ui/vim/float.vim @@ -78,8 +78,9 @@ function! s:open_float_win() let l:fcol = l:ccol - l:fw endif - let l:opts = {'relative': 'win', 'col': l:fcol, 'row': l:fline, 'anchor': 'NW'} - let s:float_win = nvim_open_win(s:curbuf, v:true, l:fw, l:fh, l:opts) + let l:opts = {'relative': 'win', 'col': l:fcol, 'row': l:fline, 'height': l:fh, 'width': l:fw, 'anchor': 'NW'} + "let s:float_win = nvim_open_win(s:curbuf, v:true, l:fw, l:fh, l:opts) + let s:float_win = nvim_open_win(s:curbuf, v:true, l:opts) map :call float_close() endfunction From 4a32d43c7d3b83266e6262e742083bd4500d467b Mon Sep 17 00:00:00 2001 From: Cosson2017 <20379044@Cosson2017.noreply.github.com> Date: Mon, 18 Mar 2019 13:33:22 +0800 Subject: [PATCH 05/12] Remove special characters --- autoload/lsp/ui/vim/float.vim | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/autoload/lsp/ui/vim/float.vim b/autoload/lsp/ui/vim/float.vim index 7280e805f..c9b7bbdfe 100644 --- a/autoload/lsp/ui/vim/float.vim +++ b/autoload/lsp/ui/vim/float.vim @@ -21,6 +21,10 @@ function! s:reset() call nvim_buf_set_option(s:curbuf, 'modifiable', v:true) endfunction +function! s:remove_spec_char(data) abort + return substitute(a:data, '\%x00', "", "g") +endfunction + function! lsp#ui#vim#float#float_open(data) if s:curbuf ==# 0 let s:curbuf = nvim_create_buf(v:false, v:true) @@ -40,17 +44,17 @@ function! s:convert_to_data_buf(data) return elseif type(a:data) == type('') - call add(s:data_buf, a:data) + call add(s:data_buf, s:remove_spec_char(a:data)) return elseif type(a:data) == type({}) && has_key(a:data, 'language') call add(s:data_buf, '```'.a:data.language) - call add(s:data_buf, a:data.value) + call add(s:data_buf, s:remove_spec_char(a:data.value)) call add(s:data_buf, '```') return elseif type(a:data) == type({}) && has_key(a:data, 'kind') - call add(s:data_buf, a:data.value) + call add(s:data_buf, s:remove_spec_char(a:data.value)) return endif From 96a9c3db1cab675d8895ca527c68876bfbac6b40 Mon Sep 17 00:00:00 2001 From: Cosson2017 <20379044@Cosson2017.noreply.github.com> Date: Mon, 18 Mar 2019 14:26:09 +0800 Subject: [PATCH 06/12] \0 -> ' ' --- autoload/lsp/ui/vim/float.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/autoload/lsp/ui/vim/float.vim b/autoload/lsp/ui/vim/float.vim index c9b7bbdfe..1cdb77c5e 100644 --- a/autoload/lsp/ui/vim/float.vim +++ b/autoload/lsp/ui/vim/float.vim @@ -22,7 +22,7 @@ function! s:reset() endfunction function! s:remove_spec_char(data) abort - return substitute(a:data, '\%x00', "", "g") + return substitute(a:data, '\%x00', " ", "g") endfunction function! lsp#ui#vim#float#float_open(data) From c554bfbac623b7c0901dfc77c3875872c7306021 Mon Sep 17 00:00:00 2001 From: Cosson2017 <20379044@Cosson2017.noreply.github.com> Date: Mon, 18 Mar 2019 17:11:24 +0800 Subject: [PATCH 07/12] update float position calc --- autoload/lsp/ui/vim/float.vim | 87 +++++++++++++++++++++++++---------- 1 file changed, 63 insertions(+), 24 deletions(-) diff --git a/autoload/lsp/ui/vim/float.vim b/autoload/lsp/ui/vim/float.vim index 1cdb77c5e..ca50333fc 100644 --- a/autoload/lsp/ui/vim/float.vim +++ b/autoload/lsp/ui/vim/float.vim @@ -16,11 +16,70 @@ let s:float_win = 0 let s:curbuf = 0 let s:data_buf = [] +let s:float_width = 0 " float window height +let s:float_height = 0 + function! s:reset() let s:data_buf = [] call nvim_buf_set_option(s:curbuf, 'modifiable', v:true) endfunction +function! s:set_buf_option() + call nvim_buf_set_option(s:curbuf, 'modifiable', v:false) +endfunction + +function! s:set_win_option() + call nvim_win_set_option(s:float_win, 'number', v:false) + call nvim_win_set_option(s:float_win, 'relativenumber', v:false) +endfunction + +function! s:float_win_position() abort + let l:win_height = winheight('.') + let l:win_width = winwidth('.') + let l:max_text_width = l:win_width + if l:max_text_width > 12 + let l:max_text_width = l:max_text_width - 6 + endif + + let l:max_width = 0 + let l:line_count = 0 + + for l:line in s:data_buf + let l:line_count = l:line_count + 1 + let l:len = strwidth(line) + if l:len < l:max_text_width + if l:len > l:max_width + let l:max_width = l:len + endif + else + let l:max_width = l:max_text_width + let l:calc_count = l:len / l:max_width + let l:line_count = l:line_count + l:calc_count + endif + endfor + + let l:cline = winline() + let l:ccol = wincol() + + if l:ccol + l:max_width + 1 <= l:win_width + let l:ccol = l:ccol - 1 + else + let l:ccol = l:win_width - l:max_width + endif + + if l:cline + l:line_count > l:win_height + if l:cline > l:win_height / 2 + let l:line_count = min([l:line_count, l:cline - 1]) + let l:cline = l:cline - l:line_count - 1 + else + let l:line_count = l:win_height - l:cline + endif + endif + + return {'col': l:ccol, 'row': l:cline, 'height': l:line_count, 'width': l:max_width} + +endfunction + function! s:remove_spec_char(data) abort return substitute(a:data, '\%x00', " ", "g") endfunction @@ -32,7 +91,7 @@ function! lsp#ui#vim#float#float_open(data) call s:reset() call s:convert_to_data_buf(a:data) call nvim_buf_set_lines(s:curbuf, 0, -1, v:true, s:data_buf) - call nvim_buf_set_option(s:curbuf, 'modifiable', v:false) + call s:set_buf_option() call s:open_float_win() endfunction @@ -61,31 +120,11 @@ function! s:convert_to_data_buf(data) endfunction function! s:open_float_win() - let l:ww = winwidth('.') " win width - let l:fw = l:ww / 2 "float win width - let l:wh = winheight('.') " win height - let l:fh = l:wh / 2 " float win height - - let l:cline = winline() " cursor win line - let l:fline = 0 " float win start line - if l:cline + l:fh <= l:wh - let l:fline = l:cline - else - let l:fline = l:cline - l:fh - 1 - endif - - let l:ccol = wincol() " cursor win col - let l:fcol = 0 " float won start col - if l:ccol + l:fw <= l:ww - let l:fcol = l:ccol - 1 - else - let l:fcol = l:ccol - l:fw - endif - - let l:opts = {'relative': 'win', 'col': l:fcol, 'row': l:fline, 'height': l:fh, 'width': l:fw, 'anchor': 'NW'} - "let s:float_win = nvim_open_win(s:curbuf, v:true, l:fw, l:fh, l:opts) + let l:opts = s:float_win_position() + call extend(l:opts, {'relative': 'win', 'anchor': 'NW'}) let s:float_win = nvim_open_win(s:curbuf, v:true, l:opts) map :call float_close() + call s:set_win_option() endfunction function! s:float_close() From 9daf69f74fc7e2f0253a0b7169e7e04fc439d62a Mon Sep 17 00:00:00 2001 From: Cosson2017 <20379044@Cosson2017.noreply.github.com> Date: Tue, 19 Mar 2019 10:04:08 +0800 Subject: [PATCH 08/12] some opt --- autoload/lsp/ui/vim/float.vim | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/autoload/lsp/ui/vim/float.vim b/autoload/lsp/ui/vim/float.vim index ca50333fc..b2a394f3f 100644 --- a/autoload/lsp/ui/vim/float.vim +++ b/autoload/lsp/ui/vim/float.vim @@ -38,7 +38,7 @@ function! s:float_win_position() abort let l:win_width = winwidth('.') let l:max_text_width = l:win_width if l:max_text_width > 12 - let l:max_text_width = l:max_text_width - 6 + let l:max_text_width = l:max_text_width - 3 endif let l:max_width = 0 @@ -81,7 +81,8 @@ function! s:float_win_position() abort endfunction function! s:remove_spec_char(data) abort - return substitute(a:data, '\%x00', " ", "g") + "return substitute(a:data, '\%x00', " ", "g") + return split(a:data, '\%x00') endfunction function! lsp#ui#vim#float#float_open(data) @@ -103,17 +104,17 @@ function! s:convert_to_data_buf(data) return elseif type(a:data) == type('') - call add(s:data_buf, s:remove_spec_char(a:data)) + call extend(s:data_buf, s:remove_spec_char(a:data)) return elseif type(a:data) == type({}) && has_key(a:data, 'language') call add(s:data_buf, '```'.a:data.language) - call add(s:data_buf, s:remove_spec_char(a:data.value)) + call extend(s:data_buf, s:remove_spec_char(a:data.value)) call add(s:data_buf, '```') return elseif type(a:data) == type({}) && has_key(a:data, 'kind') - call add(s:data_buf, s:remove_spec_char(a:data.value)) + call extend(s:data_buf, s:remove_spec_char(a:data.value)) return endif From f5e3605c327da65b453a66fd6f0c3f9990931d99 Mon Sep 17 00:00:00 2001 From: Cosson2017 <20379044@Cosson2017.noreply.github.com> Date: Thu, 21 Mar 2019 11:15:30 +0800 Subject: [PATCH 09/12] lsp_hover_win -> lsp_hover_ui type -> List --- autoload/lsp/ui/vim/float.vim | 1 - autoload/lsp/ui/vim/hover.vim | 18 ++++++++++++------ doc/vim-lsp.txt | 10 +++++----- plugin/lsp.vim | 2 +- 4 files changed, 18 insertions(+), 13 deletions(-) diff --git a/autoload/lsp/ui/vim/float.vim b/autoload/lsp/ui/vim/float.vim index b2a394f3f..728aa69cc 100644 --- a/autoload/lsp/ui/vim/float.vim +++ b/autoload/lsp/ui/vim/float.vim @@ -81,7 +81,6 @@ function! s:float_win_position() abort endfunction function! s:remove_spec_char(data) abort - "return substitute(a:data, '\%x00', " ", "g") return split(a:data, '\%x00') endfunction diff --git a/autoload/lsp/ui/vim/hover.vim b/autoload/lsp/ui/vim/hover.vim index 5ca16f9f5..df6c46397 100644 --- a/autoload/lsp/ui/vim/hover.vim +++ b/autoload/lsp/ui/vim/hover.vim @@ -35,12 +35,18 @@ function! s:handle_hover(server, data) abort endif if !empty(a:data['response']['result']) && !empty(a:data['response']['result']['contents']) - if g:lsp_hover_win == "preview" || !has("nvim-0.4.0") - call lsp#ui#vim#output#preview(a:data['response']['result']['contents']) - else - call lsp#ui#vim#float#float_open(a:data['response']['result']['contents']) - endif - return + for ui in g:lsp_hover_ui + if ui == "float" + if exists("*nvim_open_win") + call lsp#ui#vim#float#float_open(a:data['response']['result']['contents']) + return + endif + elseif ui == "preview" + call lsp#ui#vim#output#preview(a:data['response']['result']['contents']) + return + endif + endfor + call lsp#utils#error('Hover ui is not found') else call lsp#utils#error('No hover information found') endif diff --git a/doc/vim-lsp.txt b/doc/vim-lsp.txt index 2e01b31f8..64995a943 100644 --- a/doc/vim-lsp.txt +++ b/doc/vim-lsp.txt @@ -16,7 +16,7 @@ CONTENTS *vim-lsp-contents* g:lsp_insert_text_enabled |g:lsp_insert_text_enabled| g:lsp_signs_enabled |g:lsp_signs_enabled| g:lsp_use_event_queue |g:lsp_use_event_queue| - g:lsp_hover_win |g:lsp_hover_win| + g:lsp_hover_ui |g:lsp_hover_ui| Functions |vim-lsp-functions| enable |vim-lsp-enable| disable |vim-lsp-disable| @@ -122,11 +122,11 @@ g:lsp_auto_enable *g:lsp_auto_enable* let g:lsp_auto_enable = 1 let g:lsp_auto_enable = 0 -g:lsp_hover_win *g:lsp_hover_win* - Type: String - Default: "float" +g:lsp_hover_ui *g:lsp_hover_ui* + Type: List + Default: ["float", "preview"] - Indicates hover info show position.Opt: "preview" | "float" + Indicates hover info show ui g:lsp_preview_keep_focus *g:lsp_preview_keep_focus* Type: |Number| diff --git a/plugin/lsp.vim b/plugin/lsp.vim index 5812607ce..1104f7156 100644 --- a/plugin/lsp.vim +++ b/plugin/lsp.vim @@ -21,7 +21,7 @@ let g:lsp_next_sign_id = get(g:, 'lsp_next_sign_id', 6999) let g:lsp_preview_keep_focus = get(g:, 'lsp_preview_keep_focus', 1) let g:lsp_use_event_queue = get(g:, 'lsp_use_event_queue', has('nvim') || has('patch-8.1.0889')) let g:lsp_insert_text_enabled= get(g:, 'lsp_insert_text_enabled', 1) -let g:lsp_hover_win = get(g:, "hover_win", "float") +let g:lsp_hover_ui = get(g:, 'lsp_hover_ui', ['float', 'preview']) if g:lsp_auto_enable augroup lsp_auto_enable From f7af2c618bb63e0b8954daddfdb5d559f49fc025 Mon Sep 17 00:00:00 2001 From: Cosson2017 <20379044@Cosson2017.noreply.github.com> Date: Thu, 21 Mar 2019 11:19:15 +0800 Subject: [PATCH 10/12] fix indent --- autoload/lsp/ui/vim/float.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/autoload/lsp/ui/vim/float.vim b/autoload/lsp/ui/vim/float.vim index 728aa69cc..9b5dd3781 100644 --- a/autoload/lsp/ui/vim/float.vim +++ b/autoload/lsp/ui/vim/float.vim @@ -34,7 +34,7 @@ function! s:set_win_option() endfunction function! s:float_win_position() abort - let l:win_height = winheight('.') + let l:win_height = winheight('.') let l:win_width = winwidth('.') let l:max_text_width = l:win_width if l:max_text_width > 12 From 066cbb3c996dee1f06d409974666ba583ec700fa Mon Sep 17 00:00:00 2001 From: Cosson2017 <20379044@Cosson2017.noreply.github.com> Date: Thu, 21 Mar 2019 11:21:19 +0800 Subject: [PATCH 11/12] fix indent --- autoload/lsp/ui/vim/float.vim | 126 +++++++++++++++++----------------- 1 file changed, 63 insertions(+), 63 deletions(-) diff --git a/autoload/lsp/ui/vim/float.vim b/autoload/lsp/ui/vim/float.vim index 9b5dd3781..b92bb78c5 100644 --- a/autoload/lsp/ui/vim/float.vim +++ b/autoload/lsp/ui/vim/float.vim @@ -8,7 +8,7 @@ """""""""""""""""""""""""""""""""""""""""" if exists("s:is_load") - finish + finish endif let s:is_load = 1 @@ -20,79 +20,79 @@ let s:float_width = 0 " float window height let s:float_height = 0 function! s:reset() - let s:data_buf = [] - call nvim_buf_set_option(s:curbuf, 'modifiable', v:true) + let s:data_buf = [] + call nvim_buf_set_option(s:curbuf, 'modifiable', v:true) endfunction function! s:set_buf_option() - call nvim_buf_set_option(s:curbuf, 'modifiable', v:false) + call nvim_buf_set_option(s:curbuf, 'modifiable', v:false) endfunction function! s:set_win_option() - call nvim_win_set_option(s:float_win, 'number', v:false) - call nvim_win_set_option(s:float_win, 'relativenumber', v:false) + call nvim_win_set_option(s:float_win, 'number', v:false) + call nvim_win_set_option(s:float_win, 'relativenumber', v:false) endfunction function! s:float_win_position() abort let l:win_height = winheight('.') - let l:win_width = winwidth('.') - let l:max_text_width = l:win_width - if l:max_text_width > 12 - let l:max_text_width = l:max_text_width - 3 - endif - - let l:max_width = 0 - let l:line_count = 0 - - for l:line in s:data_buf - let l:line_count = l:line_count + 1 - let l:len = strwidth(line) - if l:len < l:max_text_width - if l:len > l:max_width - let l:max_width = l:len - endif - else - let l:max_width = l:max_text_width - let l:calc_count = l:len / l:max_width - let l:line_count = l:line_count + l:calc_count - endif - endfor - - let l:cline = winline() - let l:ccol = wincol() - - if l:ccol + l:max_width + 1 <= l:win_width - let l:ccol = l:ccol - 1 - else - let l:ccol = l:win_width - l:max_width - endif - - if l:cline + l:line_count > l:win_height - if l:cline > l:win_height / 2 - let l:line_count = min([l:line_count, l:cline - 1]) - let l:cline = l:cline - l:line_count - 1 - else - let l:line_count = l:win_height - l:cline - endif - endif - - return {'col': l:ccol, 'row': l:cline, 'height': l:line_count, 'width': l:max_width} + let l:win_width = winwidth('.') + let l:max_text_width = l:win_width + if l:max_text_width > 12 + let l:max_text_width = l:max_text_width - 3 + endif + + let l:max_width = 0 + let l:line_count = 0 + + for l:line in s:data_buf + let l:line_count = l:line_count + 1 + let l:len = strwidth(line) + if l:len < l:max_text_width + if l:len > l:max_width + let l:max_width = l:len + endif + else + let l:max_width = l:max_text_width + let l:calc_count = l:len / l:max_width + let l:line_count = l:line_count + l:calc_count + endif + endfor + + let l:cline = winline() + let l:ccol = wincol() + + if l:ccol + l:max_width + 1 <= l:win_width + let l:ccol = l:ccol - 1 + else + let l:ccol = l:win_width - l:max_width + endif + + if l:cline + l:line_count > l:win_height + if l:cline > l:win_height / 2 + let l:line_count = min([l:line_count, l:cline - 1]) + let l:cline = l:cline - l:line_count - 1 + else + let l:line_count = l:win_height - l:cline + endif + endif + + return {'col': l:ccol, 'row': l:cline, 'height': l:line_count, 'width': l:max_width} endfunction function! s:remove_spec_char(data) abort - return split(a:data, '\%x00') + return split(a:data, '\%x00') endfunction function! lsp#ui#vim#float#float_open(data) - if s:curbuf ==# 0 - let s:curbuf = nvim_create_buf(v:false, v:true) - endif - call s:reset() - call s:convert_to_data_buf(a:data) + if s:curbuf ==# 0 + let s:curbuf = nvim_create_buf(v:false, v:true) + endif + call s:reset() + call s:convert_to_data_buf(a:data) call nvim_buf_set_lines(s:curbuf, 0, -1, v:true, s:data_buf) - call s:set_buf_option() - call s:open_float_win() + call s:set_buf_option() + call s:open_float_win() endfunction function! s:convert_to_data_buf(data) @@ -103,7 +103,7 @@ function! s:convert_to_data_buf(data) return elseif type(a:data) == type('') - call extend(s:data_buf, s:remove_spec_char(a:data)) + call extend(s:data_buf, s:remove_spec_char(a:data)) return elseif type(a:data) == type({}) && has_key(a:data, 'language') @@ -120,14 +120,14 @@ function! s:convert_to_data_buf(data) endfunction function! s:open_float_win() - let l:opts = s:float_win_position() - call extend(l:opts, {'relative': 'win', 'anchor': 'NW'}) + let l:opts = s:float_win_position() + call extend(l:opts, {'relative': 'win', 'anchor': 'NW'}) let s:float_win = nvim_open_win(s:curbuf, v:true, l:opts) - map :call float_close() - call s:set_win_option() + map :call float_close() + call s:set_win_option() endfunction function! s:float_close() - call nvim_win_close(s:float_win, 1) - unmap + call nvim_win_close(s:float_win, 1) + unmap endfunction From f0d9738a86ae479ba20afadfb364e4d866410c07 Mon Sep 17 00:00:00 2001 From: Cosson2017 <20379044@Cosson2017.noreply.github.com> Date: Thu, 21 Mar 2019 11:23:14 +0800 Subject: [PATCH 12/12] fix indent --- autoload/lsp/ui/vim/hover.vim | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/autoload/lsp/ui/vim/hover.vim b/autoload/lsp/ui/vim/hover.vim index df6c46397..4dae562bd 100644 --- a/autoload/lsp/ui/vim/hover.vim +++ b/autoload/lsp/ui/vim/hover.vim @@ -35,17 +35,17 @@ function! s:handle_hover(server, data) abort endif if !empty(a:data['response']['result']) && !empty(a:data['response']['result']['contents']) - for ui in g:lsp_hover_ui - if ui == "float" - if exists("*nvim_open_win") - call lsp#ui#vim#float#float_open(a:data['response']['result']['contents']) - return - endif - elseif ui == "preview" - call lsp#ui#vim#output#preview(a:data['response']['result']['contents']) - return - endif - endfor + for ui in g:lsp_hover_ui + if ui == "float" + if exists("*nvim_open_win") + call lsp#ui#vim#float#float_open(a:data['response']['result']['contents']) + return + endif + elseif ui == "preview" + call lsp#ui#vim#output#preview(a:data['response']['result']['contents']) + return + endif + endfor call lsp#utils#error('Hover ui is not found') else call lsp#utils#error('No hover information found')