Files
vim-lsp-mirror/syntax/lsp-hover.vim
Maxim Kim f36410202e Resolve LspHover Conceal Issue (#720)
1. Do not clear Conceal highlight group
2. Do not highlight concealed chars by using syntax region.
   This fixes different background of concealed cchar and popup window
   original solution had.

See #719 for details.
2020-02-14 11:31:56 +01:00

51 lines
1.7 KiB
VimL

" Converts a markdown language (```foo) to the corresponding Vim filetype
function! s:get_vim_filetype(lang_markdown) abort
" If the user hasn't customised markdown fenced languages, just return the
" markdown language
if !exists('g:markdown_fenced_languages')
return a:lang_markdown
endif
" Otherwise, check if it has an entry for the given language
for l:type in g:markdown_fenced_languages
let l:vim_type = substitute(matchstr(l:type, '[^=]*$'), '\..*', '', '')
let l:markdown_type = matchstr(l:type, '[^=]*')
if l:markdown_type ==# a:lang_markdown
" Found entry
return l:vim_type
endif
endfor
" Not found
return a:lang_markdown
endfunction
function! s:do_highlight() abort
if exists('b:lsp_syntax_highlights')
for l:entry in b:lsp_syntax_highlights
let l:line = l:entry['line']
let l:lang = l:entry['language']
let l:ft = s:get_vim_filetype(l:lang)
execute printf('syntax match markdownHighlight%s contains=@markdownHighlight%s /^\%%%sl.*$/', l:ft, l:ft, l:line)
endfor
endif
endfunction
function! s:cleanup_markdown() abort
" Don't highlight _ in words
syntax match markdownError "\w\@<=\w\@="
" Conceal escaped characters
" Workaround for: https://github.com/palantir/python-language-server/issues/386
if has('conceal')
for l:escaped_char in ['`', '*', '_', '{', '}', '(', ')', '<', '>', '#', '+', '.', '!', '-']
execute printf('syntax region vimLspMarkdownEscape matchgroup=Conceal start="\\\ze[%s]" end="[%s]\zs" concealends', l:escaped_char, l:escaped_char)
endfor
end
endfunction
call s:do_highlight()
call s:cleanup_markdown()