Skip to content

Commit 84054c9

Browse files
committed
allow leading spaces for heredoc end marker
1 parent 4f1e224 commit 84054c9

File tree

5 files changed

+138
-15
lines changed

5 files changed

+138
-15
lines changed

autoload/vimlparser.vim

Lines changed: 27 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1509,7 +1509,7 @@ function! s:VimLParser.parse_cmd_call() abort
15091509
call self.add_node(node)
15101510
endfunction
15111511

1512-
function! s:VimLParser.parse_heredoc() abort
1512+
function! s:VimLParser.parse_heredoc(prefix) abort
15131513
let node = s:Node(s:NODE_HEREDOC)
15141514
let node.pos = self.ea.cmdpos
15151515
let node.op = ''
@@ -1543,7 +1543,7 @@ function! s:VimLParser.parse_heredoc() abort
15431543
endif
15441544
let pos = self.reader.getpos()
15451545
let line = self.reader.getn(-1)
1546-
if line ==# node.op
1546+
if line ==# node.op || index(node.rlist, 'trim') != -1 && line ==# a:prefix . node.op
15471547
return node
15481548
endif
15491549
let linenode = s:Node(s:NODE_STRING)
@@ -1600,7 +1600,31 @@ function! s:VimLParser.parse_cmd_let() abort
16001600
call self.reader.getn(len(s2))
16011601
call self.reader.skip_white()
16021602
let node.op = s2
1603-
let node.right = self.parse_heredoc()
1603+
1604+
" compute allowed prefix for heredoc end marker (e.g. EOF)
1605+
let pos = self.reader.tell()
1606+
while self.reader.tell() > 0
1607+
if self.reader.peek() ==# '<EOL>'
1608+
call self.reader.seek_cur(1)
1609+
break
1610+
endif
1611+
call self.reader.seek_cur(-1)
1612+
endwhile
1613+
let prefix = ''
1614+
while s:TRUE
1615+
let c = self.reader.getn(1)
1616+
if c ==# ':'
1617+
" any presence of leading ':' disables prefix for heredoc end marker
1618+
let prefix = ''
1619+
break
1620+
elseif !s:iswhite(c)
1621+
break
1622+
endif
1623+
let prefix .= c
1624+
endwhile
1625+
call self.reader.seek_set(pos)
1626+
1627+
let node.right = self.parse_heredoc(prefix)
16041628
call self.add_node(node)
16051629
return
16061630
elseif s1 ==# '='

js/vimlfunc.js

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,10 @@ function viml_add(lst, item) {
9393
lst.push(item);
9494
}
9595

96+
function viml_index(lst, item) {
97+
return lst.indexOf(item);
98+
}
99+
96100
function viml_call(func, args) {
97101
return func.apply(null, args);
98102
}
@@ -223,4 +227,3 @@ function viml_has_key(obj, key) {
223227
function viml_stridx(a, b) {
224228
return a.indexOf(b);
225229
}
226-

js/vimlparser.js

Lines changed: 53 additions & 6 deletions
Large diffs are not rendered by default.

py/vimlfunc.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,13 @@ def viml_add(lst, item):
9898
lst.append(item)
9999

100100

101+
def viml_index(lst, item):
102+
try:
103+
return lst.index(item)
104+
except ValueError:
105+
return -1
106+
107+
101108
def viml_call(func, *args):
102109
func(*args)
103110

py/vimlparser.py

Lines changed: 47 additions & 5 deletions
Large diffs are not rendered by default.

0 commit comments

Comments
 (0)