Fix: Folding by 'syntax' does nothing with Markdown syntax (Issue #1009)

This commit is contained in:
mtourneb
2020-09-05 16:12:46 -04:00
parent 1ea97303fd
commit 990b25ce37
8 changed files with 131 additions and 51 deletions
+59
View File
@@ -0,0 +1,59 @@
# Fold
Execute (Save state):
Log 'Previous foldmethod: ' . &foldmethod
let save_foldmethod = &foldmethod
Given vimwiki (Markdown Headers):
Some stuff 1
# Header level 1 2
## Header level 2 3
Content 4
### Header level 3 5
# Header level 1 6
Content 7
## Just to end 8: Vader cannot match end-of-file
Execute (Markdown and Fold Syntax):
call SetSyntax('markdown')
set foldmethod=syntax
Execute (Assert Markdown: Fold Syntax):
Log 'Supposing it starts at foldlevel 0'
AssertEqual 'line 1:0', 'line 1:' . foldlevel(1)
AssertEqual 'line 2:0', 'line 2:' . foldlevel(2)
AssertEqual 'line 3:1', 'line 3:' . foldlevel(3)
AssertEqual 'line 4:2', 'line 4:' . foldlevel(4)
AssertEqual 'line 5:2', 'line 5:' . foldlevel(5)
AssertEqual 'line 6:0', 'line 6:' . foldlevel(6)
AssertEqual 'line 7:0', 'line 7:' . foldlevel(7)
Given vimwiki (Wiki Headers):
Some stuff 1
= Header level 1 2 =
== Header level 2 3 ==
Content 4
=== Header level 3 5 ===
= Header level 1 6 =
Content 7
== Just to end 8 ==
Execute (Markdown and Fold Syntax):
call SetSyntax('default')
set foldmethod=syntax
Execute (Assert Markdown: Fold Syntax):
Log 'Supposing it starts at foldlevel 0'
AssertEqual 'line 1:0', 'line 1:' . foldlevel(1)
AssertEqual 'line 2:0', 'line 2:' . foldlevel(2)
AssertEqual 'line 3:1', 'line 3:' . foldlevel(3)
AssertEqual 'line 4:2', 'line 4:' . foldlevel(4)
AssertEqual 'line 5:2', 'line 5:' . foldlevel(5)
AssertEqual 'line 6:0', 'line 6:' . foldlevel(6)
AssertEqual 'line 7:0', 'line 7:' . foldlevel(7)
Execute (Restore state):
let &foldmethod = save_foldmethod
Log 'Next foldmethod: ' . &foldmethod
+7
View File
@@ -2,8 +2,15 @@
#
# Note: some trailing spaces are necessary at the end of list items like `1.`
# better read this file with `set list`
#
# Warning: Foldmethod dependant (and foldlevel ...)
Execute (Save State):
let msg = 'Error: foldmethod must be manual for theses tests to work,'
let msg .= ' it is the default, so please restore it in the test that changed it'
AssertEqual &foldmethod, 'manual', msg
Given vimwiki (List Blockquote (Issue #55) {{{2):
1. Outer Item 1
1. Inner Item 1
+5 -2
View File
@@ -467,7 +467,7 @@ Given vimwiki (Wiki Headers):
Execute (Set syntax default):
call SetSyntax('default')
Execute (Assert Syntax Header):
Execute (Assert Wiki Syntax Header):
AssertEqual 'VimwikiHeader1', SyntaxAt(1, 10)
AssertEqual 'VimwikiHeader2', SyntaxAt(2, 10)
AssertEqual 'VimwikiHeader3', SyntaxAt(3, 10)
@@ -486,7 +486,10 @@ Given vimwiki (Markdown Headers):
Execute (Set syntax markdown):
call SetSyntax('markdown')
Execute (Assert Syntax Header):
Execute (Assert Markdown Syntax Header):
Log "Syntax of first heading: " . string(GetSyntaxStack())
Log "Regex of rxListWithoutCb: " . vimwiki#vars#get_wikilocal('rxListItemWithoutCB')
Log "Bullet types: " . string(vimwiki#vars#get_wikilocal('bullet_types'))
AssertEqual 'VimwikiHeader1' , SyntaxAt(1, 10)
AssertEqual 'VimwikiHeader2' , SyntaxAt(2, 10)
AssertEqual 'VimwikiHeader3' , SyntaxAt(3, 10)
+18 -1
View File
@@ -89,21 +89,30 @@
" Define functions
" Change the syntax using a temporary wiki
function! SetSyntax(vw_syn)
" Change extension and wiki_nr
let index=0
if a:vw_syn ==# 'default'
let ext = 'wiki'
let index=0
elseif a:vw_syn ==# 'markdown'
let ext = 'md'
let index=1
elseif a:vw_syn ==# 'media'
let ext = 'mw'
let index=2
else
Log 'ERROR: Invalid syntax "' . a:vw_syn . '" in SetSyntax()'
Log 'NOTE: function only accepts "media" for setting mediawiki syntax'
return
endif
" Change temporary wiki
let path = expand('%:p:h')
let new_temp_wiki_settings = {'path': path,
let new_temp_wiki_settings = {
\ 'path': path,
\ 'ext': ext,
\ 'syntax': a:vw_syn,
\ 'bullet_types': g:vimwiki_wikilocal_vars[index]['bullet_types'],
\ }
" Remove any temporary wikis each time this function is called.
@@ -306,6 +315,14 @@
return synIDattr(synIDtrans(l:s), 'name')
endfun
" Debug helper
function! GetSyntaxStack()
if !exists('*synstack')
return
endif
return map(synstack(line('.'), col('.')), 'synIDattr(v:val, "name")')
endfunc
" Run Assert only if vim version higth enough
function! AssertIfVersion(version, one, two)
if v:version < a:version | return | endif