diff options
| author | Silas <silas_git@nocafe.net> | 2020-12-08 17:37:43 -0300 |
|---|---|---|
| committer | Silas <silas_git@nocafe.net> | 2020-12-08 17:37:43 -0300 |
| commit | e57851806592f5ea4ee48303b97a5f59731370c5 (patch) | |
| tree | a4a03e32f43057f1093ae6d72426a7a2353e71dd | |
| parent | 247b799b7cd272f20b2c6f9b4e60bf8b57775985 (diff) | |
| download | vis-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.lua | 16 |
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 |
