void-packages/srcpkgs/vis/patches/0001-lexers-fix-bug-in-bash...

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