46 lines
1.7 KiB
Diff
46 lines
1.7 KiB
Diff
From e57851806592f5ea4ee48303b97a5f59731370c5 Mon Sep 17 00:00:00 2001
|
|
From: Silas <silas_git@nocafe.net>
|
|
Date: Tue, 8 Dec 2020 17:37:43 -0300
|
|
Subject: [PATCH] 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.
|
|
---
|
|
lua/lexers/bash.lua | 16 ++++++++--------
|
|
1 file 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
|
|
|