Skip to content

Commit bbfe973

Browse files
committed
fix
1 parent 3b9097f commit bbfe973

File tree

2 files changed

+52
-116
lines changed

2 files changed

+52
-116
lines changed

py/pycompiler.vim

+7-7
Original file line numberDiff line numberDiff line change
@@ -678,32 +678,32 @@ endfunction
678678

679679
function s:PythonCompiler.compile_match(node)
680680
let right = s:compile_regpat_node(a:node.right)
681-
return printf('viml_eqreg(%s, %s)', self.compile(a:node.right), right)
681+
return printf('viml_eqreg(%s, %s)', self.compile(a:node.left), right)
682682
endfunction
683683

684684
function s:PythonCompiler.compile_matchci(node)
685685
let right = s:compile_regpat_node(a:node.right)
686-
return printf('viml_eqregq(%s, %s)', self.compile(a:node.right), right)
686+
return printf('viml_eqregq(%s, %s)', self.compile(a:node.left), right)
687687
endfunction
688688

689689
function s:PythonCompiler.compile_matchcs(node)
690690
let right = s:compile_regpat_node(a:node.right)
691-
return printf('viml_eqregh(%s, %s)', self.compile(a:node.right), right)
691+
return printf('viml_eqregh(%s, %s)', self.compile(a:node.left), right)
692692
endfunction
693693

694694
function s:PythonCompiler.compile_nomatch(node)
695695
let right = s:compile_regpat_node(a:node.right)
696-
return printf('not viml_eqreg(%s, %s)', self.compile(a:node.right), right)
696+
return printf('not viml_eqreg(%s, %s)', self.compile(a:node.left), right)
697697
endfunction
698698

699699
function s:PythonCompiler.compile_nomatchci(node)
700700
let right = s:compile_regpat_node(a:node.right)
701-
return printf('not viml_eqregq(%s, %s, flags=re.IGNORECASE)', self.compile(a:node.right), right)
701+
return printf('not viml_eqregq(%s, %s, flags=re.IGNORECASE)', self.compile(a:node.left), right)
702702
endfunction
703703

704704
function s:PythonCompiler.compile_nomatchcs(node)
705705
let right = s:compile_regpat_node(a:node.right)
706-
return printf('not viml_eqregh(%s, %s)', self.compile(a:node.right), right)
706+
return printf('not viml_eqregh(%s, %s)', self.compile(a:node.left), right)
707707
endfunction
708708

709709
function s:PythonCompiler.compile_is(node)
@@ -965,7 +965,7 @@ function! s:compile_regpat_node(node) abort
965965
if !has_key(s:pat_vim2py, vimpat)
966966
throw s:Err(printf('the pattern does not exist: %s', vimpat), a:node.pos)
967967
endif
968-
return s:pat_vim2py[vimpat]
968+
return 'r"' . s:pat_vim2py[vimpat] . '"'
969969
endfunction
970970

971971
let s:viml_builtin_functions = map(copy(s:VimLParser.builtin_functions), 'v:val.name')

py/vimlparser.py

+45-109
Original file line numberDiff line numberDiff line change
@@ -29,70 +29,6 @@ class AttributeDict(dict):
2929
__delattr__ = dict.__delitem__
3030

3131

