Skip to content

Commit 56201ac

Browse files
author
Tom Ferdinandt
committed
use auto detected newline instead of hardcoded \n for line splitting
1 parent fa6b006 commit 56201ac

2 files changed

Lines changed: 11 additions & 3 deletions

File tree

pre_commit_hooks/file_contents_sorter.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,18 +29,21 @@ def sort_file_contents(
2929
unique: bool = False,
3030
) -> int:
3131
before = list(f)
32+
# detect the line ending style of the file, based on the first line
33+
new_line = b'\r\n' if before and before[0].endswith(b'\r\n') else b'\n'
34+
3235
lines: Iterable[bytes] = (
33-
line.rstrip(b'\n\r') for line in before if line.strip()
36+
line.rstrip(new_line) for line in before if line.strip()
3437
)
3538
if unique:
3639
lines = set(lines)
3740
after = sorted(lines, key=key)
3841

3942
before_string = b''.join(before)
40-
after_string = b'\n'.join(after)
43+
after_string = new_line.join(after)
4144

4245
if after_string:
43-
after_string += b'\n'
46+
after_string += new_line
4447

4548
if before_string == after_string:
4649
return PASS

tests/file_contents_sorter_test.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,14 @@
1212
(
1313
(b'', [], PASS, b''),
1414
(b'\n', [], FAIL, b''),
15+
(b'\r\n', [], FAIL, b''),
1516
(b'\n\n', [], FAIL, b''),
1617
(b'lonesome\n', [], PASS, b'lonesome\n'),
1718
(b'missing_newline', [], FAIL, b'missing_newline\n'),
1819
(b'newline\nmissing', [], FAIL, b'missing\nnewline\n'),
1920
(b'missing\nnewline', [], FAIL, b'missing\nnewline\n'),
21+
(b'newline\r\nmissing', [], FAIL, b'missing\r\nnewline\r\n'),
22+
(b'missing\r\nnewline', [], FAIL, b'missing\r\nnewline\r\n'),
2023
(b'alpha\nbeta\n', [], PASS, b'alpha\nbeta\n'),
2124
(b'beta\nalpha\n', [], FAIL, b'alpha\nbeta\n'),
2225
(b'C\nc\n', [], PASS, b'C\nc\n'),
@@ -25,6 +28,8 @@
2528
(b'@\n-\n_\n#\n', [], FAIL, b'#\n-\n@\n_\n'),
2629
(b'extra\n\n\nwhitespace\n', [], FAIL, b'extra\nwhitespace\n'),
2730
(b'whitespace\n\n\nextra\n', [], FAIL, b'extra\nwhitespace\n'),
31+
(b'on\r\nwindows\r\n', [], PASS, b'on\r\nwindows\r\n'),
32+
(b'extra\r\n\r\n\r\nwindows\r\n', [], FAIL, b'extra\r\nwindows\r\n'),
2833
(
2934
b'fee\nFie\nFoe\nfum\n',
3035
[],

0 commit comments

Comments
 (0)