jenkins-bot submitted this change.

View Change

Approvals: Xqt: Looks good to me, approved jenkins-bot: Verified
IMPR: simplify diff.Hunk.create_diff

- remove check_line and replace it with a single f-string
- create a prefix dict for tags and prefixes
- combine processing for equal and delete tags

Change-Id: Ia1e0e1aff06ee440f37ffed92605d62d7e0c60ba
---
M pywikibot/diff.py
1 file changed, 8 insertions(+), 13 deletions(-)

diff --git a/pywikibot/diff.py b/pywikibot/diff.py
index 005da21..983707e 100644
--- a/pywikibot/diff.py
+++ b/pywikibot/diff.py
@@ -93,25 +93,20 @@
Check each line ends with line feed to prevent behaviour like
:issue:`46395`
"""
- def check_line(line: str) -> str:
- r"""Make sure each line ends with '\n'."""
- return line if line.endswith('\n') else line + '\n'
-
+ lf = '\n' # required for Python < 3.12
+ prefix = {'insert': '+ ', 'delete': '- ', 'replace': '', 'equal': ' '}
for tag, i1, i2, j1, j2 in self.group:
# equal/delete/insert add additional space after the sign as it's
# what difflib.ndiff does do too.
- if tag == 'equal':
- for line in self.a[i1:i2]:
- yield ' ' + check_line(line)
- elif tag == 'delete':
- for line in self.a[i1:i2]:
- yield '- ' + check_line(line)
- elif tag == 'insert':
+ if tag == 'insert':
for line in self.b[j1:j2]:
- yield '+ ' + check_line(line)
+ yield f'{prefix[tag]}{line.strip(lf)}{lf}'
elif tag == 'replace':
for line in difflib.ndiff(self.a[i1:i2], self.b[j1:j2]):
- yield check_line(line)
+ yield f'{prefix[tag]}{line.strip(lf)}{lf}'
+ else: # equal, delete
+ for line in self.a[i1:i2]:
+ yield f'{prefix[tag]}{line.strip(lf)}{lf}'

def format_diff(self) -> Iterable[str]:
"""Color diff lines."""

To view, visit change 1101838. To unsubscribe, or for help writing mail filters, visit settings.

Gerrit-MessageType: merged
Gerrit-Project: pywikibot/core
Gerrit-Branch: master
Gerrit-Change-Id: Ia1e0e1aff06ee440f37ffed92605d62d7e0c60ba
Gerrit-Change-Number: 1101838
Gerrit-PatchSet: 3
Gerrit-Owner: Xqt <info@gno.de>
Gerrit-Reviewer: Xqt <info@gno.de>
Gerrit-Reviewer: jenkins-bot