autoload/lsp/lsp.vim | 4 ++-- autoload/lsp/outline.vim | 15 ++++++++++----- plugin/lsp.vim | 2 +- test/clangd_tests.vim | 26 ++++++++++++++++++++++++++ diff --git a/autoload/lsp/lsp.vim b/autoload/lsp/lsp.vim index e0cbf214323732f86fe7409015e046b6064bf07d..deb67a274e4e3036713f7838ce1b58f20b92a792 100644 --- a/autoload/lsp/lsp.vim +++ b/autoload/lsp/lsp.vim @@ -801,8 +801,8 @@ lspserver.getDocSymbols(fname) enddef # open a window and display all the symbols in a file (outline) -export def Outline() - outline.OpenOutlineWindow() +export def Outline(cmdmods: string) + outline.OpenOutlineWindow(cmdmods) g:LspRequestDocSymbols() enddef diff --git a/autoload/lsp/outline.vim b/autoload/lsp/outline.vim index 266fc55db0daa7228ad7021b8614edc6444989de..b42fe649c19b1852ceaec32dc58b929fc1c179ac 100644 --- a/autoload/lsp/outline.vim +++ b/autoload/lsp/outline.vim @@ -218,7 +218,7 @@ :silent! syntax clear LSPTitle enddef # open the symbol outline window -export def OpenOutlineWindow() +export def OpenOutlineWindow(cmdmods: string) var wid: number = bufwinid('LSP-Outline') if wid != -1 return @@ -226,11 +226,16 @@ endif var prevWinID: number = win_getid() - if opt.lspOptions.outlineOnRight - execute $':botright :{opt.lspOptions.outlineWinSize}vnew LSP-Outline' - else - execute $':topleft :{opt.lspOptions.outlineWinSize}vnew LSP-Outline' + var mods = cmdmods + if mods == '' + if opt.lspOptions.outlineOnRight + mods = ':vert :botright' + else + mods = ':vert :topleft' + endif endif + + execute $'{mods} :{opt.lspOptions.outlineWinSize}new LSP-Outline' :setlocal modifiable :setlocal noreadonly :silent! :%d _ diff --git a/plugin/lsp.vim b/plugin/lsp.vim index 02db3975bbd60a877cc57094be9e821c06fe440b..c0f1eb575b8bace8a514f8b59f2f6cf31bf5eb42 100644 --- a/plugin/lsp.vim +++ b/plugin/lsp.vim @@ -78,7 +78,7 @@ command! -nargs=0 -bar LspHighlightClear call LspDocHighlightClear() command! -nargs=0 -bar LspHover lsp.Hover() command! -nargs=0 -bar LspIncomingCalls lsp.IncomingCalls() command! -nargs=0 -bar LspOutgoingCalls lsp.OutgoingCalls() -command! -nargs=0 -bar LspOutline lsp.Outline() +command! -nargs=0 -bar LspOutline lsp.Outline() command! -nargs=0 -bar LspPeekDeclaration lsp.GotoDeclaration(v:true, ) command! -nargs=0 -bar LspPeekDefinition lsp.GotoDefinition(v:true, ) command! -nargs=0 -bar LspPeekImpl lsp.GotoImplementation(v:true, ) diff --git a/test/clangd_tests.vim b/test/clangd_tests.vim index 3fb5bbf8469710585af4eb27db1c44aacaa213da..7ede12b797db35663757701162d5992f83f0f14b 100644 --- a/test/clangd_tests.vim +++ b/test/clangd_tests.vim @@ -1138,11 +1138,37 @@ } END setline(1, lines) g:WaitForServerFileLoad(0) + var winid = win_getid() :LspOutline assert_equal(2, winnr('$')) var bnum = winbufnr(1) assert_equal('LSP-Outline', bufname(bnum)) assert_equal(['Function', ' aFunc', ' bFunc'], getbufline(bnum, 4, '$')) + + # Validate position vert topleft + assert_equal(['row', [['leaf', winid + 1], ['leaf', winid]]], winlayout()) + execute $':{bnum}bw' + + # Validate position vert botright + g:LspOptionsSet({ outlineOnRight: true }) + :LspOutline + assert_equal(2, winnr('$')) + bnum = winbufnr(2) + assert_equal('LSP-Outline', bufname(bnum)) + assert_equal(['Function', ' aFunc', ' bFunc'], getbufline(bnum, 4, '$')) + assert_equal(['row', [['leaf', winid], ['leaf', winid + 2]]], winlayout()) + g:LspOptionsSet({ outlineOnRight: false }) + execute $':{bnum}bw' + + # Validate position botright (below) + :botright LspOutline + assert_equal(2, winnr('$')) + bnum = winbufnr(2) + assert_equal('LSP-Outline', bufname(bnum)) + assert_equal(['Function', ' aFunc', ' bFunc'], getbufline(bnum, 4, '$')) + assert_equal(['col', [['leaf', winid], ['leaf', winid + 3]]], winlayout()) + execute $':{bnum}bw' + :%bw! enddef