Skip to content

Commit 5ae09b1

Browse files
committed
feat(fold)!: handle comment specially
This removes folding of multiline comments. I may add it back later if requested by users. refer: #2882
1 parent 9df79e1 commit 5ae09b1

File tree

10 files changed

+74
-105
lines changed

10 files changed

+74
-105
lines changed

autoload/vimtex/fold.vim

Lines changed: 30 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -54,31 +54,37 @@ function! vimtex#fold#init_state(state) abort " {{{1
5454
\ . '|^\s*\]\s*%(\{|$)'
5555
\ . '|^\s*}'
5656
let a:state.fold_re_next = ''
57+
let a:state.fold_re_comment = ''
5758
for l:name in [
58-
\ 'comment_pkg',
5959
\ 'preamble',
6060
\ 'cmd_single',
6161
\ 'cmd_single_opt',
6262
\ 'cmd_multi',
6363
\ 'cmd_addplot',
6464
\ 'sections',
6565
\ 'markers',
66-
\ 'comments',
6766
\ 'items',
6867
\ 'envs',
6968
\ 'env_options',
7069
\]
7170
let l:type = get(a:state.fold_types_dict, l:name, {})
72-
if !empty(l:type)
73-
call add(a:state.fold_types_ordered, l:type)
74-
if exists('l:type.re.fold_re')
75-
let a:state.fold_re .= '|' . l:type.re.fold_re
76-
endif
77-
if exists('l:type.re.fold_re_next')
78-
let a:state.fold_re_next .=
79-
\ (empty(a:state.fold_re_next) ? '\v' : '|')
80-
\ . l:type.re.fold_re_next
81-
endif
71+
if empty(l:type) | continue | endif
72+
73+
call add(a:state.fold_types_ordered, l:type)
74+
if exists('l:type.re.fold_re')
75+
let a:state.fold_re .= '|' .. l:type.re.fold_re
76+
endif
77+
78+
if exists('l:type.re.fold_re_next')
79+
let a:state.fold_re_next .=
80+
\ (empty(a:state.fold_re_next) ? '\v' : '|')
81+
\ .. l:type.re.fold_re_next
82+
endif
83+
84+
if exists('l:type.re.fold_re_comment')
85+
let a:state.fold_re_comment .=
86+
\ (empty(a:state.fold_re_comment) ? '\v' : '|')
87+
\ .. l:type.re.fold_re_comment
8288
endif
8389
endfor
8490
endfunction
@@ -110,6 +116,18 @@ function! vimtex#fold#level(lnum) abort " {{{1
110116
return '='
111117
endif
112118

119+
" Handle comments by considering the syntax
120+
if vimtex#syntax#in_comment(a:lnum, 1)
121+
\ && l:line !~# b:vimtex.fold_re_comment
122+
if l:line =~# '^\s*\\begin\s*{comment}'
123+
return 'a1'
124+
elseif l:line =~# '^\s*\\end\s*{comment}'
125+
return 's1'
126+
else
127+
return '='
128+
endif
129+
endif
130+
113131
for l:type in b:vimtex.fold_types_ordered
114132
let l:value = l:type.level(l:line, a:lnum)
115133
if !empty(l:value) | return l:value | endif

autoload/vimtex/fold/comment_pkg.vim

Lines changed: 0 additions & 39 deletions
This file was deleted.

autoload/vimtex/fold/comments.vim

Lines changed: 0 additions & 43 deletions
This file was deleted.

autoload/vimtex/fold/markers.vim

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,8 @@ function! s:folder.init() abort dict " {{{1
2727
\ ['^.*\ze\s*%', ''],
2828
\]
2929

30-
let self.re.fold_re = escape(self.open . '|' . self.close, '{}%+*.')
30+
let self.re.fold_re = escape(self.open .. '|' .. self.close, '{}%+*.')
31+
let self.re.fold_re_comment = escape(self.open .. '|' .. self.close, '{}%+*.')
3132

3233
return self
3334
endfunction

autoload/vimtex/fold/sections.vim

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,8 @@ function! s:folder.init() abort dict " {{{1
3535
let self.re.secpat1 = self.re.sections . '\*?\s*\{\zs.*'
3636
let self.re.secpat2 = self.re.sections . '\*?\s*\[\zs.*'
3737

38-
let self.re.fold_re = '\\%(' . join(self.parts + self.sections, '|') . ')'
38+
let self.re.fold_re = '\\%(' .. join(self.parts + self.sections, '|') .. ')'
39+
let self.re.fold_re_comment = '^\s*\% Fake'
3940

4041
return self
4142
endfunction

autoload/vimtex/options.vim

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -95,8 +95,6 @@ function! vimtex#options#init() abort " {{{1
9595
call s:init_option('vimtex_fold_types_defaults', {
9696
\ 'preamble' : {},
9797
\ 'items' : {},
98-
\ 'comment_pkg' : {},
99-
\ 'comments' : { 'enabled' : 0 },
10098
\ 'envs' : {
10199
\ 'blacklist' : [],
102100
\ 'whitelist' : [],

doc/vimtex.txt

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1846,11 +1846,6 @@ OPTIONS *vimtex-options*
18461846
corresponding "real" sections. The fold title is the
18471847
provided title with the `Fake...` part prepended.
18481848

1849-
<comment_pkg> Fold `\begin{comments} ... \end{comments}` and disable
1850-
folding inside the environment.
1851-
1852-
<comments> Fold multiline comments. This is disabled by default.
1853-
18541849
<markers> Fold on vim-style markers inside comments, that is,
18551850
pairs of e.g. `{{{` and `}}}` (the default markers).
18561851
|regex| patterns for the opening and closing markers

test/test-folding/test-comment.tex

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
\documentclass{article}
2+
\usepackage{comment}
3+
4+
\begin{document}
5+
6+
\section{test 1}
7+
8+
\begin{comment}
9+
f(x) = 1
10+
\begin{equation}
11+
f(x) = 1
12+
\end{equation}
13+
\label{sec:test1}
14+
\end{comment}
15+
16+
\end{document}

test/test-folding/test-comment.vim

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
set nocompatible
2+
let &rtp = '../..,' . &rtp
3+
filetype plugin on
4+
syntax enable
5+
6+
set fillchars=fold:\
7+
set number
8+
set foldcolumn=4
9+
10+
nnoremap q :qall!<cr>
11+
12+
call vimtex#log#set_silent()
13+
14+
let g:vimtex_fold_enabled = 1
15+
16+
silent edit test-comment.tex
17+
18+
if empty($INMAKE) | finish | endif
19+
20+
call assert_equal(2, foldlevel(9))
21+
call assert_equal(2, foldlevel(11))
22+
23+
call vimtex#test#finished()

test/test-folding/test-other.vim

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,15 +11,14 @@ nnoremap q :qall!<cr>
1111
call vimtex#log#set_silent()
1212

1313
let g:vimtex_fold_enabled = 1
14-
let g:vimtex_fold_types = {'comments' : {'enabled': 1}}
1514

1615
silent edit test-other.tex
1716

1817
if empty($INMAKE) | finish | endif
1918

2019

2120
call assert_equal(1, foldlevel(1))
22-
call assert_equal(2, foldlevel(2))
21+
call assert_equal(1, foldlevel(2))
2322
call assert_equal(2, foldlevel(34))
2423
call assert_equal(2, foldlevel(48))
2524
call assert_equal(3, foldlevel(128))

0 commit comments

Comments
 (0)