Skip to content

Commit

Permalink
Markdown is not applied in the preview window. Fixes #359
Browse files Browse the repository at this point in the history
  • Loading branch information
yegappan committed Jul 15, 2023
1 parent ec8faf7 commit 389bb4c
Show file tree
Hide file tree
Showing 3 changed files with 87 additions and 20 deletions.
2 changes: 1 addition & 1 deletion autoload/lsp/hover.vim
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@ export def HoverReply(lspserver: dict<any>, hoverResult: any, cmdmods: string):
endif

if opt.lspOptions.hoverInPreview
execute $':silent! {cmdmods} pedit LspHoverReply'
execute $':silent! {cmdmods} pedit LspHover'
:wincmd P
:setlocal buftype=nofile
:setlocal bufhidden=delete
Expand Down
89 changes: 72 additions & 17 deletions ftplugin/lspgfm.vim
Original file line number Diff line number Diff line change
Expand Up @@ -2,22 +2,77 @@ vim9script

import autoload 'lsp/markdown.vim' as md

var bnr: number = bufnr()
var popup_id: number
var document: dict<list<any>>

try
popup_id = bnr->getbufinfo()[0].popups[0]
document = md.ParseMarkdown(bnr->getbufline(1, '$'), popup_id->winwidth())
catch /.*/
b:markdown_fallback = v:true
finish
endtry

b:lsp_syntax = document.syntax
md.list_pattern->setbufvar(bnr, '&formatlistpat')
var settings = 'linebreak breakindent breakindentopt=list:-1'
win_execute(popup_id, $'setlocal {settings}')
popup_id->popup_settext(document.content)
# Update the preview window with the github flavored markdown text
def UpdatePreviewWindowContents(bnr: number, contentList: list<dict<any>>)
:silent! bnr->deletebufline(1, '$')

var lines: list<string> = []
var props: dict<list<list<number>>>
var lnum = 0

# Each item in "contentList" is a Dict with the following items:
# text: text for this line
# props: list of text properties. Each list item is a Dict. See
# |popup-props| for more information.
#
# Need to convert the text properties from the format used by
# popup_settext() to that used by prop_add_list().
for entry in contentList
lines->add(entry.text)
lnum += 1
if entry->has_key('props')
for p in entry.props
if !props->has_key(p.type)
props[p.type] = []
endif
if p->has_key('end_lnum')
props[p.type]->add([lnum, p.col, p.end_lnum, p.end_col])
else
props[p.type]->add([lnum, p.col, lnum, p.col + p.length])
endif
endfor
endif
endfor
setbufline(bnr, 1, lines)
for prop_type in props->keys()
prop_add_list({type: prop_type}, props[prop_type])
endfor
enddef

# Render the github flavored markdown text.
# Text can be displayed either in a popup window or in a preview window.
def RenderGitHubMarkdownText()
var bnr: number = bufnr()
var winId: number = win_getid()
var document: dict<list<any>>
var inPreviewWindow = false

if win_gettype() == 'preview'
inPreviewWindow = true
endif

try
if !inPreviewWindow
winId = bnr->getbufinfo()[0].popups[0]
endif
# parse the github markdown content and convert it into a list of text and
# list of associated text properties.
document = md.ParseMarkdown(bnr->getbufline(1, '$'), winId->winwidth())
catch /.*/
b:markdown_fallback = v:true
return
endtry

b:lsp_syntax = document.syntax
md.list_pattern->setbufvar(bnr, '&formatlistpat')
var settings = 'linebreak breakindent breakindentopt=list:-1'
win_execute(winId, $'setlocal {settings}')
if inPreviewWindow
UpdatePreviewWindowContents(bnr, document.content)
else
winId->popup_settext(document.content)
endif
enddef
RenderGitHubMarkdownText()

# vim: tabstop=8 shiftwidth=2 softtabstop=2
16 changes: 14 additions & 2 deletions test/clangd_tests.vim
Original file line number Diff line number Diff line change
Expand Up @@ -1102,9 +1102,9 @@ def g:Test_LspHover()
END
setline(1, lines)
if clangdVerMajor > 14
g:WaitForServerFileLoad(1)
g:WaitForServerFileLoad(1)
else
g:WaitForServerFileLoad(0)
g:WaitForServerFileLoad(0)
endif
cursor(8, 4)
var output = execute(':LspHover')->split("\n")
Expand All @@ -1129,6 +1129,18 @@ def g:Test_LspHover()
assert_equal(1, popup_list()->len())
popup_clear()

# Show hover information in a preview window
g:LspOptionsSet({hoverInPreview: true})
cursor(8, 4)
:LspHover
assert_equal([2, 2, 'preview'], [winnr('$'), winnr(), win_gettype(1)])
assert_equal('LspHover', winbufnr(1)->bufname())
cursor(9, 9)
:LspHover
assert_equal([2, 2, 'preview'], [winnr('$'), winnr(), win_gettype(1)])
g:LspOptionsSet({hoverInPreview: false})
:pclose

:%bw!
enddef

Expand Down

0 comments on commit 389bb4c

Please sign in to comment.