32-
pat_vim2py = {
33-
"[0-9a-zA-Z]": "[0-9a-zA-Z]",
34-
"[@*!=><&~#]": "[@*!=><&~#]",
35-
"\\<ARGOPT\\>": "\\bARGOPT\\b",
36-
"\\<BANG\\>": "\\bBANG\\b",
37-
"\\<EDITCMD\\>": "\\bEDITCMD\\b",
38-
"\\<NOTRLCOM\\>": "\\bNOTRLCOM\\b",
39-
"\\<TRLBAR\\>": "\\bTRLBAR\\b",
40-
"\\<USECTRLV\\>": "\\bUSECTRLV\\b",
41-
"\\<USERCMD\\>": "\\bUSERCMD\\b",
42-
"\\<\\(XFILE\\|FILES\\|FILE1\\)\\>": "\\b(XFILE|FILES|FILE1)\\b",
43-
"\\S": "\\S",
44-
"\\a": "[A-Za-z]",
45-
"\\d": "\\d",
46-
"\\h": "[A-Za-z_]",
47-
"\\s": "\\s",
48-
"\\v^d%[elete][lp]$": "^d(elete|elet|ele|el|e)[lp]$",
49-
"\\v^s%(c[^sr][^i][^p]|g|i[^mlg]|I|r[^e])":
50-
"^s(c[^sr][^i][^p]|g|i[^mlg]|I|r[^e])",
51-
"\\w": "[0-9A-Za-z_]",
52-
"\\w\\|[:#]": "[0-9A-Za-z_]|[:#]",
53-
"\\x": "[0-9A-Fa-f]",
54-
"^++": r"^\+\+",
55-
"^++bad=\\(keep\\|drop\\|.\\)\\>": "^\\+\\+bad=(keep|drop|.)\\b",
56-
"^++bad=drop": "^\\+\\+bad=drop",
57-
"^++bad=keep": "^\\+\\+bad=keep",
58-
"^++bin\\>": "^\\+\\+bin\\b",
59-
"^++edit\\>": "^\\+\\+edit\\b",
60-
"^++enc=\\S": "^\\+\\+enc=\\S",
61-
"^++encoding=\\S": "^\\+\\+encoding=\\S",
62-
"^++ff=\\(dos\\|unix\\|mac\\)\\>": "^\\+\\+ff=(dos|unix|mac)\\b",
63-
"^++fileformat=\\(dos\\|unix\\|mac\\)\\>":
64-
"^\\+\\+fileformat=(dos|unix|mac)\\b",
65-
"^++nobin\\>": "^\\+\\+nobin\\b",
66-
"^[A-Z]": "^[A-Z]",
67-
"^\\$\\w\\+": "^\\$[0-9A-Za-z_]+",
68-
"^\\(!\\|global\\|vglobal\\)$": "^(!|global|vglobal)$",
69-
"^\\(WHILE\\|FOR\\)$": "^(WHILE|FOR)$",
70-
"^\\(vimgrep\\|vimgrepadd\\|lvimgrep\\|lvimgrepadd\\)$":
71-
"^(vimgrep|vimgrepadd|lvimgrep|lvimgrepadd)$",
72-
"^\\d": "^\\d",
73-
"^\\h": "^[A-Za-z_]",
74-
"^\\s": "^\\s",
75-
"^\\s*\\\\": "^\\s*\\\\",
76-
"^[ \\t]$": "^[ \\t]$",
77-
"^[A-Za-z]$": "^[A-Za-z]$",
78-
"^[0-9A-Za-z]$": "^[0-9A-Za-z]$",
79-
"^[0-9]$": "^[0-9]$",
80-
"^[0-9A-Fa-f]$": "^[0-9A-Fa-f]$",
81-
"^[0-9A-Za-z_]$": "^[0-9A-Za-z_]$",
82-
"^[A-Za-z_]$": "^[A-Za-z_]$",
83-
"^[0-9A-Za-z_:#]$": "^[0-9A-Za-z_:#]$",
84-
"^[A-Za-z_][0-9A-Za-z_]*$": "^[A-Za-z_][0-9A-Za-z_]*$",
85-
"^[A-Z]$": "^[A-Z]$",
86-
"^[a-z]$": "^[a-z]$",
87-
"^[vgslabwt]:$\\|^\\([vgslabwt]:\\)\\?[A-Za-z_][0-9A-Za-z_#]*$":
88-
"^[vgslabwt]:$|^([vgslabwt]:)?[A-Za-z_][0-9A-Za-z_#]*$",
89-
"^[0-7]$": "^[0-7]$",
90-
"^[0-9A-Fa-f][0-9A-Fa-f]$": "^[0-9A-Fa-f][0-9A-Fa-f]$",
91-
r"^\.[0-9A-Fa-f]$": r"^\.[0-9A-Fa-f]$",
92-
"^[0-9A-Fa-f][^0-9A-Fa-f]$": "^[0-9A-Fa-f][^0-9A-Fa-f]$",
93-
}
94-
95-
9632
def viml_add(lst, item):
9733
lst.append(item)
9834

