I found a bug where isort.core.process returns False when only changes to lines before imports were made, with no changes to raw import section.
isort.core.process:
...Returns True if there were changes that needed to be made (errors present) from what
was provided in the input_stream, otherwise False.
The bug results in isort not fixing files that require fixing only lines before imports.
For example isort file.py --lines-before-imports=10 does nothing for this file:
from a import b, x
foo = 'bar'
But this one will have 10 lines added before imports, just because imports are unsorted and isort.core.process returned True:
from a import x, b
foo = 'bar'
Example tests, 2 of which fail:
import isort
ln = '\n'
input_0 = "from a import b, x\n\nfoo = 'bar'\n"
input_1 = ln + input_0
input_0_unsorted = "from a import x, b\n\nfoo = 'bar'\n"
input_1_unsorted = ln + input_0_unsorted
# isort.code returns sorted code
# isort.check_code checks if code is correct
# Both functions call isort.core.process internally but isort.check_code gives us it's return value
assert isort.code(input_0) == input_0
assert isort.check_code(input_0)
assert isort.code(input_0, lines_before_imports=0) == input_0
assert isort.check_code(input_0, lines_before_imports=0)
assert isort.code(input_0, lines_before_imports=1) == input_1
assert not isort.check_code(input_0, lines_before_imports=1) # AssertionError
assert isort.code(input_1) == input_1
assert isort.check_code(input_1)
assert isort.code(input_1, lines_before_imports=0) == input_0
assert not isort.check_code(input_1, lines_before_imports=0) # AssertionError
assert isort.code(input_1, lines_before_imports=1) == input_1
assert isort.check_code(input_1, lines_before_imports=1)
assert isort.code(input_0_unsorted) == input_0
assert not isort.check_code(input_0_unsorted)
assert isort.code(input_0_unsorted, lines_before_imports=0) == input_0
assert not isort.check_code(input_0_unsorted, lines_before_imports=0)
assert isort.code(input_0_unsorted, lines_before_imports=1) == input_1
assert not isort.check_code(input_0_unsorted, lines_before_imports=1)
assert isort.code(input_1_unsorted) == input_1
assert not isort.check_code(input_1_unsorted)
assert isort.code(input_1_unsorted, lines_before_imports=0) == input_0
assert not isort.check_code(input_1_unsorted, lines_before_imports=0)
assert isort.code(input_1_unsorted, lines_before_imports=1) == input_1
assert not isort.check_code(input_1_unsorted, lines_before_imports=1)
I found a bug where
isort.core.processreturnsFalsewhen only changes to lines before imports were made, with no changes to raw import section.isort.core.process:The bug results in isort not fixing files that require fixing only lines before imports.
For example
isort file.py --lines-before-imports=10does nothing for this file:But this one will have 10 lines added before imports, just because imports are unsorted and
isort.core.processreturnedTrue:Example tests, 2 of which fail: