eric6/Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py

changeset 7978
1e391f977124
parent 7923
91e843545d9a
child 7980
2c3f14a3c595
diff -r f0d18add14ea -r 1e391f977124 eric6/Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py
--- a/eric6/Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py	Wed Jan 13 19:12:35 2021 +0100
+++ b/eric6/Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py	Wed Jan 13 20:13:26 2021 +0100
@@ -14,7 +14,7 @@
 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
@@ -463,10 +463,29 @@
                 "str": ["unicode", ],
                 "chr": ["unichr", ],
             }
+        
         if "CommentedCodeChecker" not in self.__data:
             self.__data["CommentedCodeChecker"] = {
                 "Aggressive": False,
             }
+        if "WhiteList" not in self.__data["CommentedCodeChecker"]:
+            self.__data["CommentedCodeChecker"]["WhiteList"] = [
+                r'pylint',
+                r'pyright',
+                r'noqa',
+                r'type:\s*ignore',
+                r'fmt:\s*(on|off)',
+                r'TODO',
+                r'FIXME',
+                r'WARNING',
+                r'NOTE',
+                r'TEST',
+                r'DOCU',
+                r'XXX',
+                r'~ ',
+                r'- ',
+            ]
+        
         if "AnnotationsChecker" not in self.__data:
             self.__data["AnnotationsChecker"] = {
                 "MinimumCoverage": 75,
@@ -526,6 +545,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 +698,7 @@
                 "BuiltinsChecker": self.__getBuiltinsIgnoreList(),
                 "CommentedCodeChecker": {
                     "Aggressive": self.aggressiveCheckBox.isChecked(),
+                    "WhiteList": self.__getCommentedCodeCheckerWhiteList(),
                 }
             }
             annotationArgs = {
@@ -1082,6 +1104,7 @@
                 "BuiltinsChecker": self.__getBuiltinsIgnoreList(),
                 "CommentedCodeChecker": {
                     "Aggressive": self.aggressiveCheckBox.isChecked(),
+                    "WhiteList": self.__getCommentedCodeCheckerWhiteList(),
                 },
                 "AnnotationsChecker": {
                     "MinimumCoverage":
@@ -1882,3 +1905,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():
+            index = self.whitelistWidget.indexOfTopLevelItem(itm)
+            self.whitelistWidget.takeTopLevelItem(index)
+            del itm

eric ide

mercurial