@@ -114,15 +50,15 @@ def viml_equalci(a, b):
11450

11551

11652
def viml_eqreg(s, reg):
117-
return re.search(pat_vim2py[reg], s, re.IGNORECASE)
53+
return re.search(reg, s, re.IGNORECASE)
11854

11955

12056
def viml_eqregh(s, reg):
121-
return re.search(pat_vim2py[reg], s)
57+
return re.search(reg, s)
12258

12359

12460
def viml_eqregq(s, reg):
125-
return re.search(pat_vim2py[reg], s, re.IGNORECASE)
61+
return re.search(reg, s, re.IGNORECASE)
12662

12763

12864
def viml_escape(s, chars):
@@ -378,64 +314,64 @@ def viml_stridx(a, b):
378314

379315

380316
def isalpha(c):
381-
return viml_eqregh(c, "^[A-Za-z]$")
317+
return viml_eqregh(c, r"^[A-Za-z]$")
382318

383319

384320
def isalnum(c):
385-
return viml_eqregh(c, "^[0-9A-Za-z]$")
321+
return viml_eqregh(c, r"^[0-9A-Za-z]$")
386322

387323

388324
def isdigit(c):
389-
return viml_eqregh(c, "^[0-9]$")
325+
return viml_eqregh(c, r"^[0-9]$")
390326

391327

392328
def isodigit(c):
393-
return viml_eqregh(c, "^[0-7]$")
329+
return viml_eqregh(c, r"^[0-7]$")
394330

395331

396332
def isxdigit(c):
397-
return viml_eqregh(c, "^[0-9A-Fa-f]$")
333+
return viml_eqregh(c, r"^[0-9A-Fa-f]$")
398334

399335

400336
def iswordc(c):
401-
return viml_eqregh(c, "^[0-9A-Za-z_]$")
337+
return viml_eqregh(c, r"^[0-9A-Za-z_]$")
402338

403339

404340
def iswordc1(c):
405-
return viml_eqregh(c, "^[A-Za-z_]$")
341+
return viml_eqregh(c, r"^[A-Za-z_]$")
406342

407343

408344
def iswhite(c):
409-
return viml_eqregh(c, "^[ \\t]$")
345+
return viml_eqregh(c, r"^[ \t]$")
410346

411347

412348
def isnamec(c):
413-
return viml_eqregh(c, "^[0-9A-Za-z_:#]$")
349+
return viml_eqregh(c, r"^[0-9A-Za-z_:#]$")
414350

415351

416352
def isnamec1(c):
417-
return viml_eqregh(c, "^[A-Za-z_]$")
353+
return viml_eqregh(c, r"^[A-Za-z_]$")
418354

419355

420356
def isargname(s):
421-
return viml_eqregh(s, "^[A-Za-z_][0-9A-Za-z_]*$")
357+
return viml_eqregh(s, r"^[A-Za-z_][0-9A-Za-z_]*$")
422358

423359

424360
def isvarname(s):
425-
return viml_eqregh(s, "^[vgslabwt]:$\\|^\\([vgslabwt]:\\)\\?[A-Za-z_][0-9A-Za-z_#]*$")
361+
return viml_eqregh(s, r"^[vgslabwt]:$|^([vgslabwt]:)?[A-Za-z_][0-9A-Za-z_#]*$")
426362

427363

428364
# FIXME:
429365
def isidc(c):
430-
return viml_eqregh(c, "^[0-9A-Za-z_]$")
366+
return viml_eqregh(c, r"^[0-9A-Za-z_]$")
431367

432368

433369
def isupper(c):
434-
return viml_eqregh(c, "^[A-Z]$")
370+
return viml_eqregh(c, r"^[A-Z]$")
435371

436372

437373
def islower(c):
438-
return viml_eqregh(c, "^[a-z]$")
374+
return viml_eqregh(c, r"^[a-z]$")
439375

440376

441377
def ExArg():
@@ -862,12 +798,12 @@ def parse_command(self):
862798
self.ea.forceit = TRUE
863799
else:
864800
self.ea.forceit = FALSE
865-
if not viml_eqregh(self.ea.cmd.flags, "\\<BANG\\>") and self.ea.forceit and not viml_eqregh(self.ea.cmd.flags, "\\<USERCMD\\>"):
801+
if not viml_eqregh(self.ea.cmd.flags, r"\bBANG\b") and self.ea.forceit and not viml_eqregh(self.ea.cmd.flags, r"\bUSERCMD\b"):
866802
raise VimLParserException(Err("E477: No ! allowed", self.ea.cmdpos))
867803
if self.ea.cmd.name != "!":
868804
self.reader.skip_white()
869805
self.ea.argpos = self.reader.getpos()
870-
if viml_eqregh(self.ea.cmd.flags, "\\<ARGOPT\\>"):
806+
if viml_eqregh(self.ea.cmd.flags, r"\bARGOPT\b"):
871807
self.parse_argopt()
872808
if self.ea.cmd.name == "write" or self.ea.cmd.name == "update":
873809
if self.reader.p(0) == ">":
@@ -892,7 +828,7 @@ def parse_command(self):
892828
self.reader.getn(1)
893829
self.ea.amount += 1
894830
self.reader.skip_white()
895-
if viml_eqregh(self.ea.cmd.flags, "\\<EDITCMD\\>") and not self.ea.usefilter:
831+
if viml_eqregh(self.ea.cmd.flags, r"\bEDITCMD\b") and not self.ea.usefilter:
896832
self.parse_argcmd()
897833
self._parse_command(self.ea.cmd.parser)
898834

