8000 Fix ordering of __future__, future, and builtins import lines · thecodingchicken/python-future@1d3f5f4 · GitHub
[go: up one dir, main page]

Skip to content

Commit 1d3f5f4

Browse files
committed
Fix ordering of __future__, future, and builtins import lines
1 parent b1d0420 commit 1d3f5f4

File tree

2 files changed

+19
-4
lines changed

2 files changed

+19
-4
lines changed

src/future/tests/base.py

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,10 +28,10 @@ def reformat_code(code):
2828
def order_future_lines(code):
2929
"""
3030
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.
3233
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.
3535
3636
See test_order_future_lines() for an example.
3737
"""
@@ -46,6 +46,9 @@ def order_future_lines(code):
4646
future_line_numbers = [i for i, line in enumerate(lines)
4747
if line.startswith('from future')]
4848

49+
builtins_line_numbers = [i for i, line in enumerate(lines)
50+
if line.startswith('from builtins')]
51+
4952
assert code.lstrip() == code, ('internal usage error: '
5053
'dedent the code before calling order_future_lines()')
5154

@@ -58,12 +61,18 @@ def mymin(numbers):
5861
assert mymax(uufuture_line_numbers) <= mymin(future_line_numbers), \
5962
'the __future__ and future imports are out of order'
6063

64+
# assert mymax(future_line_numbers) <= mymin(builtins_line_numbers), \
65+
# 'the future and builtins imports are out of order'
66+
6167
uul = sorted([lines[i] for i in uufuture_line_numbers])
6268
sorted_uufuture_lines = dict(zip(uufuture_line_numbers, uul))
6369

6470
fl = sorted([lines[i] for i in future_line_numbers])
6571
sorted_future_lines = dict(zip(future_line_numbers, fl))
6672

73+
bl = sorted([lines[i] for i in builtins_line_numbers])
74+
sorted_builtins_lines = dict(zip(builtins_line_numbers, bl))
75+
6776
# Replace the old unsorted "from __future__ import ..." lines with the
6877
# new sorted ones:
6978
new_lines = []
@@ -72,6 +81,8 @@ def mymin(numbers):
7281
new_lines.append(sorted_uufuture_lines[i])
7382
elif i in future_line_numbers:
7483
new_lines.append(sorted_future_lines[i])
84+
elif i in builtins_line_numbers:
85+
new_lines.append(sorted_builtins_lines[i])
7586
else:
7687
new_lines.append(lines[i])
7788
return '\n'.join(new_lines)

tests/test_future/test_futurize.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -980,18 +980,20 @@ def _fetch(url):
980980

981981
def test_order_future_lines(self):
982982
"""
983-
Tests the internal order_future_lines() method.
983+
Tests the internal order_future_lines() function.
984984
"""
985985
before = '''
986986
# comment here
987987
from __future__ import print_function
988988
from __future__ import absolute_import
989989
# blank line or comment here
990+
from future.utils import with_metaclass
990991
from builtins import zzz
991992
from builtins import aaa
992993
from builtins import blah
993994
# another comment
994995
996+
import something_else
995997
code_here
996998
more_code_here
997999
'''
@@ -1000,11 +1002,13 @@ def test_order_future_lines(self):
10001002
from __future__ import absolute_import
10011003
from __future__ import print_function
10021004
# blank line or comment here
1005+
from future.utils import with_metaclass
10031006
from builtins import aaa
10041007
from builtins import blah
10051008
from builtins import zzz
10061009
# another comment
10071010
1011+
import something_else
10081012
code_here
10091013
more_code_here
10101014
'''

0 commit comments

Comments
 (0)
0