]> granicus.if.org Git - python/commitdiff
Issue #20387: Restore retention of indentation during untokenize.
authorDingyuan Wang <abcdoyle888@gmail.com>
Mon, 22 Jun 2015 02:01:12 +0000 (10:01 +0800)
committerDingyuan Wang <abcdoyle888@gmail.com>
Mon, 22 Jun 2015 02:01:12 +0000 (10:01 +0800)
Lib/tokenize.py

index cf18bf9f2db0bdbfce209fd6b5470c4ca1ecac89..4d93a83e29d1c7e0cadaaa4ab7e8fc50be95ea0c 100644 (file)
@@ -244,6 +244,8 @@ class Untokenizer:
 
     def untokenize(self, iterable):
         it = iter(iterable)
+        indents = []
+        startline = False
         for t in it:
             if len(t) == 2:
                 self.compat(t, it)
@@ -254,6 +256,21 @@ class Untokenizer:
                 continue
             if tok_type == ENDMARKER:
                 break
+            if tok_type == INDENT:
+                indents.append(token)
+                continue
+            elif tok_type == DEDENT:
+                indents.pop()
+                self.prev_row, self.prev_col = end
+                continue
+            elif tok_type in (NEWLINE, NL):
+                startline = True
+            elif startline and indents:
+                indent = indents[-1]
+                if start[1] >= len(indent):
+                    self.tokens.append(indent)
+                    self.prev_col = len(indent)
+                startline = False
             self.add_whitespace(start)
             self.tokens.append(token)
             self.prev_row, self.prev_col = end