--- a/bin/sort-scala-imports Mon Jan 13 09:55:17 2014 -0500
+++ b/bin/sort-scala-imports Wed Jan 15 10:48:05 2014 -0500
@@ -18,42 +18,78 @@
class ImportGroup(object):
def __init__(self, line):
self.main_line = line.rstrip()
+ self.prefix = None
self.guts = []
+ def set_line(self):
+ """Set the main_line and guts for the given prefix and guts.
+
+ If the import will fit into 100 chars, the short group syntax will be
+ used. Otherwise the longer one will be used.
+
+ """
+ prefix = self.prefix
+ guts = self.guts
+
+ if not prefix:
+ # This is just a single-line, single-item import, so we don't need
+ # to do any setup.
+ return
+
+ single = '%s{%s%s%s}' % (prefix,
+ bracket_padding,
+ ', '.join(guts),
+ bracket_padding)
+ if len(single) > 100:
+ self.main_line = prefix + '{'
+ self.guts = guts
+ self.guts.sort(key=lambda s: s.lower())
+ else:
+ self.main_line = single
+ self.guts = []
+
def slurp(self):
global l, bracket_padding
+ line = self.main_line
if self.main_line.endswith('}'):
# This is a line like: import foo.{ a, b, c }
if bracket_padding is None:
- if self.main_line[self.main_line.index("{") + 1] == " ":
+ if line[line.index("{") + 1] == " ":
bracket_padding = " "
else:
bracket_padding = ""
- prefix, rest = self.main_line.split('{', 1)
+ prefix, rest = line.split('{', 1)
guts = [item.strip() for item in
re.split(", +| +|,", rest.strip('{}, '))]
- guts.sort(key=lambda s: s.lower())
+
+ self.prefix = prefix
+ self.guts = guts
- self.main_line = '%s{%s%s%s}' % (prefix,
- bracket_padding,
- ', '.join(guts),
- bracket_padding)
l = next_line()
- elif self.main_line.endswith('{'):
+ elif line.endswith('{'):
+ # This is the first line of a multi-line set
+ prefix = line.rstrip('{')
+ guts = []
while True:
l = next_line()
if l.rstrip().endswith('}'):
l = next_line()
break
else:
- self.guts.append(l.strip().rstrip(','))
+ guts.append(l.strip().rstrip(','))
+
+ self.prefix = prefix
+ self.guts = guts
else:
+ # Just a normal single import line, pass it on.
l = next_line()
def spit(self):
+ self.set_line()
+
sys.stdout.write(self.main_line + '\n')
if self.guts:
@@ -71,6 +107,9 @@
ig.slurp()
imports.append(ig)
+if bracket_padding is None:
+ bracket_padding = " "
+
imports.sort(key=lambda ig: ig.key())
for i in imports: