bin/sort-scala-imports @ f12b9fb52d75
Fucking clojure
author |
Steve Losh <steve@stevelosh.com> |
date |
Fri, 20 Dec 2013 13:04:38 -0500 |
parents |
640ad1959549 |
children |
d5b61fd8e30a |
#!/usr/bin/env python
import sys
from operator import attrgetter
def next_line():
return sys.stdin.readline().rstrip('\n')
l = next_line()
while not l.startswith('import '):
sys.stdout.write(l + '\n')
l = next_line()
class ImportGroup(object):
def __init__(self, line):
self.main_line = line.rstrip()
self.guts = []
def slurp(self):
global l
if self.main_line.endswith('}'):
# This is a line like: import foo.{ a, b, c }
prefix, rest = self.main_line.split('{', 1)
guts = [item.strip() for item in
rest.rstrip('}, ').split(',')]
guts.sort(key=lambda s: s.lower())
self.main_line = '%s{ %s }' % (prefix, ', '.join(guts))
l = next_line()
elif self.main_line.endswith('{'):
while True:
l = next_line()
if l.rstrip().endswith('}'):
l = next_line()
break
else:
self.guts.append(l.strip().rstrip(','))
else:
l = next_line()
def spit(self):
sys.stdout.write(self.main_line + '\n')
if self.guts:
self.guts.sort(key=lambda g: g.lower())
sys.stdout.write(' ' +
',\n '.join(self.guts) +
'\n}\n')
def key(self):
return self.main_line.lower().replace('{', '@')
imports = []
while l.startswith('import '):
ig = ImportGroup(l)
ig.slurp()
imports.append(ig)
imports.sort(key=lambda ig: ig.key())
for i in imports:
i.spit()
sys.stdout.write(l + '\n')
for l in sys.stdin.readlines():
sys.stdout.write(l)