Skip to content

Commit af2836f

Browse files
committedJul 31, 2019
improve class handling, especially for indent of comments
1 parent bb182d8 commit af2836f

File tree

1 file changed

+22
-16
lines changed

1 file changed

+22
-16
lines changed
 

‎py/pycompiler.vim

Lines changed: 22 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,7 @@ endfunction
106106
function s:PythonCompiler.__init__()
107107
let self.indent = ['']
108108
let self.lines = []
109+
let self.in_class = 0
109110
endfunction
110111

111112
function s:PythonCompiler.out(...)
@@ -354,13 +355,15 @@ function s:PythonCompiler.compile_function(node)
354355
call self.emptyline()
355356
endif
356357
call insert(rlist, 'self')
357-
call self.incindent(' ')
358358
call self.out('def %s(%s):', left, join(rlist, ', '))
359359
call self.incindent(' ')
360360
call self.compile_body(a:node.body)
361361
call self.decindent()
362-
call self.decindent()
363362
else
363+
if self.in_class
364+
let self.in_class = 0
365+
call self.decindent()
366+
endif
364367
if comment_start
365368
call insert(self.lines, '', comment_start)
366369
call insert(self.lines, '', comment_start)
@@ -399,24 +402,27 @@ function s:PythonCompiler.compile_let(node)
399402
let right = self.compile(a:node.right)
400403
if a:node.left isnot s:NIL
401404
let left = self.compile(a:node.left)
402-
if left == 'LvalueParser'
403-
call self.emptyline()
404-
call self.emptyline()
405-
call self.out('class LvalueParser(ExprParser):')
406-
return
407-
elseif left =~ '^\(VimLParser\|ExprTokenizer\|ExprParser\|LvalueParser\|StringReader\|Compiler\|RegexpParser\)$'
408-
call self.emptyline()
409-
call self.emptyline()
410-
call self.out('class %s:', left)
411-
return
412-
elseif left =~ '^\(VimLParser\|ExprTokenizer\|ExprParser\|LvalueParser\|StringReader\|Compiler\|RegexpParser\)\.'
405+
if left ==# 'LvalueParser'
406+
let class_def = 'LvalueParser(ExprParser)'
407+
elseif left =~# '^\(VimLParser\|ExprTokenizer\|ExprParser\|LvalueParser\|StringReader\|Compiler\|RegexpParser\)$'
408+
let class_def = left
409+
elseif left =~# '^\(VimLParser\|ExprTokenizer\|ExprParser\|LvalueParser\|StringReader\|Compiler\|RegexpParser\)\.'
413410
let left = matchstr(left, '\.\zs.*')
414-
call self.incindent(' ')
415411
call self.out('%s %s %s', left, op, right)
416-
call self.decindent()
412+
return
413+
else
414+
call self.out('%s %s %s', left, op, right)
417415
return
418416
endif
419-
call self.out('%s %s %s', left, op, right)
417+
418+
if self.in_class
419+
call self.decindent()
420+
endif
421+
call self.emptyline()
422+
call self.emptyline()
423+
call self.out('class %s:', class_def)
424+
let self.in_class = 1
425+
call self.incindent(' ')
420426
else
421427
let list = map(a:node.list, 'self.compile(v:val)')
422428
if a:node.rest isnot s:NIL

0 commit comments

Comments
 (0)
Please sign in to comment.