diff --git a/autoload/vimlparser.vim b/autoload/vimlparser.vim index 9d0d9d39..12e0439d 100644 --- a/autoload/vimlparser.vim +++ b/autoload/vimlparser.vim @@ -1339,7 +1339,7 @@ function! s:VimLParser.parse_cmd_function() if left.type == s:NODE_IDENTIFIER let s = left.value let ss = split(s, '\zs') - if ss[0] !=# '<' && !s:isupper(ss[0]) && stridx(s, ':') == -1 && stridx(s, '#') == -1 + if ss[0] !=# '<' && ss[0] !=# '_' && !s:isupper(ss[0]) && stridx(s, ':') == -1 && stridx(s, '#') == -1 throw s:Err(printf('E128: Function name must start with a capital or contain a colon: %s', s), left.pos) endif endif diff --git a/js/vimlparser.js b/js/vimlparser.js index 908df82a..bd53510e 100644 --- a/js/vimlparser.js +++ b/js/vimlparser.js @@ -1622,7 +1622,7 @@ VimLParser.prototype.parse_cmd_function = function() { if (left.type == NODE_IDENTIFIER) { var s = left.value; var ss = viml_split(s, "\\zs"); - if (ss[0] != "<" && !isupper(ss[0]) && viml_stridx(s, ":") == -1 && viml_stridx(s, "#") == -1) { + if (ss[0] != "<" && ss[0] != "_" && !isupper(ss[0]) && viml_stridx(s, ":") == -1 && viml_stridx(s, "#") == -1) { throw Err(viml_printf("E128: Function name must start with a capital or contain a colon: %s", s), left.pos); } } diff --git a/py/vimlparser.py b/py/vimlparser.py index 63c8b1a9..592f1a21 100644 --- a/py/vimlparser.py +++ b/py/vimlparser.py @@ -1338,7 +1338,7 @@ def parse_cmd_function(self): if left.type == NODE_IDENTIFIER: s = left.value ss = viml_split(s, "\\zs") - if ss[0] != "<" and not isupper(ss[0]) and viml_stridx(s, ":") == -1 and viml_stridx(s, "#") == -1: + if ss[0] != "<" and ss[0] != "_" and not isupper(ss[0]) and viml_stridx(s, ":") == -1 and viml_stridx(s, "#") == -1: raise VimLParserException(Err(viml_printf("E128: Function name must start with a capital or contain a colon: %s", s), left.pos)) # :function {name} if self.reader.peekn(1) != "(": diff --git a/test/test_funcname.ok b/test/test_funcname.ok new file mode 100644 index 00000000..d37d05ea --- /dev/null +++ b/test/test_funcname.ok @@ -0,0 +1,3 @@ +(function (_F)) +(function (s:SID)) +(function (SID)) diff --git a/test/test_funcname.vim b/test/test_funcname.vim new file mode 100644 index 00000000..b4011d27 --- /dev/null +++ b/test/test_funcname.vim @@ -0,0 +1,8 @@ +function _F() +endfunction + +function s:SID() +endfunction + +function SID() +endfunction