eric6/Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py

branch
maintenance
changeset 8043
0acf98cd089a
parent 7980
2c3f14a3c595
child 8143
2c730d5fd177
--- a/eric6/Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py	Sun Jan 17 13:53:08 2021 +0100
+++ b/eric6/Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py	Mon Feb 01 10:38:16 2021 +0100
@@ -9,12 +9,13 @@
 
 import os
 import fnmatch
+import copy
 
 from PyQt5.QtCore import pyqtSlot, Qt, QTimer, QCoreApplication
 from PyQt5.QtGui import QIcon
 from PyQt5.QtWidgets import (
     QDialog, QTreeWidgetItem, QAbstractButton, QDialogButtonBox, QApplication,
-    QHeaderView, QListWidgetItem
+    QHeaderView, QListWidgetItem, QInputDialog, QLineEdit
 )
 
 from E5Gui.E5Application import e5App
@@ -27,6 +28,10 @@
 
 from . import pycodestyle
 
+from .Miscellaneous.MiscellaneousDefaults import (
+    MiscellaneousCheckerDefaultArgs
+)
+
 try:
     basestring          # __IGNORE_WARNING__
 except Exception:
@@ -155,6 +160,8 @@
         
         self.addBuiltinButton.setIcon(UI.PixmapCache.getIcon("plus"))
         self.deleteBuiltinButton.setIcon(UI.PixmapCache.getIcon("minus"))
+        self.addWhitelistButton.setIcon(UI.PixmapCache.getIcon("plus"))
+        self.deleteWhitelistButton.setIcon(UI.PixmapCache.getIcon("minus"))
         
         self.restartButton.setEnabled(False)
         self.fixButton.setEnabled(False)
@@ -449,24 +456,37 @@
         if "LineComplexityScore" not in self.__data:
             self.__data["LineComplexityScore"] = 10
         if "ValidEncodings" not in self.__data:
-            self.__data["ValidEncodings"] = "latin-1, utf-8"
+            self.__data["ValidEncodings"] = (
+                MiscellaneousCheckerDefaultArgs["CodingChecker"]
+            )
         if (
             "CopyrightMinFileSize" not in self.__data or
             "CopyrightAuthor" not in self.__data
         ):
-            self.__data["CopyrightMinFileSize"] = 0
-            self.__data["CopyrightAuthor"] = ""
+            self.__data["CopyrightMinFileSize"] = (
+                MiscellaneousCheckerDefaultArgs[
+                    "CopyrightChecker"]["MinFilesize"]
+            )
+            self.__data["CopyrightAuthor"] = (
+                MiscellaneousCheckerDefaultArgs["CopyrightChecker"]["Author"]
+            )
         if "FutureChecker" not in self.__data:
             self.__data["FutureChecker"] = ""
         if "BuiltinsChecker" not in self.__data:
-            self.__data["BuiltinsChecker"] = {
-                "str": ["unicode", ],
-                "chr": ["unichr", ],
-            }
+            self.__data["BuiltinsChecker"] = copy.deepcopy(
+                MiscellaneousCheckerDefaultArgs["BuiltinsChecker"]
+            )
+        
         if "CommentedCodeChecker" not in self.__data:
