@@ -28,10 +28,10 @@ def reformat_code(code):
28
28
def order_future_lines (code ):
29
29
"""
30
30
Returns the code block with any ``__future__`` import lines sorted, and
31
- then any ``future`` import lines sorted.
31
+ then any ``future`` import lines sorted, then any ``builtins`` import lines
32
+ sorted.
32
33
33
- This only sorts the lines within the expected blocks:
10000
34
- __future__ first, then future imports, then regular code.
34
+ This only sorts the lines within the expected blocks.
35
35
36
36
See test_order_future_lines() for an example.
37
37
"""
@@ -46,6 +46,9 @@ def order_future_lines(code):
46
46
future_line_numbers = [i for i , line in enumerate (lines )
47
47
if line .startswith ('from future' )]
48
48
49
+ builtins_line_numbers = [i for i , line in enumerate (lines )
50
+ if line .startswith ('from builtins' )]
51
+
49
52
assert code .lstrip () == code , ('internal usage error: '
50
53
'dedent the code before calling order_future_lines()' )
51
54
@@ -58,12 +61,18 @@ def mymin(numbers):
58
61
assert mymax (uufuture_line_numbers ) <= mymin (future_line_numbers ), \
59
62
'the __future__ and future imports are out of order'
60
63
64
+ # assert mymax(future_line_numbers) <= mymin(builtins_line_numbers), \
65
+ # 'the future and builtins imports are out of order'
66
+
61
67
uul = sorted ([lines [i ] for i in uufuture_line_numbers ])
62
68
sorted_uufuture_lines = dict (zip (uufuture_line_numbers , uul ))
63
69
64
70
fl = sorted ([lines [i ] for i in future_line_numbers ])
65
71
sorted_future_lines = dict (zip (future_line_numbers , fl ))
66
72
73
+ bl = sorted ([lines [i ] for i in builtins_line_numbers ])
74
+ sorted_builtins_lines = dict (zip (builtins_line_numbers , bl ))
75
+
67
76
# Replace the old unsorted "from __future__ import ..." lines with the
68
77
# new sorted ones:
69
78
new_lines = []
@@ -72,6 +81,8 @@ def mymin(numbers):
72
81
new_lines .append (sorted_uufuture_lines [i ])
73
82
elif i in future_line_numbers :
74
83
new_lines .append (sorted_future_lines [i ])
84
+ elif i in builtins_line_numbers :
85
+ new_lines .append (sorted_builtins_lines [i ])
75
86
else :
76
87
new_lines .append (lines [i ])
77
88
return '\n ' .join (new_lines )
0 commit comments