@@ -1001,18 +937,18 @@ def find_command(self):
1001937
if c == "k":
1002938
self.reader.getn(1)
1003939
name = "k"
1004-
elif c == "s" and viml_eqregh(self.reader.peekn(5), "\\v^s%(c[^sr][^i][^p]|g|i[^mlg]|I|r[^e])"):
940+
elif c == "s" and viml_eqregh(self.reader.peekn(5), r"^s(c[^sr][^i][^p]|g|i[^mlg]|I|r[^e])"):
1005941
self.reader.getn(1)
1006942
name = "substitute"
1007-
elif viml_eqregh(c, "[@*!=><&~#]"):
943+
elif viml_eqregh(c, r"[@*!=><&~#]"):
1008944
self.reader.getn(1)
1009945
name = c
1010946
elif self.reader.peekn(2) == "py":
1011947
name = self.reader.read_alnum()
1012948
else:
1013949
pos = self.reader.tell()
1014950
name = self.reader.read_alpha()
1015-
if name != "del" and viml_eqregh(name, "\\v^d%[elete][lp]$"):
951+
if name != "del" and viml_eqregh(name, r"^d(elete|elet|ele|el|e)[lp]$"):
1016952
self.reader.seek_set(pos)
1017953
name = self.reader.getn(viml_len(name) - 1)
1018954
if name == "":
@@ -1037,7 +973,7 @@ def find_command(self):
1037973
cmd = NIL
1038974
break
1039975
# FIXME: user defined command
1040-
if (cmd is NIL or cmd.name == "Print") and viml_eqregh(name, "^[A-Z]"):
976+
if (cmd is NIL or cmd.name == "Print") and viml_eqregh(name, r"^[A-Z]"):
1041977
name += self.reader.read_alnum()
1042978
del cmd
1043979
cmd = AttributeDict({"name": name, "flags": "USERCMD", "parser": "parse_cmd_usercmd"})
@@ -1053,36 +989,36 @@ def parse_hashbang(self):
1053989
def parse_argopt(self):
1054990
while self.reader.p(0) == "+" and self.reader.p(1) == "+":
1055991
s = self.reader.peekn(20)
1056-
if viml_eqregh(s, "^++bin\\>"):
992+
if viml_eqregh(s, r"^\+\+bin\b"):
1057993
self.reader.getn(5)
1058994
self.ea.force_bin = 1
1059-
elif viml_eqregh(s, "^++nobin\\>"):
995+
elif viml_eqregh(s, r"^\+\+nobin\b"):
1060996
self.reader.getn(7)
1061997
self.ea.force_bin = 2
1062-
elif viml_eqregh(s, "^++edit\\>"):
998+
elif viml_eqregh(s, r"^\+\+edit\b"):
1063999
self.reader.getn(6)
10641000
self.ea.read_edit = 1
1065-
elif viml_eqregh(s, "^++ff=\\(dos\\|unix\\|mac\\)\\>"):
1001+
elif viml_eqregh(s, r"^\+\+ff=(dos|unix|mac)\b"):
10661002
self.reader.getn(5)
10671003
self.ea.force_ff = self.reader.read_alpha()
1068-
elif viml_eqregh(s, "^++fileformat=\\(dos\\|unix\\|mac\\)\\>"):
1004+
elif viml_eqregh(s, r"^\+\+fileformat=(dos|unix|mac)\b"):
10691005
self.reader.getn(13)
10701006
self.ea.force_ff = self.reader.read_alpha()
1071-
elif viml_eqregh(s, "^++enc=\\S"):
1007+
elif viml_eqregh(s, r"^\+\+enc=\S"):
10721008
self.reader.getn(6)
10731009
self.ea.force_enc = self.reader.read_nonwhite()
1074-
elif viml_eqregh(s, "^++encoding=\\S"):
1010+
elif viml_eqregh(s, r"^\+\+encoding=\S"):
10751011
self.reader.getn(11)
10761012
self.ea.force_enc = self.reader.read_nonwhite()
1077-
elif viml_eqregh(s, "^++bad=\\(keep\\|drop\\|.\\)\\>"):
1013+
elif viml_eqregh(s, r"^\+\+bad=(keep|drop|.)\b"):
10781014
self.reader.getn(6)
1079-
if viml_eqregh(s, "^++bad=keep"):
1015+
if viml_eqregh(s, r"^\+\+bad=keep"):
10801016
self.ea.bad_char = self.reader.getn(4)
1081-
elif viml_eqregh(s, "^++bad=drop"):
1017+
elif viml_eqregh(s, r"^\+\+bad=drop"):
10821018
self.ea.bad_char = self.reader.getn(4)
10831019
else:
10841020
self.ea.bad_char = self.reader.getn(1)
1085-
elif viml_eqregh(s, "^++"):
1021+
elif viml_eqregh(s, r"^\+\+"):
10861022
raise VimLParserException(Err("E474: Invalid Argument", self.reader.getpos()))
10871023
else:
10881024
break
@@ -1147,7 +1083,7 @@ def parse_cmd_modifier_range(self):
11471083
# TODO:
11481084
def parse_cmd_common(self):
11491085
end = self.reader.getpos()
1150-
if viml_eqregh(self.ea.cmd.flags, "\\<TRLBAR\\>") and not self.ea.usefilter:
1086+
if viml_eqregh(self.ea.cmd.flags, r"\bTRLBAR\b") and not self.ea.usefilter:
11511087
end = self.separate_nextcmd()
11521088
elif self.ea.cmd.name == "!" or self.ea.cmd.name == "global" or self.ea.cmd.name == "vglobal" or self.ea.usefilter:
11531089
while TRUE:
@@ -1187,24 +1123,24 @@ def separate_nextcmd(self):
11871123
if c == "<EOF>" or c == "<EOL>":
11881124
break
11891125
self.reader.get()
1190-
elif self.reader.peekn(2) == "`=" and viml_eqregh(self.ea.cmd.flags, "\\<\\(XFILE\\|FILES\\|FILE1\\)\\>"):
1126+
elif self.reader.peekn(2) == "`=" and viml_eqregh(self.ea.cmd.flags, r"\b(XFILE|FILES|FILE1)\b"):
11911127
self.reader.getn(2)
11921128
self.parse_expr()
11931129
c = self.reader.peekn(1)
11941130
if c != "`":
11951131
raise VimLParserException(Err(viml_printf("unexpected character: %s", c), self.reader.getpos()))
11961132
self.reader.getn(1)
1197-
elif c == "|" or c == "\n" or c == "\"" and not viml_eqregh(self.ea.cmd.flags, "\\<NOTRLCOM\\>") and (self.ea.cmd.name != "@" and self.ea.cmd.name != "*" or self.reader.getpos() != self.ea.argpos) and (self.ea.cmd.name != "redir" or self.reader.getpos().i != self.ea.argpos.i + 1 or pc != "@"):
1133+
elif c == "|" or c == "\n" or c == "\"" and not viml_eqregh(self.ea.cmd.flags, r"\bNOTRLCOM\b") and (self.ea.cmd.name != "@" and self.ea.cmd.name != "*" or self.reader.getpos() != self.ea.argpos) and (self.ea.cmd.name != "redir" or self.reader.getpos().i != self.ea.argpos.i + 1 or pc != "@"):
11981134
has_cpo_bar = FALSE
11991135
# &cpoptions =~ 'b'
1200-
if (not has_cpo_bar or not viml_eqregh(self.ea.cmd.flags, "\\<USECTRLV\\>")) and pc == "\\":
1136+
if (not has_cpo_bar or not viml_eqregh(self.ea.cmd.flags, r"\bUSECTRLV\b")) and pc == "\\":
12011137
self.reader.get()
12021138
else:
12031139
break
12041140
else:
12051141
self.reader.get()
12061142
pc = c
1207-
if not viml_eqregh(self.ea.cmd.flags, "\\<NOTRLCOM\\>"):
1143+
if not viml_eqregh(self.ea.cmd.flags, r"\bNOTRLCOM\b"):
12081144
end = nospend
12091145
return end
12101146