-            self.__data["CommentedCodeChecker"] = {
-                "Aggressive": False,
-            }
+            self.__data["CommentedCodeChecker"] = copy.deepcopy(
+                MiscellaneousCheckerDefaultArgs["CommentedCodeChecker"]
+            )
+        if "WhiteList" not in self.__data["CommentedCodeChecker"]:
+            self.__data["CommentedCodeChecker"]["WhiteList"] = (
+                MiscellaneousCheckerDefaultArgs[
+                    "CommentedCodeChecker"]["WhiteList"][:]
+            )
+        
         if "AnnotationsChecker" not in self.__data:
             self.__data["AnnotationsChecker"] = {
                 "MinimumCoverage": 75,
@@ -526,6 +546,8 @@
         self.__initBuiltinsIgnoreList(self.__data["BuiltinsChecker"])
         self.aggressiveCheckBox.setChecked(
             self.__data["CommentedCodeChecker"]["Aggressive"])
+        self.__initCommentedCodeCheckerWhiteList(
+            self.__data["CommentedCodeChecker"]["WhiteList"])
         self.minAnnotationsCoverageSpinBox.setValue(
             self.__data["AnnotationsChecker"]["MinimumCoverage"])
         self.maxAnnotationsComplexitySpinBox.setValue(
@@ -677,6 +699,7 @@
                 "BuiltinsChecker": self.__getBuiltinsIgnoreList(),
                 "CommentedCodeChecker": {
                     "Aggressive": self.aggressiveCheckBox.isChecked(),
+                    "WhiteList": self.__getCommentedCodeCheckerWhiteList(),
                 }
             }
             annotationArgs = {
@@ -1082,6 +1105,7 @@
                 "BuiltinsChecker": self.__getBuiltinsIgnoreList(),
                 "CommentedCodeChecker": {
                     "Aggressive": self.aggressiveCheckBox.isChecked(),
+                    "WhiteList": self.__getCommentedCodeCheckerWhiteList(),
                 },
                 "AnnotationsChecker": {
                     "MinimumCoverage":
@@ -1331,20 +1355,43 @@
             int(Preferences.Prefs.settings.value(
                 "PEP8/LineComplexityScore", 10)))
         self.encodingsEdit.setText(Preferences.Prefs.settings.value(
-            "PEP8/ValidEncodings", "latin-1, utf-8"))
+            "PEP8/ValidEncodings",
+            MiscellaneousCheckerDefaultArgs["CodingChecker"]
+        ))
         self.copyrightFileSizeSpinBox.setValue(int(
-            Preferences.Prefs.settings.value("PEP8/CopyrightMinFileSize", 0)))
+            Preferences.Prefs.settings.value(
+                "PEP8/CopyrightMinFileSize",
+                MiscellaneousCheckerDefaultArgs[
+                    "CopyrightChecker"]["MinFilesize"]
+            )
+        ))
         self.copyrightAuthorEdit.setText(
-            Preferences.Prefs.settings.value("PEP8/CopyrightAuthor", ""))
+            Preferences.Prefs.settings.value(
+                "PEP8/CopyrightAuthor",
+                MiscellaneousCheckerDefaultArgs["CopyrightChecker"]["Author"]
+            )
+        )
         self.__initFuturesList(
             Preferences.Prefs.settings.value("PEP8/FutureChecker", ""))
         self.__initBuiltinsIgnoreList(Preferences.toDict(
-            Preferences.Prefs.settings.value("PEP8/BuiltinsChecker", {
-                "str": ["unicode", ],
-                "chr": ["unichr", ],
-            })))
+            Preferences.Prefs.settings.value(
+                "PEP8/BuiltinsChecker",
+                MiscellaneousCheckerDefaultArgs["BuiltinsChecker"]
+            ))
+        )
         self.aggressiveCheckBox.setChecked(Preferences.toBool(
-            Preferences.Prefs.settings.value("PEP8/AggressiveSearch", False)))
+            Preferences.Prefs.settings.value(
+                "PEP8/AggressiveSearch",
+                MiscellaneousCheckerDefaultArgs[
+                    "CommentedCodeChecker"]["Aggressive"]
+            )))
+        self.__initCommentedCodeCheckerWhiteList(Preferences.toList(
+            Preferences.Prefs.settings.value(
+                "PEP8/CommentedCodeWhitelist",
+                MiscellaneousCheckerDefaultArgs[
+                    "CommentedCodeChecker"]["WhiteList"]
+            )
+        ))
         self.minAnnotationsCoverageSpinBox.setValue(int(
             Preferences.Prefs.settings.value(
                 "PEP8/MinimumAnnotationsCoverage", 75)))
