Skip to content

Commit bf89746

Browse files
committed
fixed funcarg parsing. F(a,) => OK, F(a ,b) => NG
1 parent 69816e6 commit bf89746

File tree

5 files changed

+18
-0
lines changed

5 files changed

+18
-0
lines changed

autoload/vimlparser.vim

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1225,8 +1225,17 @@ function! s:VimLParser.parse_cmd_function()
12251225
let varnode.pos = token.pos
12261226
let varnode.value = token.value
12271227
call add(node.rlist, varnode)
1228+
" XXX: Vim doesn't skip white space before comma. F(a ,b) => E475
1229+
if s:iswhite(self.reader.p(0))
1230+
throw s:Err(printf('unexpected token: %s', self.reader.p(0)), self.reader.getpos())
1231+
endif
12281232
let token = tokenizer.get()
12291233
if token.type == s:TOKEN_COMMA
1234+
" XXX: Vim allows last comma. F(a, b, ) => OK
1235+
if tokenizer.peek().type == s:TOKEN_PCLOSE
1236+
call tokenizer.get()
1237+
break
1238+
endif
12301239
elseif token.type == s:TOKEN_PCLOSE
12311240
break
12321241
else
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
vimlparser: unexpected token: : line 1 col 13
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
function F(a ,b)
2+
endfunction

test/test_xxx_funcarg_last_comma.ok

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
(function (F a))
2+
(function (G a))

test/test_xxx_funcarg_last_comma.vim

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
function F(a,)
2+
endfunction
3+
function G(a, )
4+
endfunction

0 commit comments

Comments
 (0)