diff --git a/pywikibot/diff.py b/pywikibot/diff.py index 005da215d5..983707e113 100644 --- a/pywikibot/diff.py +++ b/pywikibot/diff.py @@ -93,25 +93,20 @@ def create_diff(self) -> Iterable[str]: 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."""