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