aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSilas <silas_git@nocafe.net>2020-12-08 17:37:43 -0300
committerSilas <silas_git@nocafe.net>2020-12-08 17:37:43 -0300
commite57851806592f5ea4ee48303b97a5f59731370c5 (patch)
treea4a03e32f43057f1093ae6d72426a7a2353e71dd
parent247b799b7cd272f20b2c6f9b4e60bf8b57775985 (diff)
downloadvis-e57851806592f5ea4ee48303b97a5f59731370c5.tar.gz
vis-e57851806592f5ea4ee48303b97a5f59731370c5.tar.xz
lexers: fix bug in bash lexer for last here-doc
f4f0f5b allowed "<<-EOF" heredocs to be parsed correctly, but it introduced a bug that made the lexer fail when the beginning of a here-doc was the last string in a file (optionally followed only by blanks). In order to fix this, move everything regarding "delimiter" within the block that is executed only if "delimiter" is not nil.
-rw-r--r--lua/lexers/bash.lua16
1 files changed, 8 insertions, 8 deletions
diff --git a/lua/lexers/bash.lua b/lua/lexers/bash.lua
index 4dc4cf6..7927b4a 100644
--- a/lua/lexers/bash.lua
+++ b/lua/lexers/bash.lua
@@ -20,15 +20,15 @@ local ex_str = l.delimited_range('`')
local heredoc = '<<' * P(function(input, 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
+ -- 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
local _, e = input:find(close_pattern, e)
return e and e + 1 or #input + 1
end