--- 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