Skip to content

Commit

Permalink
Simplfiy adding directives
Browse files Browse the repository at this point in the history
  • Loading branch information
asottile committed Jun 2, 2016
1 parent 5c3da6e commit cd191a4
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 22 deletions.
13 changes: 5 additions & 8 deletions Cheetah/legacy_compiler.py
Expand Up @@ -239,10 +239,7 @@ def _add_lvalue_indenting_directive(self, expr, line_col):

addFor = addWith = _add_lvalue_indenting_directive

def addReIndentingDirective(self, expr, line_col, dedent=True):
self.commitStrConst()
if dedent:
self.dedent()
def addReIndentingDirective(self, expr, line_col):
assert expr[-1] != ':'
expr = expr + ':'

Expand All @@ -252,13 +249,13 @@ def addReIndentingDirective(self, expr, line_col, dedent=True):

addFinally = addReIndentingDirective

def addExcept(self, expr, line_col, dedent=True):
def addExcept(self, expr, line_col):
self._update_locals('try:\n pass\n' + expr + ':\n pass')
self.addReIndentingDirective(expr, line_col, dedent=dedent)
self.addReIndentingDirective(expr, line_col)

def addElse(self, expr, line_col, dedent=True):
def addElse(self, expr, line_col):
expr = re.sub('else +if', 'elif', expr)
self.addReIndentingDirective(expr, line_col, dedent=dedent)
self.addReIndentingDirective(expr, line_col)

addElif = addElse

Expand Down
28 changes: 14 additions & 14 deletions Cheetah/legacy_parser.py
Expand Up @@ -772,22 +772,16 @@ def eatDirective(self):
if directiveParser:
directiveParser()
else:
if directive == 'compiler-settings':
def handler(*_):
pass
else:
handler = getattr(self._compiler, 'add' + directive.capitalize())

if directive in INDENTING_DIRECTIVES:
self.eatSimpleIndentingDirective(directive, callback=handler)
self.eatSimpleIndentingDirective(directive)
else:
assert directive in EXPRESSION_DIRECTIVES
line_col = self.getRowCol()
include_name = directive != 'py'
expr = self.eatSimpleExprDirective(
directive, include_name=include_name,
)
handler(expr, line_col=line_col)
self._add_directive(directive, expr, line_col)

def _eatRestOfDirectiveTag(self, isLineClearToStartToken, endOfFirstLinePos):
foundComment = False
Expand Down Expand Up @@ -836,7 +830,12 @@ def eatSimpleExprDirective(self, directive, include_name=True):
self._eatRestOfDirectiveTag(isLineClearToStartToken, endOfFirstLine)
return expr

def eatSimpleIndentingDirective(self, directiveName, callback):
def _add_directive(self, directive_name, expr, line_col):
if directive_name != 'compiler-settings':
add = getattr(self._compiler, 'add' + directive_name.capitalize())
add(expr, line_col)

def eatSimpleIndentingDirective(self, directiveName):
isLineClearToStartToken = self.isLineClearToStartToken()
endOfFirstLinePos = self.findEOL()
lineCol = self.getRowCol()
Expand All @@ -846,10 +845,8 @@ def eatSimpleIndentingDirective(self, directiveName, callback):
expr = self.getExpression(pyTokensToBreakAt=[':'])
if self.matchColonForSingleLineShortFormDirective():
self.advance() # skip over :
if directiveName in {'else', 'elif', 'except', 'finally'}:
callback(expr, lineCol, dedent=False)
else:
callback(expr, lineCol)
self._compiler.commitStrConst()
self._add_directive(directiveName, expr, lineCol)

self.getWhiteSpace(maximum=1)
self.parse(breakPoint=self.findEOL(gobble=True))
Expand All @@ -862,7 +859,10 @@ def eatSimpleIndentingDirective(self, directiveName, callback):
self._eatRestOfDirectiveTag(isLineClearToStartToken, endOfFirstLinePos)
if directiveName in CLOSABLE_DIRECTIVES:
self.pushToOpenDirectivesStack(directiveName)
callback(expr, lineCol)
if directiveName in {'else', 'elif', 'except', 'finally'}:
self._compiler.commitStrConst()
self._compiler.dedent()
self._add_directive(directiveName, expr, lineCol)

def eatEndDirective(self):
isLineClearToStartToken = self.isLineClearToStartToken()
Expand Down

0 comments on commit cd191a4

Please sign in to comment.