eric7/Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleStatisticsDialog.py

branch
eric7
changeset 8312
800c432b34c8
parent 8218
7c09585bd960
child 8318
962bce857696
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eric7/Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleStatisticsDialog.py	Sat May 15 18:45:04 2021 +0200
@@ -0,0 +1,117 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2011 - 2021 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing a dialog showing statistical data for the last code
+style checker run.
+"""
+
+import textwrap
+
+from PyQt5.QtCore import Qt
+from PyQt5.QtWidgets import QDialog, QTreeWidgetItem
+
+from .translations import getTranslatedMessage
+
+from .Ui_CodeStyleStatisticsDialog import Ui_CodeStyleStatisticsDialog
+
+import UI.PixmapCache
+
+
+class CodeStyleStatisticsDialog(QDialog, Ui_CodeStyleStatisticsDialog):
+    """
+    Class implementing a dialog showing statistical data for the last
+    code style checker run.
+    """
+    def __init__(self, statistics, parent=None):
+        """
+        Constructor
+        
+        @param statistics dictionary with the statistical data
+        @type dict
+        @param parent reference to the parent widget
+        @type QWidget
+        """
+        super().__init__(parent)
+        self.setupUi(self)
+        
+        stats = statistics.copy()
+        filesCount = stats["_FilesCount"]
+        filesIssues = stats["_FilesIssues"]
+        fixesCount = stats["_IssuesFixed"]
+        securityOk = stats["_SecurityOK"]
+        del stats["_FilesCount"]
+        del stats["_FilesIssues"]
+        del stats["_IssuesFixed"]
+        del stats["_SecurityOK"]
+        
+        totalIssues = 0
+        ignoresCount = 0
+        
+        textWrapper = textwrap.TextWrapper(width=80)
+        
+        for code in sorted(stats.keys()):
+            message = getTranslatedMessage(code, [], example=True)
+            if message is None:
+                continue
+            
+            self.__createItem(stats[code], code,
+                              "\n".join(textWrapper.wrap(message)))
+            totalIssues += stats[code]["total"]
+            ignoresCount += stats[code]["ignored"]
+        
+        self.totalIssues.setText(
+            self.tr("%n issue(s) found", "", totalIssues))
+        self.ignoredIssues.setText(
+            self.tr("%n issue(s) ignored", "", ignoresCount))
+        self.fixedIssues.setText(
+            self.tr("%n issue(s) fixed", "", fixesCount))
+        self.filesChecked.setText(
+            self.tr("%n file(s) checked", "", filesCount))
+        self.filesIssues.setText(
+            self.tr("%n file(s) with issues found", "", filesIssues))
+        self.securityOk.setText(
+            self.tr("%n security issue(s) acknowledged", "", securityOk))
+        
+        self.statisticsList.resizeColumnToContents(0)
+        self.statisticsList.resizeColumnToContents(1)
+        self.statisticsList.resizeColumnToContents(2)
+    
+    def __createItem(self, counts, code, message):
+        """
+        Private method to create an entry in the result list.
+        
+        @param counts dictionary containing the total and ignored occurrences
+            of the issue
+        @type dict
+        @param code of a code style issue message
+        @type str
+        @param message code style issue message to be shown
+        @type str
+        """
+        itm = QTreeWidgetItem(self.statisticsList, [
+            code, "{0:6d}".format(counts["total"] - counts["ignored"]),
+            "{0:6d}".format(counts["ignored"]), message])
+        if code.startswith(("W", "C", "M")):
+            itm.setIcon(0, UI.PixmapCache.getIcon("warning"))
+        elif code.startswith("E"):
+            itm.setIcon(0, UI.PixmapCache.getIcon("syntaxError"))
+        elif code.startswith("N"):
+            itm.setIcon(0, UI.PixmapCache.getIcon("namingError"))
+        elif code.startswith("D"):
+            itm.setIcon(0, UI.PixmapCache.getIcon("docstringError"))
+        elif code.startswith("S"):
+            itm.setIcon(0, UI.PixmapCache.getIcon("securityLow"))
+        elif code.startswith("P"):
+            itm.setIcon(0, UI.PixmapCache.getIcon("dirClosed"))
+        elif code.startswith("Y"):
+            itm.setIcon(0, UI.PixmapCache.getIcon("filePython"))
+        
+        itm.setTextAlignment(
+            0, Qt.AlignmentFlag.AlignHCenter | Qt.AlignmentFlag.AlignVCenter)
+        itm.setTextAlignment(
+            1, Qt.AlignmentFlag.AlignRight | Qt.AlignmentFlag.AlignVCenter)
+        itm.setTextAlignment(
+            2, Qt.AlignmentFlag.AlignRight | Qt.AlignmentFlag.AlignVCenter)

eric ide

mercurial