| 12345678910111213141516171819202122232425262728 |
- def indent(func):
- """
- Decorator for allowing to use method as normal method or with
- context manager for auto-indenting code blocks.
- """
- def wrapper(self, line, *args, optimize=True, **kwds):
- last_line = self._indent_last_line
- line = func(self, line, *args, **kwds)
- # When two blocks have the same condition (such as value has to be dict),
- # do the check only once and keep it under one block.
- if optimize and last_line == line:
- self._code.pop()
- self._indent_last_line = line
- return Indent(self, line)
- return wrapper
- class Indent:
- def __init__(self, instance, line):
- self.instance = instance
- self.line = line
- def __enter__(self):
- self.instance._indent += 1
- def __exit__(self, type_, value, traceback):
- self.instance._indent -= 1
- self.instance._indent_last_line = self.line
|