bin/sort-scala-imports @ 0856b1d8b0c3
mor
| author | Steve Losh <steve@stevelosh.com> |
|---|---|
| date | Mon, 04 Nov 2013 10:33:01 -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)