Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py

changeset 5619
ab999dc48132
parent 5597
3d88d53f8c2b
child 5621
80cce672d505
diff -r b50da40b6bc9 -r ab999dc48132 Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py
--- a/Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py	Thu Mar 16 20:00:31 2017 +0100
+++ b/Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py	Fri Mar 17 19:09:39 2017 +0100
@@ -95,6 +95,9 @@
         self.resultList.headerItem().setText(self.resultList.columnCount(), "")
         self.resultList.header().setSortIndicator(0, Qt.AscendingOrder)
         
+        self.addBuiltinButton.setIcon(UI.PixmapCache.getIcon("plus.png"))
+        self.deleteBuiltinButton.setIcon(UI.PixmapCache.getIcon("minus.png"))
+        
         self.checkProgress.setVisible(False)
         self.checkProgressLabel.setVisible(False)
         self.checkProgressLabel.setMaximumWidth(600)
@@ -325,6 +328,11 @@
             self.__data["CopyrightAuthor"] = ""
         if "FutureChecker" not in self.__data:
             self.__data["FutureChecker"] = ""
+        if "BuiltinsChecker" not in self.__data:
+            self.__data["BuiltinsChecker"] = {
+                "str": ["unicode", ],
+                "chr": ["unichr", ],
+            }
         
         self.excludeFilesEdit.setText(self.__data["ExcludeFiles"])
         self.excludeMessagesEdit.setText(self.__data["ExcludeMessages"])
@@ -344,6 +352,7 @@
             self.__data["CopyrightMinFileSize"])
         self.copyrightAuthorEdit.setText(self.__data["CopyrightAuthor"])
         self.__initFuturesList(self.__data["FutureChecker"])
+        self.__initBuiltinsIgnoreList(self.__data["BuiltinsChecker"])
     
     def start(self, fn, save=False, repeat=None):
         """
@@ -430,6 +439,7 @@
                     "Author": self.copyrightAuthorEdit.text(),
                 },
                 "FutureChecker": self.__getSelectedFutureImports(),
+                "BuiltinsChecker": self.__getBuiltinsIgnoreList(),
             }
             
             self.__options = [excludeMessages, includeMessages, repeatMessages,
@@ -755,6 +765,7 @@
                 "CopyrightMinFileSize": self.copyrightFileSizeSpinBox.value(),
                 "CopyrightAuthor": self.copyrightAuthorEdit.text(),
                 "FutureChecker": self.__getSelectedFutureImports(),
+                "BuiltinsChecker": self.__getBuiltinsIgnoreList(),
             }
             if data != self.__data:
                 self.__data = data
@@ -936,6 +947,11 @@
             Preferences.Prefs.settings.value("PEP8/CopyrightAuthor", ""))
         self.__initFuturesList(
             Preferences.Prefs.settings.value("PEP8/FutureChecker", ""))
+        self.__initBuiltinsIgnoreList(Preferences.toDict(
+            Preferences.Prefs.settings.value("PEP8/BuiltinsChecker", {
+                "str": ["unicode", ],
+                "chr": ["unichr", ],
+            })))
     
     @pyqtSlot()
     def on_storeDefaultButton_clicked(self):
@@ -976,6 +992,8 @@
             "PEP8/CopyrightAuthor", self.copyrightAuthorEdit.text())
         Preferences.Prefs.settings.setValue(
             "PEP8/FutureChecker", self.__getSelectedFutureImports())
+        Preferences.Prefs.settings.setValue(
+            "PEP8/BuiltinsChecker", self.__getBuiltinsIgnoreList())
     
     @pyqtSlot()
     def on_resetDefaultButton_clicked(self):
@@ -1001,6 +1019,10 @@
         Preferences.Prefs.settings.setValue("PEP8/CopyrightMinFileSize", 0)
         Preferences.Prefs.settings.setValue("PEP8/CopyrightAuthor", "")
         Preferences.Prefs.settings.setValue("PEP8/FutureChecker", "")
+        Preferences.Prefs.settings.setValue("PEP8/BuiltinsChecker", {
+            "str": ["unicode", ],
+            "chr": ["unichr", ],
+        })
     
     @pyqtSlot(QAbstractButton)
     def on_buttonBox_clicked(self, button):
@@ -1117,6 +1139,7 @@
         for row in range(self.futuresList.count()):
             itm = self.futuresList.item(row)
             itm.setSelected(itm.text() in expectedImports)
+        # TODO: change this to checkable items
     
     def __getSelectedFutureImports(self):
         """
@@ -1127,3 +1150,66 @@
         """
         selectedFutures = [i.text() for i in self.futuresList.selectedItems()]
         return ", ".join(selectedFutures)
+    
+    def __initBuiltinsIgnoreList(self, builtinsIgnoreDict):
+        """
+        Private method to populate the list of shadowed builtins to be ignored.
+        
+        @param builtinsIgnoreDict dictionary containing the builtins
+            assignments to be ignored
+        @type dict of list of str
+        """
+        self.builtinsAssignmentList.clear()
+        for left, rightList in builtinsIgnoreDict.items():
+            for right in rightList:
+                QTreeWidgetItem(self.builtinsAssignmentList, [left, right])
+        
+        self.on_builtinsAssignmentList_itemSelectionChanged()
+    
+    def __getBuiltinsIgnoreList(self):
+        """
+        Private method to get a dictionary containing the builtins assignments
+        to be ignored.
+        
+        @return dictionary containing the builtins assignments to be ignored
+        @rtype dict of list of str
+        """
+        builtinsIgnoreDict = {}
+        for row in range(self.builtinsAssignmentList.topLevelItemCount()):
+            itm = self.builtinsAssignmentList.topLevelItem(row)
+            left, right = itm.text(0), itm.text(1)
+            if left not in builtinsIgnoreDict:
+                builtinsIgnoreDict[left] = []
+            builtinsIgnoreDict[left].append(right)
+        
+        return builtinsIgnoreDict
+    
+    @pyqtSlot()
+    def on_builtinsAssignmentList_itemSelectionChanged(self):
+        """
+        Private slot to react upon changes of the selected builtin assignments.
+        """
+        self.deleteBuiltinButton.setEnabled(
+            len(self.builtinsAssignmentList.selectedItems()) > 0)
+    
+    @pyqtSlot()
+    def on_addBuiltinButton_clicked(self):
+        """
+        Slot documentation goes here.
+        """
+        from .CodeStyleAddBuiltinIgnoreDialog import \
+            CodeStyleAddBuiltinIgnoreDialog
+        dlg = CodeStyleAddBuiltinIgnoreDialog(self)
+        if dlg.exec_() == QDialog.Accepted:
+            left,  right = dlg.getData()
+            QTreeWidgetItem(self.builtinsAssignmentList, [left, right])
+    
+    @pyqtSlot()
+    def on_deleteBuiltinButton_clicked(self):
+        """
+        Private slot to delete the selected items from the list.
+        """
+        for itm in self.builtinsAssignmentList.selectedItems():
+            index = self.builtinsAssignmentList.indexOfTopLevelItem(itm)
+            self.builtinsAssignmentList.takeTopLevelItem(index)
+            del itm

eric ide

mercurial