1
0
forked from aniani/vim

patch 9.1.1259: some issues with comment package and tailing spaces

Problem:  some issues with comment package and tailing spaces
Solution: correctly capture trailing spaces with the ac/ic text object
          (Maxim Kim)

This commit fixes a few issues with the comment package:

1) both ac and ic incorrectly miss the last //

```
// hello trailing spaces
//
```

2) fix ac/ic with last empty comment line,
   vac should also select last line with #

```py
 # print("hello")
 # print("world")
 #
 #
$endofbuffer$
```

closes: #17013

Signed-off-by: Maxim Kim <habamax@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
This commit is contained in:
Maxim Kim
2025-03-30 14:55:26 +02:00
committed by Christian Brabandt
parent bb8e5ddb97
commit a580761a45
3 changed files with 74 additions and 6 deletions

View File

@@ -1,7 +1,7 @@
vim9script vim9script
# Maintainer: Maxim Kim <habamax@gmail.com> # Maintainer: Maxim Kim <habamax@gmail.com>
# Last Update: 2025 Mar 21 # Last Update: 2025-03-30
# #
# Toggle comments # Toggle comments
# Usage: # Usage:
@@ -107,8 +107,8 @@ export def ObjComment(inner: bool)
# Search for the beginning of the comment block # Search for the beginning of the comment block
if IsComment() if IsComment()
if search('\v%(\S+)|$', 'bW', 0, 200, IsComment) > 0 if search('\v%(\S+)|%(^\s*$)', 'bW', 0, 200, IsComment) > 0
search('\v%(\S)|$', 'W', 0, 200, () => !IsComment()) search('\v%(\S)|%(^\s*$)', 'W', 0, 200, () => !IsComment())
else else
cursor(1, 1) cursor(1, 1)
search('\v\S+', 'cW', 0, 200) search('\v\S+', 'cW', 0, 200)
@@ -130,11 +130,11 @@ export def ObjComment(inner: bool)
if pos_init[1] > pos_start[1] if pos_init[1] > pos_start[1]
cursor(pos_init[1], pos_init[2]) cursor(pos_init[1], pos_init[2])
endif endif
if search('\v%(\S+)|$', 'W', 0, 200, IsComment) > 0 if search('\v%(\S+)|%(^\s*$)', 'W', 0, 200, IsComment) > 0
search('\S', 'beW', 0, 200, () => !IsComment()) search('\S', 'beW', 0, 200, () => !IsComment())
else else
if search('\%$', 'W', 0, 200) > 0 if search('\%$', 'W', 0, 200) > 0
search('\ze\S', 'beW', 0, 200, () => !IsComment()) search('\ze\S', 'beW', line('.'), 200, () => !IsComment())
endif endif
endif endif
@@ -144,7 +144,7 @@ export def ObjComment(inner: bool)
var spaces = matchstr(getline(pos_end[1]), '\%>.c\s*') var spaces = matchstr(getline(pos_end[1]), '\%>.c\s*')
pos_end[2] += spaces->len() pos_end[2] += spaces->len()
if getline(pos_end[1])[pos_end[2] : ] =~ '^\s*$' if getline(pos_end[1])[pos_end[2] : ] =~ '^\s*$'
&& (pos_start[2] == 1 || getline(pos_start[1])[ : pos_start[2]] =~ '^\s*$') && (pos_start[2] <= 1 || getline(pos_start[1])[ : pos_start[2]] =~ '^\s*$')
if search('\v\s*\_$(\s*\n)+', 'eW', 0, 200) > 0 if search('\v\s*\_$(\s*\n)+', 'eW', 0, 200) > 0
pos_end = getcurpos() pos_end = getcurpos()
endif endif

View File

@@ -485,6 +485,72 @@ func Test_textobj_noleading_space_comment2()
call assert_equal(["int main() {", "}"], result) call assert_equal(["int main() {", "}"], result)
endfunc endfunc
func Test_textobj_trailing_spaces_comment()
CheckScreendump
let lines = ['# print("hello") ', '# print("world") ', "#", 'print("!")']
let input_file = "test_textobj_trailing_spaces_input.py"
call writefile(lines, input_file, "D")
let buf = RunVimInTerminal('-c "packadd comment" ' .. input_file, {})
call term_sendkeys(buf, "jdac")
let output_file = "comment_textobj_trailing_spaces_comment.py"
call term_sendkeys(buf, $":w {output_file}\<CR>")
defer delete(output_file)
call StopVimInTerminal(buf)
let result = readfile(output_file)
call assert_equal(['print("!")'], result)
endfunc
func Test_textobj_trailing_spaces_last_comment()
CheckScreendump
let lines = ['# print("hello") ', '# print("world") ', "#", '', '']
let input_file = "test_textobj_trailing_spaces_last_input.py"
call writefile(lines, input_file, "D")
let buf = RunVimInTerminal('-c "packadd comment" ' .. input_file, {})
call term_sendkeys(buf, "jdac")
let output_file = "comment_textobj_trailing_spaces_last_comment.py"
call term_sendkeys(buf, $":w {output_file}\<CR>")
defer delete(output_file)
call StopVimInTerminal(buf)
let result = readfile(output_file)
call assert_equal([], result)
endfunc
func Test_textobj_last_line_empty_comment()
CheckScreendump
let lines =<< trim END
# print("hello")
#
#
END
let input_file = "test_textobj_last_line_empty_input.py"
call writefile(lines, input_file, "D")
let buf = RunVimInTerminal('-c "packadd comment" ' .. input_file, {})
call term_sendkeys(buf, "dac")
let output_file = "comment_textobj_last_line_empty_comment.py"
call term_sendkeys(buf, $":w {output_file}\<CR>")
defer delete(output_file)
call StopVimInTerminal(buf)
let result = readfile(output_file)
call assert_equal([], result)
endfunc
func Test_textobj_cursor_on_leading_space_comment() func Test_textobj_cursor_on_leading_space_comment()
CheckScreendump CheckScreendump
let lines =<< trim END let lines =<< trim END

View File

@@ -704,6 +704,8 @@ static char *(features[]) =
static int included_patches[] = static int included_patches[] =
{ /* Add new patch number below this line */ { /* Add new patch number below this line */
/**/
1259,
/**/ /**/
1258, 1258,
/**/ /**/