diff options
| author | Danilo M. <danix@danix.xyz> | 2026-10-20 11:30:36 +0200 |
|---|---|---|
| committer | Danilo M. <danix@danix.xyz> | 2026-10-20 11:30:36 +0200 |
| commit | d756256c775c754aed07f8c518b2b8f589ea2948 (patch) | |
| tree | f8adb23e59240fe408d47627809503c9a078efe7 | |
| parent | febdd512474a7ffe358b01c15b72871c3f862170 (diff) | |
| download | sb-builder-d756256c775c754aed07f8c518b2b8f589ea2948.tar.gz sb-builder-d756256c775c754aed07f8c518b2b8f589ea2948.zip | |
Hint diff dialog: color added, removed and hunk lines
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
| -rw-r--r-- | sb_builder/hints_tab.py | 15 | ||||
| -rw-r--r-- | tests/test_gui.py | 5 |
2 files changed, 19 insertions, 1 deletions
diff --git a/sb_builder/hints_tab.py b/sb_builder/hints_tab.py index 8d0bed4..2956abc 100644 --- a/sb_builder/hints_tab.py +++ b/sb_builder/hints_tab.py @@ -20,7 +20,7 @@ import difflib import os from PyQt6.QtCore import Qt, pyqtSignal -from PyQt6.QtGui import QColor, QFontDatabase, QKeySequence, QShortcut +from PyQt6.QtGui import QColor, QFontDatabase, QKeySequence, QShortcut, QSyntaxHighlighter from PyQt6.QtWidgets import (QCheckBox, QDialog, QHBoxLayout, QLabel, QLineEdit, QListWidget, QListWidgetItem, QMessageBox, QPlainTextEdit, QPushButton, QSplitter, QTableWidget, QTableWidgetItem, QVBoxLayout, QWidget) @@ -206,6 +206,18 @@ class HintsTab(QWidget): self.reload() +class DiffColors(QSyntaxHighlighter): + """Unified diff colors: added green, removed red, hunk headers blue.""" + + COLORS = (("+++", None), ("---", None), ("+", STATUS["ok"]), ("-", STATUS["failed"]), + ("@@", "#3b8bd0")) + + def highlightBlock(self, text): + color = next((c for prefix, c in self.COLORS if text.startswith(prefix)), None) + if color: + self.setFormat(0, len(text), QColor(color)) + + class HintResultDialog(QDialog): """After a hint job: each changed package's diff, Revert per package, Build these.""" @@ -224,6 +236,7 @@ class HintResultDialog(QDialog): self.list.addItem(item) self.list.currentItemChanged.connect(self._show) self.diff = QPlainTextEdit(readOnly=True) + self.colors = DiffColors(self.diff.document()) self.diff.setFont(QFontDatabase.systemFont(QFontDatabase.SystemFont.FixedFont)) split = QSplitter() split.addWidget(self.list) diff --git a/tests/test_gui.py b/tests/test_gui.py index 891584b..8a5b6e3 100644 --- a/tests/test_gui.py +++ b/tests/test_gui.py @@ -515,6 +515,11 @@ class SmokeTest(unittest.TestCase): self.assertEqual(len(w.hint_dialogs), 1) d = w.hint_dialogs[0] self.assertIn('-VERSION="3.11.1"\n+VERSION="3.12.0"', d.diff.toPlainText()) + doc = d.diff.document() + colors = {doc.findBlockByNumber(i).text()[:3]: + doc.findBlockByNumber(i).layout().formats()[0].format.foreground().color().name() + for i in range(doc.blockCount()) if doc.findBlockByNumber(i).layout().formats()} + self.assertEqual(colors, {"@@ ": "#3b8bd0", '-VE': "#d03b3b", '+VE': "#0ca30c"}) d.revert() d.revert() # a second revert must not reach the helper: it would delete the hint self.assertEqual([c for c in remote.calls if c[0] == "hint-revert"], [("hint-revert", "nuclei")]) |
