Skip to content

Commit 2fff43c

Browse files
committed
Merge pull request #19 from RianFuro/master
Added neovim support.
2 parents 8235a27 + 5dca267 commit 2fff43c

13 files changed

+167
-41
lines changed

autoload/vimlparser.vim

Lines changed: 44 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,16 @@ endfunction
1111
" @brief Read input as VimScript and return stringified AST.
1212
" @param input Input filename or string of VimScript.
1313
" @return Stringified AST.
14-
function! vimlparser#test(input)
14+
function! vimlparser#test(input, ...)
1515
try
16+
if a:0 > 0
17+
let l:neovim = a:1
18+
else
19+
let l:neovim = 0
20+
endif
1621
let i = type(a:input) == 1 && filereadable(a:input) ? readfile(a:input) : a:input
1722
let r = s:StringReader.new(i)
18-
let p = s:VimLParser.new()
23+
let p = s:VimLParser.new(l:neovim)
1924
let c = s:Compiler.new()
2025
echo join(c.compile(p.parse(r)), "\n")
2126
catch
@@ -409,7 +414,13 @@ function! s:VimLParser.new(...)
409414
return obj
410415
endfunction
411416

412-
function! s:VimLParser.__init__()
417+
function! s:VimLParser.__init__(...)
418+
if len(a:000) > 0
419+
let self.neovim = a:000[0]
420+
else
421+
let self.neovim = 0
422+
endif
423+
413424
let self.find_command_cache = {}
414425
endfunction
415426

@@ -823,6 +834,24 @@ function! s:VimLParser.find_command()
823834
endif
824835
endfor
825836

837+
if self.neovim
838+
for x in self.neovim_additional_commands
839+
if stridx(x.name, name) == 0 && len(name) >= x.minlen
840+
unlet cmd
841+
let cmd = x
842+
break
843+
endif
844+
endfor
845+
846+
for x in self.neovim_removed_commands
847+
if stridx(x.name, name) == 0 && len(name) >= x.minlen
848+
unlet cmd
849+
let cmd = s:NIL
850+
break
851+
endif
852+
endfor
853+
endif
854+
826855
" FIXME: user defined command
827856
if (cmd is s:NIL || cmd.name ==# 'Print') && name =~# '^[A-Z]'
828857
let name .= self.reader.read_alnum()
@@ -1789,6 +1818,18 @@ function! s:VimLParser.parse_wincmd()
17891818
call self.add_node(node)
17901819
endfunction
17911820

1821+
let s:VimLParser.neovim_additional_commands = [
1822+
\ {'name': 'tnoremap', 'minlen': 8, 'flags': 'EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN', 'parser': 'parse_cmd_common'}]
1823+
1824+
let s:VimLParser.neovim_removed_commands = [
1825+
\ {"name":"Print", "minlen":1, "flags":"RANGE|WHOLEFOLD|COUNT|EXFLAGS|TRLBAR|CMDWIN", "parser":"parse_cmd_common"},
1826+
\ {"name":"fixdel", "minlen":3, "flags":"TRLBAR|CMDWIN", "parser":"parse_cmd_common"},
1827+
\ {"name":"helpfind", "minlen":5, "flags":"EXTRA|NOTRLCOM", "parser":"parse_cmd_common"},
1828+
\ {"name":"open", "minlen":1, "flags":"RANGE|BANG|EXTRA", "parser":"parse_cmd_common"},
1829+
\ {"name":"shell", "minlen":2, "flags":"TRLBAR|CMDWIN", "parser":"parse_cmd_common"},
1830+
\ {"name":"tearoff", "minlen":2, "flags":"NEEDARG|EXTRA|TRLBAR|NOTRLCOM|CMDWIN", "parser":"parse_cmd_common"},
1831+
\ {"name":"gvim", "minlen":2, "flags":"BANG|FILES|EDITCMD|ARGOPT|TRLBAR|CMDWIN", "parser":"parse_cmd_common"}]
1832+
17921833
let s:VimLParser.builtin_commands = [
17931834
\ {'name': 'append', 'minlen': 1, 'flags': 'BANG|RANGE|ZEROR|TRLBAR|CMDWIN|MODIFY', 'parser': 'parse_cmd_append'},
17941835
\ {'name': 'abbreviate', 'minlen': 2, 'flags': 'EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN', 'parser': 'parse_cmd_common'},

js/vimlfunc.js

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,24 @@
11
//!/usr/bin/env nodejs
2-
// usage: nodejs vimlparser.js foo.vim
2+
// usage: nodejs vimlparser.js [--neovim] foo.vim
33

44
var fs = require('fs');
55
var util = require('util');
66

77
function main() {
8-
var r = new StringReader(viml_readfile(process.argv[2]));
9-
var p = new VimLParser();
8+
var neovim = false;
9+
var fpath = ''
10+
var args = process.argv;
11+
if (args.length == 4) {
12+
if (args[2] == '--neovim') {
13+
neovim = true;
14+
}
15+
fpath = args[3];
16+
} else if (args.length == 3) {
17+
neovim = false;
18+
fpath = args[2]
19+
}
20+
var r = new StringReader(viml_readfile(fpath));
21+
var p = new VimLParser(neovim);
1022
var c = new Compiler();
1123
var lines = c.compile(p.parse(r))
1224
for (var i in lines) {

js/vimlparser.js

Lines changed: 68 additions & 27 deletions
Large diffs are not rendered by default.

py/vimlfunc.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,15 @@
11
#!/usr/bin/env python3
2-
# usage: python3 vimlparser.py foo.vim
2+
# usage: python3 vimlparser.py [--neovim] foo.vim
33

44
import sys
55
import re
66
import inspect
77

88
def main():
9-
r = StringReader(viml_readfile(sys.argv[1]))
10-
p = VimLParser()
9+
use_neovim = sys.argv[1] == '--neovim'
10+
11+
r = StringReader(viml_readfile(sys.argv[-1]))
12+
p = VimLParser(use_neovim)
1113
c = Compiler()
1214
for line in c.compile(p.parse(r)):
1315
print(line)

py/vimlparser.py

Lines changed: 23 additions & 4 deletions
Large diffs are not rendered by default.

test/run.sh

100644100755
File mode changed.

test/run.vim

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,12 @@ function! s:run()
1010
let outfile = fnamemodify(vimfile, ':r') . '.out'
1111
let src = readfile(vimfile)
1212
let r = s:vimlparser.StringReader.new(src)
13-
let p = s:vimlparser.VimLParser.new()
13+
if vimfile =~# 'test_neo'
14+
let l:neovim = 1
15+
else
16+
let l:neovim = 0
17+
endif
18+
let p = s:vimlparser.VimLParser.new(l:neovim)
1419
let c = s:vimlparser.Compiler.new()
1520
try
1621
let out = c.compile(p.parse(r))

test/test_neo_helpfind_removed.ok

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
vimlparser: E492: Not an editor command: helpfind: line 1 col 1

test/test_neo_helpfind_removed.vim

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
helpfind

test/test_neo_tnoremap.ok

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
(excmd "tnoremap <Esc> <C-\\><C-N>")

0 commit comments

Comments
 (0)