aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJan Edmund Lazo <jan.lazo@mail.utoronto.ca>2018-12-08 08:21:49 -0500
committerJustin M. Keyes <justinkz@gmail.com>2018-12-08 14:21:49 +0100
commitf1eb25f0c45d7612d495f2cbd43a29da294d5325 (patch)
tree2fb9e67d3c49e4dc1acce5b1faae0a07b16ca96e
parentbd97577954d79b8cfba6022a94eb5b55e5a6a689 (diff)
downloadrneovim-f1eb25f0c45d7612d495f2cbd43a29da294d5325.tar.gz
rneovim-f1eb25f0c45d7612d495f2cbd43a29da294d5325.tar.bz2
rneovim-f1eb25f0c45d7612d495f2cbd43a29da294d5325.zip
vim-patch:8.1.0570: 'commentstring' not used when adding fold marker (#9331)
Problem: 'commentstring' not used when adding fold marker. (Maxim Kim) Solution: Only use empty 'comments' middle when leader is empty. (Christian Brabandt, closes vim/vim#3670) https://github.com/vim/vim/commit/539328197c51c1586cbbb6b6be3db3c412249b49
-rw-r--r--src/nvim/misc1.c20
-rw-r--r--src/nvim/testdir/test_fold.vim17
2 files changed, 35 insertions, 2 deletions
diff --git a/src/nvim/misc1.c b/src/nvim/misc1.c
index d8730ea08a..d4a406cdba 100644
--- a/src/nvim/misc1.c
+++ b/src/nvim/misc1.c
@@ -1099,6 +1099,7 @@ int get_last_leader_offset(char_u *line, char_u **flags)
found_one = FALSE;
for (list = curbuf->b_p_com; *list; ) {
char_u *flags_save = list;
+ bool is_only_whitespace = false;
/*
* Get one option part into part_buf[]. Advance list to next one.
@@ -1122,8 +1123,12 @@ int get_last_leader_offset(char_u *line, char_u **flags)
if (ascii_iswhite(string[0])) {
if (i == 0 || !ascii_iswhite(line[i - 1]))
continue;
- while (ascii_iswhite(string[0]))
- ++string;
+ while (ascii_iswhite(*string)) {
+ string++;
+ }
+ if (*string == NUL) {
+ is_only_whitespace = true;
+ }
}
for (j = 0; string[j] != NUL && string[j] == line[i + j]; ++j)
/* do nothing */;
@@ -1139,6 +1144,17 @@ int get_last_leader_offset(char_u *line, char_u **flags)
continue;
}
+ // For a middlepart comment that is only white space, only consider
+ // it to match if everything before the current position in the
+ // line is also whitespace.
+ if (is_only_whitespace && vim_strchr(part_buf, COM_MIDDLE) != NULL) {
+ for (j = 0; ascii_iswhite(line[j]) && j <= i; j++) {
+ }
+ if (j < i) {
+ continue;
+ }
+ }
+
/*
* We have found a match, stop searching.
*/
diff --git a/src/nvim/testdir/test_fold.vim b/src/nvim/testdir/test_fold.vim
index b6a545f959..85f58ada7e 100644
--- a/src/nvim/testdir/test_fold.vim
+++ b/src/nvim/testdir/test_fold.vim
@@ -674,3 +674,20 @@ func Test_fold_last_line_with_pagedown()
set fdm&
enew!
endfunc
+
+func Test_folds_marker_in_comment2()
+ new
+ call setline(1, ['Lorem ipsum dolor sit', 'Lorem ipsum dolor sit', 'Lorem ipsum dolor sit'])
+ setl fen fdm=marker
+ setl commentstring=<!--%s-->
+ setl comments=s:<!--,m:\ \ \ \ ,e:-->
+ norm! zf2j
+ setl nofen
+ :1y
+ call assert_equal(['Lorem ipsum dolor sit<!--{{{-->'], getreg(0,1,1))
+ :+2y
+ call assert_equal(['Lorem ipsum dolor sit<!--}}}-->'], getreg(0,1,1))
+
+ set foldmethod&
+ bwipe!
+endfunc