Skip to content

Commit 28c1540

Browse files
committed
Add foldtext for testrunner folds
1 parent 8befed3 commit 28c1540

File tree

2 files changed

+47
-9
lines changed

2 files changed

+47
-9
lines changed

autoload/OmniSharp/testrunner.vim

Lines changed: 45 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,42 @@ function! OmniSharp#testrunner#Init(buffers) abort
3333
endfunction
3434

3535

36+
function! OmniSharp#testrunner#FoldText() abort
37+
let line = getline(v:foldstart)
38+
if line =~# '^;'
39+
" Project
40+
let projectkey = matchlist(line, '^\S\+')[0]
41+
let [assembly, _] = split(projectkey, ';')
42+
let ntests = 0
43+
for filename in keys(s:tests[projectkey].files)
44+
let ntests += len(s:tests[projectkey].files[filename].tests)
45+
endfor
46+
let err = match(line, '; ERROR$') == -1 ? '' : ' ERROR'
47+
return printf('%s [%d]%s', assembly, ntests, err)
48+
elseif line =~# '^ \f'
49+
" File
50+
let filename = trim(line)
51+
let fullpath = fnamemodify(filename, ':p')
52+
let displayname = matchlist(filename, '^\f\{-}\([^/\\]\+\)\.csx\?$')[1]
53+
" Position the cursor so that search() is relative to the fold, not the
54+
" actual cursor position
55+
let winview = winsaveview()
56+
call cursor(v:foldstart, 0)
57+
let projectline = search('^;', 'bcnWz')
58+
call winrestview(winview)
59+
let projectkey = matchlist(getline(projectline), '^\S\+')[0]
60+
let ntests = len(s:tests[projectkey].files[fullpath].tests)
61+
return printf(' %s [%d]', displayname, ntests)
62+
elseif line =~# '^<'
63+
return printf(' Error details (%d lines)', v:foldend - v:foldstart + 1)
64+
elseif line =~# '^>'
65+
return printf(' Results (%d lines)', v:foldend - v:foldstart + 1)
66+
elseif line =~# '^//'
67+
return printf(' Output (%d lines)', v:foldend - v:foldstart + 1)
68+
endif
69+
return printf('%s (%d lines)', line, v:foldend - v:foldstart + 1)
70+
endfunction
71+
3672
function! OmniSharp#testrunner#Log(message) abort
3773
call extend(s:current.log, a:message)
3874
endfunction
@@ -43,9 +79,9 @@ function! OmniSharp#testrunner#Run() abort
4379
let line = getline('.')
4480
if line =~# '^;'
4581
" Project selected - run all tests
46-
let projectname = matchlist(getline('.'), '^\S\+')[0]
47-
let filenames = filter(keys(s:tests[projectname].files),
48-
\ {_,f -> s:tests[projectname].files[f].visible})
82+
let projectkey = matchlist(getline('.'), '^\S\+')[0]
83+
let filenames = filter(keys(s:tests[projectkey].files),
84+
\ {_,f -> s:tests[projectkey].files[f].visible})
4985
call OmniSharp#actions#test#RunInFile(1, filenames)
5086
elseif line =~# '^ \f'
5187
" File selected
@@ -66,14 +102,14 @@ function! OmniSharp#testrunner#Remove() abort
66102
let line = getline('.')
67103
if line =~# '^;'
68104
" Project selected - run all tests
69-
let projectname = matchlist(getline('.'), '^\S\+')[0]
70-
let s:tests[projectname].visible = 0
105+
let projectkey = matchlist(getline('.'), '^\S\+')[0]
106+
let s:tests[projectkey].visible = 0
71107
elseif line =~# '^ \f'
72108
" File selected
73109
let filename = fnamemodify(trim(line), ':p')
74110
let projectline = search('^;', 'bcnWz')
75-
let projectname = matchlist(getline(projectline), '^\S\+')[0]
76-
let s:tests[projectname].files[filename].visible = 0
111+
let projectkey = matchlist(getline(projectline), '^\S\+')[0]
112+
let s:tests[projectkey].files[filename].visible = 0
77113
else
78114
let test = s:utils.findTest()
79115
let test.state = 'hidden'
@@ -487,11 +523,11 @@ function! s:utils.findTest() abort
487523
if testline > 0
488524
let testname = matchlist(getline(testline), '[-|*!] \zs.*$')[0]
489525
let projectline = search('^;', 'bcnWz')
490-
let projectname = matchlist(getline(projectline), '^\S\+')[0]
526+
let projectkey = matchlist(getline(projectline), '^\S\+')[0]
491527
let fileline = search('^ \f', 'bcnWz')
492528
let filename = matchlist(getline(fileline), '^ \zs.*$')[0]
493529
let filename = fnamemodify(filename, ':p')
494-
return s:tests[projectname].files[filename].tests[testname]
530+
return s:tests[projectkey].files[filename].tests[testname]
495531
endif
496532
return {}
497533
endfunction

ftplugin/omnisharptest/OmniSharp.vim

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,3 +26,5 @@ call s:map('n', '<F6>', 'omnisharp_testrunner_debug')
2626
call s:map('n', '<F9>', 'omnisharp_testrunner_set_breakpoints')
2727
call s:map('n', '<CR>', 'omnisharp_testrunner_navigate')
2828
call s:map('n', 'dd', 'omnisharp_testrunner_remove')
29+
30+
set foldtext=OmniSharp#testrunner#FoldText()

0 commit comments

Comments
 (0)