@@ -1456,6 +1503,9 @@
         Preferences.Prefs.settings.setValue(
             "PEP8/AggressiveSearch", self.aggressiveCheckBox.isChecked())
         Preferences.Prefs.settings.setValue(
+            "PEP8/CommentedCodeWhitelist",
+            self.__getCommentedCodeCheckerWhiteList())
+        Preferences.Prefs.settings.setValue(
             "PEP8/MinimumAnnotationsCoverage",
             self.minAnnotationsCoverageSpinBox.value())
         Preferences.Prefs.settings.setValue(
@@ -1532,15 +1582,32 @@
         Preferences.Prefs.settings.setValue("PEP8/LineComplexity", 15)
         Preferences.Prefs.settings.setValue("PEP8/LineComplexityScore", 10)
         Preferences.Prefs.settings.setValue(
-            "PEP8/ValidEncodings", "latin-1, utf-8")
-        Preferences.Prefs.settings.setValue("PEP8/CopyrightMinFileSize", 0)
-        Preferences.Prefs.settings.setValue("PEP8/CopyrightAuthor", "")
+            "PEP8/ValidEncodings",
+            MiscellaneousCheckerDefaultArgs["CodingChecker"]
+        )
+        Preferences.Prefs.settings.setValue(
+            "PEP8/CopyrightMinFileSize",
+            MiscellaneousCheckerDefaultArgs["CopyrightChecker"]["MinFilesize"]
+        )
+        Preferences.Prefs.settings.setValue(
+            "PEP8/CopyrightAuthor",
+            MiscellaneousCheckerDefaultArgs["CopyrightChecker"]["Author"]
+        )
         Preferences.Prefs.settings.setValue("PEP8/FutureChecker", "")
-        Preferences.Prefs.settings.setValue("PEP8/BuiltinsChecker", {
-            "str": ["unicode", ],
-            "chr": ["unichr", ],
-        })
-        Preferences.Prefs.settings.setValue("PEP8/AggressiveSearch", False)
+        Preferences.Prefs.settings.setValue(
+            "PEP8/BuiltinsChecker",
+            MiscellaneousCheckerDefaultArgs["BuiltinsChecker"]
+        )
+        Preferences.Prefs.settings.setValue(
+            "PEP8/AggressiveSearch",
+            MiscellaneousCheckerDefaultArgs[
+                "CommentedCodeChecker"]["Aggressive"]
+        )
+        Preferences.Prefs.settings.setValue(
+            "PEP8/CommentedCodeWhitelist",
+            MiscellaneousCheckerDefaultArgs[
+                "CommentedCodeChecker"]["WhiteList"]
+        )
         Preferences.Prefs.settings.setValue(
             "PEP8/MinimumAnnotationsCoverage", 75)
         Preferences.Prefs.settings.setValue(
@@ -1882,3 +1949,63 @@
         
         self.excludeMessagesEdit.setText(",".join(excludedMessages))
         self.__initCategoriesList(",".join(enabledCheckers))
+    
+    def __initCommentedCodeCheckerWhiteList(self, whitelist):
+        """
+        Private method to populate the list of commented code whitelist
+        patterns.
+        
+        @param whitelist list of commented code whitelist patterns
+        @type list of str
+        """
+        self.whitelistWidget.clear()
+        
+        for pattern in whitelist:
+            QListWidgetItem(pattern, self.whitelistWidget)
+        
+        self.on_whitelistWidget_itemSelectionChanged()
+    
+    def __getCommentedCodeCheckerWhiteList(self):
+        """
+        Private method to get the list of commented code whitelist patterns.
+        
+        @return list of commented code whitelist patterns
+        @rtype list of str
+        """
+        whitelist = []
+        
+        for row in range(self.whitelistWidget.count()):
+            whitelist.append(self.whitelistWidget.item(row).text())
+        
+        return whitelist
+    
+    @pyqtSlot()
+    def on_whitelistWidget_itemSelectionChanged(self):
+        """
+        Private slot to react upon changes of the selected whitelist patterns.
+        """
+        self.deleteWhitelistButton.setEnabled(
+            len(self.whitelistWidget.selectedItems()) > 0)
+    
+    @pyqtSlot()
+    def on_addWhitelistButton_clicked(self):
+        """
+        Private slot to add a commented code whitelist pattern.
+        """
+        pattern, ok = QInputDialog.getText(
+            self,
+            self.tr("Commented Code Whitelist Pattern"),
+            self.tr("Enter a Commented Code Whitelist Pattern"),
+            QLineEdit.Normal)
+        if ok and pattern:
+            QListWidgetItem(pattern, self.whitelistWidget)
+    
+    @pyqtSlot()
+    def on_deleteWhitelistButton_clicked(self):
+        """
+        Private slot to delete the selected items from the list.
+        """
+        for itm in self.whitelistWidget.selectedItems():
+            row = self.whitelistWidget.row(itm)
+            self.whitelistWidget.takeItem(row)
+            del itm

eric ide

mercurial