mirror of
https://github.com/prabirshrestha/vim-lsp.git
synced 2025-12-14 20:35:59 +01:00
Add an option to fixup vim popup with conceal problems (#1376)
* Fix vim's popup and conceals * Add lsp_preview_fixup_conceal * Fix CI
This commit is contained in:
@@ -83,13 +83,17 @@ function! s:show_floating_window(event, managed_user_data) abort
|
||||
let l:detail = s:MarkupContent.normalize({
|
||||
\ 'language': &filetype,
|
||||
\ 'value': l:completion_item['detail'],
|
||||
\ }, {
|
||||
\ 'compact': !g:lsp_preview_fixup_conceal
|
||||
\ })
|
||||
let l:contents += [l:detail]
|
||||
endif
|
||||
endif
|
||||
|
||||
" Add documentation filed if provided.
|
||||
let l:documentation = s:MarkupContent.normalize(get(l:completion_item, 'documentation', ''))
|
||||
let l:documentation = s:MarkupContent.normalize(get(l:completion_item, 'documentation', ''), {
|
||||
\ 'compact': !g:lsp_preview_fixup_conceal
|
||||
\ })
|
||||
if !empty(l:documentation)
|
||||
let l:contents += [l:documentation]
|
||||
endif
|
||||
|
||||
@@ -189,13 +189,17 @@ function! s:get_contents(contents) abort
|
||||
if has_key(a:contents, 'value')
|
||||
if has_key(a:contents, 'kind')
|
||||
if a:contents['kind'] ==? 'markdown'
|
||||
let l:detail = s:MarkupContent.normalize(a:contents['value'])
|
||||
let l:detail = s:MarkupContent.normalize(a:contents['value'], {
|
||||
\ 'compact': !g:lsp_preview_fixup_conceal
|
||||
\ })
|
||||
return [l:detail]
|
||||
else
|
||||
return [a:contents['value']]
|
||||
endif
|
||||
elseif has_key(a:contents, 'language')
|
||||
let l:detail = s:MarkupContent.normalize(a:contents)
|
||||
let l:detail = s:MarkupContent.normalize(a:contents, {
|
||||
\ 'compact': !g:lsp_preview_fixup_conceal
|
||||
\ })
|
||||
return [l:detail]
|
||||
else
|
||||
return ''
|
||||
|
||||
@@ -434,7 +434,9 @@ function! lsp#ui#vim#output#append(data, lines, syntax_lines) abort
|
||||
elseif type(a:data) ==# type({}) && has_key(a:data, 'kind')
|
||||
if a:data.kind ==? 'markdown'
|
||||
call s:import_modules()
|
||||
let l:detail = s:MarkupContent.normalize(a:data.value)
|
||||
let l:detail = s:MarkupContent.normalize(a:data.value, {
|
||||
\ 'compact': !g:lsp_preview_fixup_conceal
|
||||
\ })
|
||||
call extend(a:lines, s:Text.split_by_eol(l:detail))
|
||||
else
|
||||
call extend(a:lines, split(s:escape_string_for_display(a:data.value), '\n', v:true))
|
||||
|
||||
@@ -36,27 +36,31 @@ function! s:normalize(markup_content, ...) abort
|
||||
elseif type(a:markup_content) == type({})
|
||||
let l:normalized = a:markup_content.value
|
||||
if has_key(a:markup_content, 'language')
|
||||
let l:normalized = '```' . a:markup_content.language . ' ' . l:normalized . ' ```'
|
||||
let l:normalized = join([
|
||||
\ '```' . a:markup_content.language,
|
||||
\ l:normalized,
|
||||
\ '```'
|
||||
\ ], "\n")
|
||||
endif
|
||||
endif
|
||||
if l:option.compact
|
||||
return s:_compact(l:normalized)
|
||||
endif
|
||||
let l:normalized = s:Text.normalize_eol(l:normalized)
|
||||
let l:normalized = s:_format(l:normalized, l:option.compact)
|
||||
return l:normalized
|
||||
endfunction
|
||||
|
||||
"
|
||||
" _compact
|
||||
" _format
|
||||
"
|
||||
function! s:_compact(string) abort
|
||||
" normalize eol.
|
||||
let l:string = s:Text.normalize_eol(a:string)
|
||||
|
||||
let l:string = substitute(l:string, "\\%(\\s\\|\n\\)*```\\s*\\(\\w\\+\\)\\%(\\s\\|\n\\)\\+", "\n\n```\\1 ", 'g')
|
||||
let l:string = substitute(l:string, "\\%(\\s\\|\n\\)\\+```\\%(\\s*\\%(\\%$\\|\n\\)\\)\\+", " ```\n\n", 'g')
|
||||
function! s:_format(string, compact) abort
|
||||
let l:string = a:string
|
||||
if a:compact
|
||||
let l:string = substitute(l:string, "\\%(\\s\\|\n\\)*```\\s*\\(\\w\\+\\)\\%(\\s\\|\n\\)\\+", "\n\n```\\1 ", 'g')
|
||||
let l:string = substitute(l:string, "\\%(\\s\\|\n\\)\\+```\\%(\\s*\\%(\\%$\\|\n\\)\\)\\+", " ```\n\n", 'g')
|
||||
else
|
||||
let l:string = substitute(l:string, "```\n\\zs\\%(\\s\\|\n\\)\\+", "", 'g')
|
||||
endif
|
||||
let l:string = substitute(l:string, "\\%^\\%(\\s\\|\n\\)*", '', 'g')
|
||||
let l:string = substitute(l:string, "\\%(\\s\\|\n\\)*\\%$", '', 'g')
|
||||
|
||||
return l:string
|
||||
endfunction
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
function! s:_SID() abort
|
||||
return matchstr(expand('<sfile>'), '<SNR>\zs\d\+\ze__SID$')
|
||||
endfunction
|
||||
execute join(['function! vital#_lsp#VS#Vim#Buffer#import() abort', printf("return map({'get_line_count': '', 'do': '', 'create': '', 'pseudo': '', 'ensure': '', 'load': ''}, \"vital#_lsp#function('<SNR>%s_' . v:key)\")", s:_SID()), 'endfunction'], "\n")
|
||||
execute join(['function! vital#_lsp#VS#Vim#Buffer#import() abort', printf("return map({'add': '', 'do': '', 'create': '', 'get_line_count': '', 'pseudo': '', 'ensure': '', 'load': ''}, \"vital#_lsp#function('<SNR>%s_' . v:key)\")", s:_SID()), 'endfunction'], "\n")
|
||||
delfunction s:_SID
|
||||
" ___vital___
|
||||
let s:Do = { -> {} }
|
||||
@@ -51,11 +51,25 @@ function! s:ensure(expr) abort
|
||||
if type(a:expr) == type(0)
|
||||
throw printf('VS.Vim.Buffer: `%s` is not valid expr.', a:expr)
|
||||
endif
|
||||
badd `=a:expr`
|
||||
call s:add(a:expr)
|
||||
endif
|
||||
return bufnr(a:expr)
|
||||
endfunction
|
||||
|
||||
"
|
||||
" add
|
||||
"
|
||||
if exists('*bufadd')
|
||||
function! s:add(name) abort
|
||||
let l:bufnr = bufadd(a:name)
|
||||
call setbufvar(l:bufnr, '&buflisted', 1)
|
||||
endfunction
|
||||
else
|
||||
function! s:add(name) abort
|
||||
badd `=a:name`
|
||||
endfunction
|
||||
endif
|
||||
|
||||
"
|
||||
" load
|
||||
"
|
||||
|
||||
@@ -74,7 +74,7 @@ function! s:apply(...) abort
|
||||
\ l:filetype_group
|
||||
\ )
|
||||
catch /.*/
|
||||
unsilent echomsg string({ 'exception': v:exception, 'throwpoint': v:throwpoint })
|
||||
unsilent echomsg printf('Fail to apply "syntax/%s.vim". Add "let g:markdown_fenced_languages = ["%s=$FILETYPE"]" to enable syntax', l:filetype, l:filetype)
|
||||
endtry
|
||||
endfor
|
||||
endfunction
|
||||
|
||||
@@ -106,7 +106,7 @@ function! s:scroll(winid, topline) abort
|
||||
function! l:ctx.callback(winid, topline) abort
|
||||
let l:wininfo = s:info(a:winid)
|
||||
let l:topline = a:topline
|
||||
let l:topline = min([l:topline, line('$') - l:wininfo.height + 3])
|
||||
let l:topline = min([l:topline, line('$') - l:wininfo.height + 1])
|
||||
let l:topline = max([l:topline, 1])
|
||||
|
||||
if l:topline == l:wininfo.topline
|
||||
|
||||
@@ -198,7 +198,8 @@ endfunction
|
||||
" @param {number} args.col 0-based indexing
|
||||
" @param {number} args.width
|
||||
" @param {number} args.height
|
||||
" @param {boolean?} args.border
|
||||
" @param {boolean|[string]?} args.border - boolean, or list of characters
|
||||
" clockwise from top-left (same as nvim_open_win() in neovim)
|
||||
" @param {number?} args.topline
|
||||
" @param {string?} args.origin - topleft/topright/botleft/botright
|
||||
"
|
||||
@@ -450,11 +451,14 @@ endfunction
|
||||
|
||||
if has('nvim')
|
||||
function! s:_resolve_border(style) abort
|
||||
if !empty(get(a:style, 'border', v:null))
|
||||
if &ambiwidth ==# 'single'
|
||||
let a:style.border = ['┌', '─', '┐', '│', '┘', '─', '└', '│']
|
||||
else
|
||||
let a:style.border = ['+', '-', '+', '|', '+', '-', '+', '|']
|
||||
let l:border = get(a:style, 'border', v:null)
|
||||
if !empty(l:border)
|
||||
if type(l:border) != type([])
|
||||
if &ambiwidth ==# 'single'
|
||||
let a:style.border = ['┌', '─', '┐', '│', '┘', '─', '└', '│']
|
||||
else
|
||||
let a:style.border = ['+', '-', '+', '|', '+', '-', '+', '|']
|
||||
endif
|
||||
endif
|
||||
elseif has_key(a:style, 'border')
|
||||
unlet a:style.border
|
||||
@@ -463,11 +467,28 @@ if has('nvim')
|
||||
endfunction
|
||||
else
|
||||
function! s:_resolve_border(style) abort
|
||||
let l:border = get(a:style, 'border', v:null)
|
||||
if !empty(get(a:style, 'border', v:null))
|
||||
if &ambiwidth ==# 'single'
|
||||
let a:style.border = ['─', '│', '─', '│', '┌', '┐', '┘', '└']
|
||||
if type(l:border) != type([])
|
||||
if &ambiwidth ==# 'single'
|
||||
let a:style.border = ['─', '│', '─', '│', '┌', '┐', '┘', '└']
|
||||
else
|
||||
let a:style.border = ['-', '|', '-', '|', '+', '+', '+', '+']
|
||||
endif
|
||||
else
|
||||
let a:style.border = ['-', '|', '-', '|', '+', '+', '+', '+']
|
||||
" Emulate nvim behavior for lists of 1/2/4 elements
|
||||
let l:topleft = l:border[0]
|
||||
let l:top = get(l:border, 1, l:topleft)
|
||||
let l:topright = get(l:border, 2, l:topleft)
|
||||
let l:right = get(l:border, 3, l:top)
|
||||
let l:bottomright = get(l:border, 4, l:topleft)
|
||||
let l:bottom = get(l:border, 5, l:top)
|
||||
let l:bottomleft = get(l:border, 6, l:topright)
|
||||
let l:left = get(l:border, 7, l:right)
|
||||
let a:style.border = [
|
||||
\ l:top, l:right, l:bottom, l:left,
|
||||
\ l:topleft, l:topright, l:bottomright, l:bottomleft,
|
||||
\ ]
|
||||
endif
|
||||
elseif has_key(a:style, 'border')
|
||||
unlet a:style.border
|
||||
|
||||
@@ -190,6 +190,8 @@ function! s:_format_throwpoint(throwpoint) abort
|
||||
return join(funcs, "\n")
|
||||
endfunction
|
||||
|
||||
" @vimlint(EVL102, 1, l:_)
|
||||
" @vimlint(EVL102, 1, l:__)
|
||||
function! s:_get_func_info(name) abort
|
||||
let name = a:name
|
||||
if a:name =~# '^\d\+$' " is anonymous-function
|
||||
@@ -213,6 +215,8 @@ function! s:_get_func_info(name) abort
|
||||
\ 'attrs': filter(['dict', 'abort', 'range', 'closure'], 'signature =~# (").*" . v:val)'),
|
||||
\ }
|
||||
endfunction
|
||||
" @vimlint(EVL102, 0, l:__)
|
||||
" @vimlint(EVL102, 0, l:_)
|
||||
|
||||
" s:_get_module() returns module object wihch has all script local functions.
|
||||
function! s:_get_module(name) abort dict
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
lsp
|
||||
2755f0c8fbd3442bcb7f567832e4d1455b57f9a2
|
||||
b1e91b41f5028d65fa3d31a425ff21591d5d957f
|
||||
|
||||
VS.LSP.MarkupContent
|
||||
VS.Vim.Window.FloatingWindow
|
||||
|
||||
Reference in New Issue
Block a user