#!/usr/bin/python

import ast
import sys

def get_next(lines, start):
    "Get indent of first non-blank line starting at line 'start'"
    for indent, content in lines[start:]:
        if content:
            return indent
    return 0

for filename in sys.argv[1:]:
    contents = open(filename).read()
    
    # check for extra imports
    nodes = list(ast.walk(ast.parse(contents)))
    imports = set(n.asname if n.asname is not None else n.name for n in nodes if isinstance(n, ast.alias))
    names = set(n.id for n in nodes if isinstance(n, ast.Name))
    names |= set(['division'])
    if imports - names:
        print filename, imports - names
    
    # redent
    res = []
    indents = [0]
    
    # parse lines, removing trailing whitespace and converting tabs
    for line in contents.splitlines(True):
        line = line.rstrip().replace('\t',' '*8)
        m = line.lstrip(' ')
        c = len(line) - len(m)
        
        if m:
            if c > indents[-1]:
                indents.append(c)
            elif c < indents[-1]:
                while c < indents[-1]:
                    indents.pop()
        
        res.append((len(indents) - 1, m))
    while res and not res[-1][1]:
        res.pop()
    
    # set indent for blank lines
    for i, (indent, content) in enumerate(res):
        if not content:
            res[i] = (get_next(res, i), '')
    
    out = ''.join(' '*4*indent + content + '\n' for indent, content in res)
    #assert ast.parse(contents) == ast.parse(out), (ast.parse(contents), ast.parse(out),)
    if out != contents:
        open(filename + '~', 'w').write(contents)
        open(filename, 'w').write(out)
