Skip to content

Commit dc18a69

Browse files
committed
Reorganize classes
1 parent b52445e commit dc18a69

File tree

8 files changed

+63
-49
lines changed

8 files changed

+63
-49
lines changed

src/difflib_parser/__init__.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
__all__ = ["DifflibParser", "DiffCode", "Diff"]
2+
3+
from .diff_code import DiffCode
4+
from .difflib_parser import DifflibParser, Diff

src/difflib_parser/diff.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
from dataclasses import dataclass
2+
from typing import List, Optional
3+
4+
from difflib_parser.diff_code import DiffCode
5+
6+
7+
@dataclass
8+
class Diff:
9+
code: DiffCode
10+
line: str
11+
left_changes: Optional[List[int]] = None
12+
right_changes: Optional[List[int]] = None
13+
newline: Optional[str] = None

src/difflib_parser/diff_change.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
from dataclasses import dataclass
2+
from typing import List
3+
4+
5+
@dataclass
6+
class DiffChange:
7+
left: List[int]
8+
right: List[int]
9+
newline: str
10+
skip_lines: int

src/difflib_parser/diff_code.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
from enum import Enum
2+
3+
4+
class DiffCode(Enum):
5+
SAME = 0
6+
RIGHT_ONLY = 1
7+
LEFT_ONLY = 2
8+
CHANGED = 3

src/difflib_parser/diff_line.py

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,4 @@
1-
from enum import Enum
2-
3-
4-
class DiffLineCode(Enum):
5-
ADDED = 0
6-
REMOVED = 1
7-
COMMON = 2
8-
MISSING = 3
1+
from difflib_parser.diff_line_code import DiffLineCode
92

103

114
class DiffLine:
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
from enum import Enum
2+
3+
4+
class DiffLineCode(Enum):
5+
ADDED = 0
6+
REMOVED = 1
7+
COMMON = 2
8+
MISSING = 3

src/difflib_parser/difflib_parser.py

Lines changed: 13 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,67 +1,45 @@
11
import difflib
2-
from dataclasses import dataclass
3-
from enum import Enum
42
from typing import Iterator, List
53

6-
from difflib_parser.diff_line import DiffLine, DiffLineCode
7-
8-
9-
class DiffCode(Enum):
10-
SAME = 0
11-
RIGHT_ONLY = 1
12-
LEFT_ONLY = 2
13-
CHANGED = 3
14-
15-
16-
@dataclass
17-
class DiffChange:
18-
left: List[int]
19-
right: List[int]
20-
newline: str
21-
skip_lines: int
22-
23-
24-
@dataclass
25-
class Diff:
26-
code: DiffCode
27-
line: str
28-
left_changes: List[int] | None = None
29-
right_changes: List[int] | None = None
30-
newline: str | None = None
4+
from difflib_parser.diff import Diff
5+
from difflib_parser.diff_change import DiffChange
6+
from difflib_parser.diff_code import DiffCode
7+
from difflib_parser.diff_line import DiffLine
8+
from difflib_parser.diff_line_code import DiffLineCode
319

3210

3311
# Parser inspired by https://github.com/yebrahim/difflibparser/blob/master/difflibparser.py
34-
class DiffParser:
12+
class DifflibParser:
3513
def __init__(self, left_text: List[str], right_text: List[str]):
3614
self.__left_text = left_text
3715
self.__right_text = right_text
3816
self.__diff = list(difflib.ndiff(self.__left_text, self.__right_text))
39-
self.__line_no = 0
4017

4118
def iter_diffs(self) -> Iterator[Diff]:
42-
while self.__line_no < len(self.__diff):
43-
current_line = self.__diff[self.__line_no]
19+
line_no = 0
20+
while line_no < len(self.__diff):
21+
current_line = self.__diff[line_no]
4422
diff_line = DiffLine.parse(current_line)
4523
if diff_line.line is None:
46-
self.__line_no += 1
24+
line_no += 1
4725
continue
4826
code = diff_line.code
4927
diff = Diff(code=DiffCode.SAME, line=diff_line.line)
5028

5129
if code == DiffLineCode.ADDED:
5230
diff.code = DiffCode.RIGHT_ONLY
5331
elif code == DiffLineCode.REMOVED:
54-
change = self.__get_incremental_change(self.__line_no)
32+
change = self.__get_incremental_change(line_no)
5533
if change is None:
5634
diff.code = DiffCode.LEFT_ONLY
5735
else:
5836
diff.code = DiffCode.CHANGED
5937
diff.left_changes = change.left
6038
diff.right_changes = change.right
6139
diff.newline = change.newline
62-
self.__line_no = change.skip_lines
40+
line_no = change.skip_lines
6341

64-
self.__line_no += 1
42+
line_no += 1
6543
yield diff
6644

6745
def __get_incremental_change(self, line_no: int) -> DiffChange | None:

test/test_difflib_parser.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,26 +2,26 @@
22

33

44
def test_diff_parser_same_lines():
5-
parser = difflib_parser.DiffParser(["Hello world"], ["Hello world"])
5+
parser = difflib_parser.DifflibParser(["Hello world"], ["Hello world"])
66
for diff in parser.iter_diffs():
77
assert diff.code == difflib_parser.DiffCode.SAME
88

99

1010
def test_diff_parser_added_line():
11-
parser = difflib_parser.DiffParser([], ["Hello world"])
11+
parser = difflib_parser.DifflibParser([], ["Hello world"])
1212
for diff in parser.iter_diffs():
1313
assert diff.code == difflib_parser.DiffCode.RIGHT_ONLY
1414

1515

1616
def test_diff_parser_removed_line():
17-
parser = difflib_parser.DiffParser(["Hello world"], [])
17+
parser = difflib_parser.DifflibParser(["Hello world"], [])
1818
for diff in parser.iter_diffs():
1919
assert diff.code == difflib_parser.DiffCode.LEFT_ONLY
2020

2121

2222
def test_diff_parser_changed_line_pattern_a():
2323
# Pattern a essentially looks at the case where existing characters were added/removed
24-
parser = difflib_parser.DiffParser(["Hello world"], ["Hola world"])
24+
parser = difflib_parser.DifflibParser(["Hello world"], ["Hola world"])
2525
for diff in parser.iter_diffs():
2626
assert diff.code == difflib_parser.DiffCode.CHANGED
2727
assert diff.line == "Hello world"
@@ -32,7 +32,7 @@ def test_diff_parser_changed_line_pattern_a():
3232

3333
def test_diff_parser_changed_line_pattern_b():
3434
# Pattern b essentially looks at the case where only additions were included
35-
parser = difflib_parser.DiffParser(["Hello world"], ["Hello world!"])
35+
parser = difflib_parser.DifflibParser(["Hello world"], ["Hello world!"])
3636
for diff in parser.iter_diffs():
3737
assert diff.code == difflib_parser.DiffCode.CHANGED
3838
assert diff.line == "Hello world"
@@ -43,7 +43,7 @@ def test_diff_parser_changed_line_pattern_b():
4343

4444
def test_diff_parser_changed_line_pattern_c():
4545
# Pattern c essentially looks at the case where only removals were included
46-
parser = difflib_parser.DiffParser(["Hello world"], ["Hello worl"])
46+
parser = difflib_parser.DifflibParser(["Hello world"], ["Hello worl"])
4747
for diff in parser.iter_diffs():
4848
assert diff.code == difflib_parser.DiffCode.CHANGED
4949
assert diff.line == "Hello world"

0 commit comments

Comments
 (0)