@@ -3151,7 +3087,7 @@ def __init__(self, lines):
31513087
viml_add(self.pos, [lnum + 1, col + 1, offset])
31523088
col += viml_len(c)
31533089
offset += viml_len(c)
3154-
while lnum + 1 < viml_len(lines) and viml_eqregh(lines[lnum + 1], "^\\s*\\\\"):
3090+
while lnum + 1 < viml_len(lines) and viml_eqregh(lines[lnum + 1], r"^\s*\\"):
31553091
skip = TRUE
31563092
col = 0
31573093
for c in viml_split(lines[lnum + 1], "\\zs"):
@@ -3276,11 +3212,11 @@ def read_blob(self):
32763212
r = ""
32773213
while 1:
32783214
s = self.peekn(2)
3279-
if viml_eqregh(s, "^[0-9A-Fa-f][0-9A-Fa-f]$"):
3215+
if viml_eqregh(s, r"^[0-9A-Fa-f][0-9A-Fa-f]$"):
32803216
r += self.getn(2)
3281-
elif viml_eqregh(s, "^\\.[0-9A-Fa-f]$"):
3217+
elif viml_eqregh(s, r"^\.[0-9A-Fa-f]$"):
32823218
r += self.getn(1)
3283-
elif viml_eqregh(s, "^[0-9A-Fa-f][^0-9A-Fa-f]$"):
3219+
elif viml_eqregh(s, r"^[0-9A-Fa-f][^0-9A-Fa-f]$"):
32843220
raise VimLParserException(Err("E973: Blob literal should have an even number of hex characters:" + s, self.getpos()))
32853221
else:
32863222
break

0 commit comments

Comments
 (0)