1
1
2
2
call extend (s: , vimlparser#import ())
3
3
4
+ " Ignore undefined variable errors of vint
5
+ " vint: -ProhibitUsingUndeclaredVariable
6
+ let s: StringReader = s: StringReader
7
+ let s: VimLParser = s: VimLParser
8
+ let s: ExprParser = s: ExprParser
9
+ let s: NIL = s: NIL
10
+ " vint: +ProhibitUsingUndeclaredVariable
11
+
4
12
let s: opprec = {}
13
+ " vint: -ProhibitUsingUndeclaredVariable
5
14
let s: opprec [s: NODE_TERNARY ] = 1
6
15
let s: opprec [s: NODE_OR ] = 2
7
16
let s: opprec [s: NODE_AND ] = 3
@@ -58,6 +67,7 @@ let s:opprec[s:NODE_IDENTIFIER] = 9
58
67
let s: opprec [s: NODE_CURLYNAME ] = 9
59
68
let s: opprec [s: NODE_ENV ] = 9
60
69
let s: opprec [s: NODE_REG ] = 9
70
+ " vint: +ProhibitUsingUndeclaredVariable
61
71
62
72
" Reserved Python keywords (dict for faster lookup).
63
73
let s: reserved_keywords = {
@@ -110,8 +120,8 @@ function s:PythonCompiler.__init__()
110
120
endfunction
111
121
112
122
function s: PythonCompiler .out (... )
113
- if len (a: 000 ) == 1
114
- if a: 000 [0 ] = ~ ' ^)\+$'
123
+ if len (a: 000 ) == # 1
124
+ if a: 000 [0 ] = ~# ' ^)\+$'
115
125
let self .lines [-1 ] .= a: 000 [0 ]
116
126
else
117
127
call add (self .lines , self .indent [0 ] . a: 000 [0 ])
@@ -133,177 +143,181 @@ function s:PythonCompiler.decindent()
133
143
call remove (self .indent , 0 )
134
144
endfunction
135
145
146
+ " vint: -ProhibitUsingUndeclaredVariable
136
147
function s: PythonCompiler .compile (node)
137
- if a: node .type == s: NODE_TOPLEVEL
148
+ if a: node .type == # s: NODE_TOPLEVEL
138
149
return self .compile_toplevel (a: node )
139
- elseif a: node .type == s: NODE_COMMENT
150
+ elseif a: node .type == # s: NODE_COMMENT
140
151
return self .compile_comment (a: node )
141
- elseif a: node .type == s: NODE_EXCMD
152
+ elseif a: node .type == # s: NODE_EXCMD
142
153
return self .compile_excmd (a: node )
143
- elseif a: node .type == s: NODE_FUNCTION
154
+ elseif a: node .type == # s: NODE_FUNCTION
144
155
return self .compile_function (a: node )
145
- elseif a: node .type == s: NODE_DELFUNCTION
156
+ elseif a: node .type == # s: NODE_DELFUNCTION
146
157
return self .compile_delfunction (a: node )
147
- elseif a: node .type == s: NODE_RETURN
158
+ elseif a: node .type == # s: NODE_RETURN
148
159
return self .compile_return (a: node )
149
- elseif a: node .type == s: NODE_EXCALL
160
+ elseif a: node .type == # s: NODE_EXCALL
150
161
return self .compile_excall (a: node )
151
- elseif a: node .type == s: NODE_LET
162
+ elseif a: node .type == # s: NODE_LET
152
163
return self .compile_let (a: node )
153
- elseif a: node .type == s: NODE_UNLET
164
+ elseif a: node .type == # s: NODE_UNLET
154
165
return self .compile_unlet (a: node )
155
- elseif a: node .type == s: NODE_LOCKVAR
166
+ elseif a: node .type == # s: NODE_LOCKVAR
156
167
return self .compile_lockvar (a: node )
157
- elseif a: node .type == s: NODE_UNLOCKVAR
168
+ elseif a: node .type == # s: NODE_UNLOCKVAR
158
169
return self .compile_unlockvar (a: node )
159
- elseif a: node .type == s: NODE_IF
170
+ elseif a: node .type == # s: NODE_IF
160
171
return self .compile_if (a: node )
161
- elseif a: node .type == s: NODE_WHILE
172
+ elseif a: node .type == # s: NODE_WHILE
162
173
return self .compile_while (a: node )
163
- elseif a: node .type == s: NODE_FOR
174
+ elseif a: node .type == # s: NODE_FOR
164
175
return self .compile_for (a: node )
165
- elseif a: node .type == s: NODE_CONTINUE
176
+ elseif a: node .type == # s: NODE_CONTINUE
166
177
return self .compile_continue (a: node )
167
- elseif a: node .type == s: NODE_BREAK
178
+ elseif a: node .type == # s: NODE_BREAK
168
179
return self .compile_break (a: node )
169
- elseif a: node .type == s: NODE_TRY
180
+ elseif a: node .type == # s: NODE_TRY
170
181
return self .compile_try (a: node )
171
- elseif a: node .type == s: NODE_THROW
182
+ elseif a: node .type == # s: NODE_THROW
172
183
return self .compile_throw (a: node )
173
- elseif a: node .type == s: NODE_ECHO
184
+ elseif a: node .type == # s: NODE_ECHO
174
185
return self .compile_echo (a: node )
175
- elseif a: node .type == s: NODE_ECHON
186
+ elseif a: node .type == # s: NODE_ECHON
176
187
return self .compile_echon (a: node )
177
- elseif a: node .type == s: NODE_ECHOHL
188
+ elseif a: node .type == # s: NODE_ECHOHL
178
189
return self .compile_echohl (a: node )
179
- elseif a: node .type == s: NODE_ECHOMSG
190
+ elseif a: node .type == # s: NODE_ECHOMSG
180
191
return self .compile_echomsg (a: node )
181
- elseif a: node .type == s: NODE_ECHOERR
192
+ elseif a: node .type == # s: NODE_ECHOERR
182
193
return self .compile_echoerr (a: node )
183
- elseif a: node .type == s: NODE_EXECUTE
194
+ elseif a: node .type == # s: NODE_EXECUTE
184
195
return self .compile_execute (a: node )
185
- elseif a: node .type == s: NODE_TERNARY
196
+ elseif a: node .type == # s: NODE_TERNARY
186
197
return self .compile_ternary (a: node )
187
- elseif a: node .type == s: NODE_OR
198
+ elseif a: node .type == # s: NODE_OR
188
199
return self .compile_or (a: node )
189
- elseif a: node .type == s: NODE_AND
200
+ elseif a: node .type == # s: NODE_AND
190
201
return self .compile_and (a: node )
191
- elseif a: node .type == s: NODE_EQUAL
202
+ elseif a: node .type == # s: NODE_EQUAL
192
203
return self .compile_equal (a: node )
193
- elseif a: node .type == s: NODE_EQUALCI
204
+ elseif a: node .type == # s: NODE_EQUALCI
194
205
return self .compile_equalci (a: node )
195
- elseif a: node .type == s: NODE_EQUALCS
206
+ elseif a: node .type == # s: NODE_EQUALCS
196
207
return self .compile_equalcs (a: node )
197
- elseif a: node .type == s: NODE_NEQUAL
208
+ elseif a: node .type == # s: NODE_NEQUAL
198
209
return self .compile_nequal (a: node )
199
- elseif a: node .type == s: NODE_NEQUALCI
210
+ elseif a: node .type == # s: NODE_NEQUALCI
200
211
return self .compile_nequalci (a: node )
201
- elseif a: node .type == s: NODE_NEQUALCS
212
+ elseif a: node .type == # s: NODE_NEQUALCS
202
213
return self .compile_nequalcs (a: node )
203
- elseif a: node .type == s: NODE_GREATER
214
+ elseif a: node .type == # s: NODE_GREATER
204
215
return self .compile_greater (a: node )
205
- elseif a: node .type == s: NODE_GREATERCI
216
+ elseif a: node .type == # s: NODE_GREATERCI
206
217
return self .compile_greaterci (a: node )
207
- elseif a: node .type == s: NODE_GREATERCS
218
+ elseif a: node .type == # s: NODE_GREATERCS
208
219
return self .compile_greatercs (a: node )
209
- elseif a: node .type == s: NODE_GEQUAL
220
+ elseif a: node .type == # s: NODE_GEQUAL
210
221
return self .compile_gequal (a: node )
211
- elseif a: node .type == s: NODE_GEQUALCI
222
+ elseif a: node .type == # s: NODE_GEQUALCI
212
223
return self .compile_gequalci (a: node )
213
- elseif a: node .type == s: NODE_GEQUALCS
224
+ elseif a: node .type == # s: NODE_GEQUALCS
214
225
return self .compile_gequalcs (a: node )
215
- elseif a: node .type == s: NODE_SMALLER
226
+ elseif a: node .type == # s: NODE_SMALLER
216
227
return self .compile_smaller (a: node )
217
- elseif a: node .type == s: NODE_SMALLERCI
228
+ elseif a: node .type == # s: NODE_SMALLERCI
218
229
return self .compile_smallerci (a: node )
219
- elseif a: node .type == s: NODE_SMALLERCS
230
+ elseif a: node .type == # s: NODE_SMALLERCS
220
231
return self .compile_smallercs (a: node )
221
- elseif a: node .type == s: NODE_SEQUAL
232
+ elseif a: node .type == # s: NODE_SEQUAL
222
233
return self .compile_sequal (a: node )
223
- elseif a: node .type == s: NODE_SEQUALCI
234
+ elseif a: node .type == # s: NODE_SEQUALCI
224
235
return self .compile_sequalci (a: node )
225
- elseif a: node .type == s: NODE_SEQUALCS
236
+ elseif a: node .type == # s: NODE_SEQUALCS
226
237
return self .compile_sequalcs (a: node )
227
- elseif a: node .type == s: NODE_MATCH
238
+ elseif a: node .type == # s: NODE_MATCH
228
239
return self .compile_match (a: node )
229
- elseif a: node .type == s: NODE_MATCHCI
240
+ elseif a: node .type == # s: NODE_MATCHCI
230
241
return self .compile_matchci (a: node )
231
- elseif a: node .type == s: NODE_MATCHCS
242
+ elseif a: node .type == # s: NODE_MATCHCS
232
243
return self .compile_matchcs (a: node )
233
- elseif a: node .type == s: NODE_NOMATCH
244
+ elseif a: node .type == # s: NODE_NOMATCH
234
245
return self .compile_nomatch (a: node )
235
- elseif a: node .type == s: NODE_NOMATCHCI
246
+ elseif a: node .type == # s: NODE_NOMATCHCI
236
247
return self .compile_nomatchci (a: node )
237
- elseif a: node .type == s: NODE_NOMATCHCS
248
+ elseif a: node .type == # s: NODE_NOMATCHCS
238
249
return self .compile_nomatchcs (a: node )
239
- elseif a: node .type == s: NODE_IS
250
+ elseif a: node .type == # s: NODE_IS
240
251
return self .compile_is (a: node )
241
- elseif a: node .type == s: NODE_ISCI
252
+ elseif a: node .type == # s: NODE_ISCI
242
253
return self .compile_isci (a: node )
243
- elseif a: node .type == s: NODE_ISCS
254
+ elseif a: node .type == # s: NODE_ISCS
244
255
return self .compile_iscs (a: node )
245
- elseif a: node .type == s: NODE_ISNOT
256
+ elseif a: node .type == # s: NODE_ISNOT
246
257
return self .compile_isnot (a: node )
247
- elseif a: node .type == s: NODE_ISNOTCI
258
+ elseif a: node .type == # s: NODE_ISNOTCI
248
259
return self .compile_isnotci (a: node )
249
- elseif a: node .type == s: NODE_ISNOTCS
260
+ elseif a: node .type == # s: NODE_ISNOTCS
250
261
return self .compile_isnotcs (a: node )
251
- elseif a: node .type == s: NODE_ADD
262
+ elseif a: node .type == # s: NODE_ADD
252
263
return self .compile_add (a: node )
253
- elseif a: node .type == s: NODE_SUBTRACT
264
+ elseif a: node .type == # s: NODE_SUBTRACT
254
265
return self .compile_subtract (a: node )
255
- elseif a: node .type == s: NODE_CONCAT
266
+ elseif a: node .type == # s: NODE_CONCAT
256
267
return self .compile_concat (a: node )
257
- elseif a: node .type == s: NODE_MULTIPLY
268
+ elseif a: node .type == # s: NODE_MULTIPLY
258
269
return self .compile_multiply (a: node )
259
- elseif a: node .type == s: NODE_DIVIDE
270
+ elseif a: node .type == # s: NODE_DIVIDE
260
271
return self .compile_divide (a: node )
261
- elseif a: node .type == s: NODE_REMAINDER
272
+ elseif a: node .type == # s: NODE_REMAINDER
262
273
return self .compile_remainder (a: node )
263
- elseif a: node .type == s: NODE_NOT
274
+ elseif a: node .type == # s: NODE_NOT
264
275
return self .compile_not (a: node )
265
- elseif a: node .type == s: NODE_PLUS
276
+ elseif a: node .type == # s: NODE_PLUS
266
277
return self .compile_plus (a: node )
267
- elseif a: node .type == s: NODE_MINUS
278
+ elseif a: node .type == # s: NODE_MINUS
268
279
return self .compile_minus (a: node )
269
- elseif a: node .type == s: NODE_SUBSCRIPT
280
+ elseif a: node .type == # s: NODE_SUBSCRIPT
270
281
return self .compile_subscript (a: node )
271
- elseif a: node .type == s: NODE_SLICE
282
+ elseif a: node .type == # s: NODE_SLICE
272
283
return self .compile_slice (a: node )
273
- elseif a: node .type == s: NODE_DOT
284
+ elseif a: node .type == # s: NODE_DOT
274
285
return self .compile_dot (a: node )
275
- elseif a: node .type == s: NODE_CALL
286
+ elseif a: node .type == # s: NODE_CALL
276
287
return self .compile_call (a: node )
277
- elseif a: node .type == s: NODE_NUMBER
288
+ elseif a: node .type == # s: NODE_NUMBER
278
289
return self .compile_number (a: node )
279
- elseif a: node .type == s: NODE_BLOB
290
+ elseif a: node .type == # s: NODE_BLOB
280
291
return self .compile_blob (a: node )
281
- elseif a: node .type == s: NODE_STRING
292
+ elseif a: node .type == # s: NODE_STRING
282
293
return self .compile_string (a: node )
283
- elseif a: node .type == s: NODE_LIST
294
+ elseif a: node .type == # s: NODE_LIST
284
295
return self .compile_list (a: node )
285
- elseif a: node .type == s: NODE_DICT
296
+ elseif a: node .type == # s: NODE_DICT
286
297
return self .compile_dict (a: node )
287
- elseif a: node .type == s: NODE_OPTION
298
+ elseif a: node .type == # s: NODE_OPTION
288
299
return self .compile_option (a: node )
289
- elseif a: node .type == s: NODE_IDENTIFIER
300
+ elseif a: node .type == # s: NODE_IDENTIFIER
290
301
return self .compile_identifier (a: node )
291
- elseif a: node .type == s: NODE_CURLYNAME
302
+ elseif a: node .type == # s: NODE_CURLYNAME
292
303
return self .compile_curlyname (a: node )
293
- elseif a: node .type == s: NODE_ENV
304
+ elseif a: node .type == # s: NODE_ENV
294
305
return self .compile_env (a: node )
295
- elseif a: node .type == s: NODE_REG
306
+ elseif a: node .type == # s: NODE_REG
296
307
return self .compile_reg (a: node )
297
308
else
298
309
throw self .err (' Compiler: unknown node: %s' , string (a: node ))
299
310
endif
300
311
endfunction
312
+ " vint: +ProhibitUsingUndeclaredVariable
301
313
302
314
function s: PythonCompiler .compile_body (body)
303
315
let empty = 1
304
316
for node in a: body
305
317
call self .compile (node)
318
+ " vint: -ProhibitUsingUndeclaredVariable
306
319
if node.type != s: NODE_COMMENT
320
+ " vint: +ProhibitUsingUndeclaredVariable
307
321
let empty = 0
308
322
endif
309
323
endfor
@@ -359,13 +373,13 @@ endfunction
359
373
function s: PythonCompiler .compile_function (node)
360
374
let left = self .compile (a: node .left )
361
375
let rlist = map (a: node .rlist, ' self.compile(v:val)' )
362
- if ! empty (rlist) && rlist[-1 ] == ' ...'
376
+ if ! empty (rlist) && rlist[-1 ] == # ' ...'
363
377
let rlist[-1 ] = ' *a000'
364
378
endif
365
379
366
- if left = ~ ' ^\(VimLParser\|ExprTokenizer\|ExprParser\|LvalueParser\|StringReader\|Compiler\|RegexpParser\)\.'
380
+ if left = ~# ' ^\(VimLParser\|ExprTokenizer\|ExprParser\|LvalueParser\|StringReader\|Compiler\|RegexpParser\)\.'
367
381
let left = matchstr (left , ' \.\zs.*' )
368
- if left == ' new'
382
+ if left == # ' new'
369
383
return
370
384
endif
371
385
call self .insert_empty_lines_before_comment (1 )
@@ -405,7 +419,7 @@ endfunction
405
419
406
420
function s: PythonCompiler .compile_let (node)
407
421
let op = a: node .op
408
- if op == ' .='
422
+ if op == # ' .='
409
423
let op = ' +='
410
424
endif
411
425
let right = self .compile (a: node .right )
@@ -745,7 +759,7 @@ endfunction
745
759
function s: PythonCompiler .compile_subscript (node)
746
760
let left = self .compile (a: node .left )
747
761
let right = self .compile (a: node .right )
748
- if left == ' self'
762
+ if left == # ' self'
749
763
return printf (' getattr(%s, %s)' , left , right )
750
764
else
751
765
return printf (' %s[%s]' , left , right )
@@ -765,15 +779,15 @@ endfunction
765
779
function s: PythonCompiler .compile_call (node)
766
780
let rlist = map (a: node .rlist, ' self.compile(v:val)' )
767
781
let left = self .compile (a: node .left )
768
- if left == ' map'
782
+ if left == # ' map'
769
783
let r = s: StringReader .new ([eval (rlist[1 ])])
770
784
let p = s: ExprParser .new (r )
771
785
let n = p .parse ()
772
786
return printf (' [%s for vval in %s]' , self .compile (n ), rlist[0 ])
773
- elseif left == ' call' && rlist[0 ][0 ] = ~ ' ['' "]'
787
+ elseif left == # ' call' && rlist[0 ][0 ] = ~# ' ['' "]'
774
788
return printf (' viml_%s(*%s)' , rlist[0 ][1 :-2 ], rlist[1 ])
775
789
endif
776
- if left = ~ ' \.new$'
790
+ if left = ~# ' \.new$'
777
791
let left = matchstr (left , ' .*\ze\.new$' )
778
792
endif
779
793
if index (s: viml_builtin_functions , left ) != -1
@@ -787,7 +801,7 @@ function s:PythonCompiler.compile_number(node)
787
801
endfunction
788
802
789
803
function s: PythonCompiler .compile_string (node)
790
- if a: node .value[0 ] == " '"
804
+ if a: node .value[0 ] == # " '"
791
805
let s = substitute (a: node .value[1 :-2 ], " ''" , " '" , ' g' )
792
806
return ' "' . escape (s , ' \"' ) . ' "'
793
807
else
@@ -819,11 +833,11 @@ endfunction
819
833
820
834
function s: PythonCompiler .compile_identifier (node)
821
835
let name = a: node .value
822
- if name == ' a:000'
836
+ if name == # ' a:000'
823
837
let name = ' a000'
824
- elseif name == ' v:val'
838
+ elseif name == # ' v:val'
825
839
let name = ' vval'
826
- elseif name = ~ ' ^[sa]:'
840
+ elseif name = ~# ' ^[sa]:'
827
841
let name = name[2 :]
828
842
endif
829
843
if has_key (s: reserved_keywords , name)
@@ -892,9 +906,9 @@ endfunction
892
906
function ! s: numtoname (num)
893
907
let sig = printf (" function('%s')" , a: num )
894
908
for k in keys (s: )
895
- if type (s: [k ]) == type ({})
909
+ if type (s: [k ]) == # type ({})
896
910
for name in keys (s: [k ])
897
- if type (s: [k ][name]) == type (function (' tr' )) && string (s: [k ][name]) == sig
911
+ if type (s: [k ][name]) == # type (function (' tr' )) && string (s: [k ][name]) == # sig
898
912
return printf (' %s.%s' , k , name)
899
913
endif
900
914
endfor
0 commit comments