aboutsummaryrefslogtreecommitdiff
path: root/lua/lexers/bash.lua
diff options
context:
space:
mode:
authorSilas <silas_git@nocafe.net>2020-11-27 22:07:58 -0300
committerSilas <silas_git@nocafe.net>2020-11-27 22:07:58 -0300
commitf4f0f5b22a2e52bd0391ee7f6cd4b99c98028fe9 (patch)
tree133453ae1d15fb4bc603813f5ebad0b49526d6f0 /lua/lexers/bash.lua
parent01eef9f87b72b0c1473672ca17592077b5af1126 (diff)
downloadvis-f4f0f5b22a2e52bd0391ee7f6cd4b99c98028fe9.tar.gz
vis-f4f0f5b22a2e52bd0391ee7f6cd4b99c98028fe9.tar.xz
Heredocs with "-" can have spaces before closing
If a here-doc start delimiter begins with "-", then spaces are allowed to come before the closing delimiter. This patch fixes what would otherwise be parsed incorrectly: <<-EOF .... EOF
Diffstat (limited to 'lua/lexers/bash.lua')
-rw-r--r--lua/lexers/bash.lua14
1 files changed, 11 insertions, 3 deletions
diff --git a/lua/lexers/bash.lua b/lua/lexers/bash.lua
index 207cb22..4dc4cf6 100644
--- a/lua/lexers/bash.lua
+++ b/lua/lexers/bash.lua
@@ -18,10 +18,18 @@ local sq_str = l.delimited_range("'", false, true)
local dq_str = l.delimited_range('"')
local ex_str = l.delimited_range('`')
local heredoc = '<<' * P(function(input, index)
- local s, e, _, delimiter =
- input:find('%-?(["\']?)([%a_][%w_]*)%1[\n\r\f;]+', index)
+ local s, e, minus, _, delimiter =
+ input:find('(-?)(["\']?)([%a_][%w_]*)%2[\n\r\f;]+', index)
+ -- If the starting delimiter of a here-doc begins with "-", then
+ -- spaces are allowed to come before the closing delimiter.
+ local close_pattern
+ if minus == '-' then
+ close_pattern = '[\n\r\f%s]+'..delimiter..'\n'
+ else
+ close_pattern = '[\n\r\f]+'..delimiter..'\n'
+ end
if s == index and delimiter then
- local _, e = input:find('[\n\r\f]+'..delimiter..'\n', e)
+ local _, e = input:find(close_pattern, e)
return e and e + 1 or #input + 1
end
end)