aboutsummaryrefslogtreecommitdiff
path: root/test/functional/lua/comment_spec.lua
diff options
context:
space:
mode:
authorEvgeni Chasnovski <evgeni.chasnovski@gmail.com>2024-05-23 23:30:53 +0300
committerGitHub <noreply@github.com>2024-05-23 15:30:53 -0500
commit0a2218f965ac8cd7967d33b8c52e5b06fb284aac (patch)
tree69d79f792771da62a27c565cc1045287fd9ec40d /test/functional/lua/comment_spec.lua
parentc614969570ac13cfc1ff6642fcaf56ebce6d40be (diff)
downloadrneovim-0a2218f965ac8cd7967d33b8c52e5b06fb284aac.tar.gz
rneovim-0a2218f965ac8cd7967d33b8c52e5b06fb284aac.tar.bz2
rneovim-0a2218f965ac8cd7967d33b8c52e5b06fb284aac.zip
fix(comment): fall back to using trimmed comment markers (#28938)
Problem: Currently comment detection, addition, and removal are done by matching 'commentstring' exactly. This has the downside when users want to add comment markers with space (like with `-- %s` commentstring) but also be able to uncomment lines that do not contain space (like `--aaa`). Solution: Use the following approach: - Line is commented if it matches 'commentstring' with trimmed parts. - Adding comment is 100% relying on 'commentstring' parts (as is now). - Removing comment is first trying exact 'commentstring' parts with fallback on trying its trimmed parts.
Diffstat (limited to 'test/functional/lua/comment_spec.lua')
-rw-r--r--test/functional/lua/comment_spec.lua39
1 files changed, 23 insertions, 16 deletions
diff --git a/test/functional/lua/comment_spec.lua b/test/functional/lua/comment_spec.lua
index 9b1d9613cb..bbf061a2ab 100644
--- a/test/functional/lua/comment_spec.lua
+++ b/test/functional/lua/comment_spec.lua
@@ -301,27 +301,34 @@ describe('commenting', function()
eq(get_lines(), { 'aa', '', ' ', '\t', 'aa' })
end)
- it('matches comment parts strictly when detecting comment/uncomment', function()
+ it('correctly matches comment parts during checking and uncommenting', function()
local validate = function(from, to, ref_lines)
- set_lines({ '#aa', '# aa', '# aa' })
+ set_lines({ '/*aa*/', '/* aa */', '/* aa */' })
toggle_lines(from, to)
eq(get_lines(), ref_lines)
end
- set_commentstring('#%s')
- validate(1, 3, { 'aa', ' aa', ' aa' })
- validate(2, 3, { '#aa', ' aa', ' aa' })
- validate(3, 3, { '#aa', '# aa', ' aa' })
-
- set_commentstring('# %s')
- validate(1, 3, { '# #aa', '# # aa', '# # aa' })
- validate(2, 3, { '#aa', 'aa', ' aa' })
- validate(3, 3, { '#aa', '# aa', ' aa' })
-
- set_commentstring('# %s')
- validate(1, 3, { '# #aa', '# # aa', '# # aa' })
- validate(2, 3, { '#aa', '# # aa', '# # aa' })
- validate(3, 3, { '#aa', '# aa', 'aa' })
+ -- Should first try to match 'commentstring' parts exactly with their
+ -- whitespace, with fallback on trimmed parts
+ set_commentstring('/*%s*/')
+ validate(1, 3, { 'aa', ' aa ', ' aa ' })
+ validate(2, 3, { '/*aa*/', ' aa ', ' aa ' })
+ validate(3, 3, { '/*aa*/', '/* aa */', ' aa ' })
+
+ set_commentstring('/* %s */')
+ validate(1, 3, { 'aa', 'aa', ' aa ' })
+ validate(2, 3, { '/*aa*/', 'aa', ' aa ' })
+ validate(3, 3, { '/*aa*/', '/* aa */', ' aa ' })
+
+ set_commentstring('/* %s */')
+ validate(1, 3, { 'aa', ' aa ', 'aa' })
+ validate(2, 3, { '/*aa*/', ' aa ', 'aa' })
+ validate(3, 3, { '/*aa*/', '/* aa */', 'aa' })
+
+ set_commentstring(' /*%s*/ ')
+ validate(1, 3, { 'aa', ' aa ', ' aa ' })
+ validate(2, 3, { '/*aa*/', ' aa ', ' aa ' })
+ validate(3, 3, { '/*aa*/', '/* aa */', ' aa ' })
end)
it('uncomments on inconsistent indent levels', function()