diff options
| author | Silas <silas_git@nocafe.net> | 2020-11-27 22:07:58 -0300 |
|---|---|---|
| committer | Silas <silas_git@nocafe.net> | 2020-11-27 22:07:58 -0300 |
| commit | f4f0f5b22a2e52bd0391ee7f6cd4b99c98028fe9 (patch) | |
| tree | 133453ae1d15fb4bc603813f5ebad0b49526d6f0 /lua | |
| parent | 01eef9f87b72b0c1473672ca17592077b5af1126 (diff) | |
| download | vis-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')
| -rw-r--r-- | lua/lexers/bash.lua | 14 |
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) |
