Skip to content

Commit ea1b0d1

Browse files
committed
Add basic vspec support
1 parent be3783d commit ea1b0d1

File tree

9 files changed

+159
-67
lines changed

9 files changed

+159
-67
lines changed

autoload/vimlparser.vim

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,14 @@ function! vimlparser#test(input, ...) abort
1818
else
1919
let l:neovim = 0
2020
endif
21+
if a:0 > 1
22+
let l:vspec = a:2
23+
else
24+
let l:vspec = 0
25+
endif
2126
let i = type(a:input) ==# 1 && filereadable(a:input) ? readfile(a:input) : split(a:input, "\n")
2227
let r = s:StringReader.new(i)
23-
let p = s:VimLParser.new(l:neovim)
28+
let p = s:VimLParser.new(l:neovim, l:vspec)
2429
let c = s:Compiler.new()
2530
echo join(c.compile(p.parse(r)), "\n")
2631
catch
@@ -441,6 +446,12 @@ function! s:VimLParser.__init__(...) abort
441446
let self.neovim = 0
442447
endif
443448

449+
if len(a:000) > 1
450+
let self.vspec = a:000[1]
451+
else
452+
let self.vspec = 0
453+
endif
454+
444455
let self.find_command_cache = {}
445456
endfunction
446457

@@ -978,6 +989,16 @@ function! s:VimLParser.find_command() abort
978989
endfor
979990
endif
980991

992+
if self.vspec
993+
for x in self.vspec_additional_commands
994+
if x.name ==# name
995+
unlet cmd
996+
let cmd = x
997+
break
998+
endif
999+
endfor
1000+
endif
1001+
9811002
" FIXME: user defined command
9821003
if (cmd is# s:NIL || cmd.name ==# 'Print') && name =~# '^[A-Z]'
9831004
let name .= self.reader.read_alnum()
@@ -2157,6 +2178,14 @@ let s:VimLParser.neovim_removed_commands = [
21572178
\ {'name': 'tearoff', 'minlen':2, 'flags': 'NEEDARG|EXTRA|TRLBAR|NOTRLCOM|CMDWIN', 'parser': 'parse_cmd_common'},
21582179
\ {'name': 'gvim', 'minlen':2, 'flags': 'BANG|FILES|EDITCMD|ARGOPT|TRLBAR|CMDWIN', 'parser': 'parse_cmd_common'}]
21592180

2181+
let s:VimLParser.vspec_additional_commands = [
2182+
\ {'name': 'describe', 'flags': '', 'parser': 'parse_cmd_common'},
2183+
\ {'name': 'end', 'flags': '', 'parser': 'parse_cmd_common'},
2184+
\ {'name': 'it', 'flags': '', 'parser': 'parse_cmd_common'},
2185+
\ {'name': 'before', 'flags': '', 'parser': 'parse_cmd_common'},
2186+
\ {'name': 'after', 'flags': '', 'parser': 'parse_cmd_common'},
2187+
\ {'name': 'context', 'flags': '', 'parser': 'parse_cmd_common'}]
2188+
21602189
" To find new builtin_commands, run the below script.
21612190
" $ scripts/update_builtin_commands.sh /path/to/vim/src/ex_cmds.h
21622191
let s:VimLParser.builtin_commands = [

js/vimlfunc.js

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

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

77
function main() {
8-
var neovim = false;
9-
var fpath = ''
108
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-
}
9+
var options = args.slice(1, -1);
10+
var neovim = options.indexOf('--neovim') > -1;
11+
var vspec = options.indexOf('--vspec') > -1;
12+
var fpath = args[args.length - 1]
2013
var r = new StringReader(viml_readfile(fpath));
21-
var p = new VimLParser(neovim);
14+
var p = new VimLParser(neovim, vspec);
2215
var c = new Compiler();
2316
try {
2417
var lines = c.compile(p.parse(r));

js/vimlparser.js

Lines changed: 54 additions & 43 deletions
Large diffs are not rendered by default.

py/vimlfunc.py

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

44
import sys
55
import re
66

77

88
def main():
9-
use_neovim = sys.argv[1] == "--neovim"
9+
options = sys.argv[1:-1]
10+
11+
use_neovim = "--neovim" in options
12+
use_vspec = "--vspec" in options
1013

1114
r = StringReader(viml_readfile(sys.argv[-1]))
12-
p = VimLParser(use_neovim)
15+
p = VimLParser(use_neovim, use_vspec)
1316
c = Compiler()
1417
try:
1518
for line in c.compile(p.parse(r)):

py/vimlparser.py

Lines changed: 17 additions & 3 deletions
Large diffs are not rendered by default.

test/run.vim

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,15 @@ function! s:run()
1414
let r = s:vimlparser.StringReader.new(src)
1515
if vimfile =~# 'test_neo'
1616
let l:neovim = 1
17+
let l:vspec = 0
18+
elseif vimfile =~# 'test_vspec'
19+
let l:neovim = 0
20+
let l:vspec = 1
1721
else
1822
let l:neovim = 0
23+
let l:vspec = 0
1924
endif
20-
let p = s:vimlparser.VimLParser.new(l:neovim)
25+
let p = s:vimlparser.VimLParser.new(l:neovim, l:vspec)
2126
let c = s:vimlparser.Compiler.new()
2227
try
2328
let out = c.compile(p.parse(r))

test/run_command.sh

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,14 +19,16 @@ test_file() {
1919
return
2020
fi
2121

22-
local neovim=""
22+
local syntax=""
2323
if [[ $vimfile =~ "test_neo" ]]; then
24-
neovim="--neovim"
24+
syntax="--neovim"
25+
elif [[ $vimfile =~ "test_vspec" ]]; then
26+
syntax="--vspec"
2527
fi
2628

2729
rm -f ${outfile}
2830

29-
${vimlparser} ${neovim} ${vimfile} &> ${outfile}
31+
${vimlparser} ${syntax} ${vimfile} &> ${outfile}
3032

3133
diffout=$(diff -u ${outfile} ${okfile})
3234
if [ -n "$diffout" ]; then

test/test_vspec.ok

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
(excmd "describe 'test set name'")
2+
(excmd "before")
3+
(excmd "BeforeCommand")
4+
(excmd "end")
5+
(excmd "after")
6+
(excmd "AfterCommand")
7+
(excmd "end")
8+
(excmd "it 'test name'")
9+
(excmd "Expect 1 == 1")
10+
(excmd "end")
11+
(excmd "context 'context name'")
12+
(excmd "it 'context test name'")
13+
(excmd "Expect 2 == 2")
14+
(excmd "end")
15+
(excmd "end")
16+
(excmd "end")

test/test_vspec.vim

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
describe 'test set name'
2+
before
3+
BeforeCommand
4+
end
5+
6+
after
7+
AfterCommand
8+
end
9+
10+
it 'test name'
11+
Expect 1 == 1
12+
end
13+
14+
context 'context name'
15+
it 'context test name'
16+
Expect 2 == 2
17+
end
18+
end
19+
end

0 commit comments

Comments
 (0)