PyLint/PyLintConfigDialog.py

branch
eric7
changeset 98
ab4aabca55ec
parent 97
2226347d86e4
child 99
f34bc41cd4b4
--- a/PyLint/PyLintConfigDialog.py	Wed Jun 02 17:36:34 2021 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,384 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Copyright (c) 2005 - 2021 Detlev Offenbach <detlev@die-offenbachs.de>
-#
-
-"""
-Module implementing a dialog to configure the PyLint process.
-"""
-
-import os
-import copy
-
-from PyQt5.QtCore import pyqtSlot, QProcess
-from PyQt5.QtWidgets import QDialog
-
-from E5Gui.E5Application import e5App
-from E5Gui import E5FileDialog, E5MessageBox
-from E5Gui.E5Completers import E5FileCompleter
-
-from .Ui_PyLintConfigDialog import Ui_PyLintConfigDialog
-
-import Preferences
-import Utilities
-
-
-class PyLintConfigDialog(QDialog, Ui_PyLintConfigDialog):
-    """
-    Class implementing a dialog to configure the PyLint process.
-    """
-    def __init__(self, ppath, exe, parms, version):
-        """
-        Constructor
-        
-        @param ppath project path (string or QString)
-            Used to set the default path for the rcfile selection dialog
-        @param exe name of the pylint executable (string)
-        @param parms parameters to set in the dialog
-        @param version pylint version (string)
-        """
-        super().__init__(None)
-        self.setupUi(self)
-        
-        self.version = version
-        self.pylintProc = None
-        self.lint = exe
-        
-        self.__initializeDefaults()
-        
-        # get a copy of the defaults to store the user settings
-        self.parameters = copy.deepcopy(self.defaults)
-        
-        # combine it with the values of parms
-        if parms is not None:
-            self.parameters.update(parms)
-        
-        self.configfileCompleter = E5FileCompleter(self.configfileEdit)
-        self.reportfileCompleter = E5FileCompleter(self.reportfileEdit)
-        
-        # initialize general tab
-        self.configfileEdit.setText(self.parameters['configFile'])
-        self.txtOutputButton.setChecked(self.parameters['txtReport'])
-        self.htmlOutputButton.setChecked(self.parameters['htmlReport'])
-        self.dialogOutputButton.setChecked(self.parameters['dialogReport'])
-        self.reportfileEdit.setText(self.parameters['reportFile'])
-        
-        # initialize checkers tab
-        self.basicCheckBox.setChecked(self.parameters['enableBasic'])
-        self.classesCheckBox.setChecked(self.parameters['enableClasses'])
-        self.designCheckBox.setChecked(self.parameters['enableDesign'])
-        self.exceptionsCheckBox.setChecked(self.parameters['enableExceptions'])
-        self.formatCheckBox.setChecked(self.parameters['enableFormat'])
-        self.importsCheckBox.setChecked(self.parameters['enableImports'])
-        self.metricsCheckBox.setChecked(self.parameters['enableMetrics'])
-        self.miscellaneousCheckBox.setChecked(
-            self.parameters['enableMiscellaneous'])
-        self.newstyleCheckBox.setChecked(self.parameters['enableNewstyle'])
-        self.similaritiesCheckBox.setChecked(
-            self.parameters['enableSimilarities'])
-        self.typecheckCheckBox.setChecked(self.parameters['enableTypecheck'])
-        self.variablesCheckBox.setChecked(self.parameters['enableVariables'])
-        self.loggingCheckBox.setChecked(self.parameters['enableLogging'])
-        self.stringFormatCheckBox.setChecked(
-            self.parameters['enableStringFormat'])
-        
-        # initialize messages tab
-        self.enabledMessagesEdit.setText(self.parameters['enabledMessages'])
-        self.disabledMessagesEdit.setText(self.parameters['disabledMessages'])
-        
-        self.ppath = ppath
-
-    def __initializeDefaults(self):
-        """
-        Private method to set the default values.
-        
-        These are needed later on to generate the commandline
-        parameters.
-        """
-        self.defaults = {
-            # general options
-            'configFile': '',
-            'reportFile': '',
-            'txtReport': False,
-            'htmlReport': True,
-            'dialogReport': False,
-            
-            # enabled checkers
-            'enableBasic': True,
-            'enableClasses': True,
-            'enableDesign': True,
-            'enableExceptions': True,
-            'enableFormat': False,
-            'enableImports': False,
-            'enableLogging': True,
-            'enableMetrics': True,
-            'enableMiscellaneous': True,
-            'enableNewstyle': True,
-            'enableSimilarities': True,
-            'enableStringFormat': True,
-            'enableTypecheck': True,
-            'enableVariables': True,
-            
-            # messages
-            'enabledMessages': '',
-            'disabledMessages': '',
-        }
-
-    def generateParameters(self):
-        """
-        Public method that generates the commandline parameters.
-        
-        It generates a QStringList to be used
-        to set the QProcess arguments for the pylint call and
-        a list containing the non default parameters. The second
-        list can be passed back upon object generation to overwrite
-        the default settings.
-        
-        <b>Note</b>: The arguments list contains the name of the pylint
-        executable as the first parameter.
-        
-        @return a tuple of the commandline parameters and non default
-            parameters (list of strings, dictionary)
-        """
-        parms = {}
-        args = []
-        
-        # 1. the program name
-        args.append(self.lint)
-        
-        # 2. the commandline options
-        # 2.1 general options
-        if self.parameters['configFile'] != self.defaults['configFile']:
-            parms['configFile'] = self.parameters['configFile']
-            args.append('--rcfile={0}'.format(self.parameters['configFile']))
-        parms['txtReport'] = self.parameters['txtReport']
-        parms['htmlReport'] = self.parameters['htmlReport']
-        parms['dialogReport'] = self.parameters['dialogReport']
-        if self.parameters['htmlReport']:
-            args.append('--output-format=html')
-        elif self.parameters['dialogReport']:
-            args.append('--output-format=parseable')
-            args.append('--reports=n')
-        else:
-            args.append('--output-format=text')
-        if self.parameters['reportFile'] != self.defaults['reportFile']:
-            parms['reportFile'] = self.parameters['reportFile']
-        
-        # 2.2 checkers options
-        parms['enableBasic'] = self.parameters['enableBasic']
-        parms['enableClasses'] = self.parameters['enableClasses']
-        parms['enableDesign'] = self.parameters['enableDesign']
-        parms['enableExceptions'] = self.parameters['enableExceptions']
-        parms['enableFormat'] = self.parameters['enableFormat']
-        parms['enableImports'] = self.parameters['enableImports']
-        parms['enableMetrics'] = self.parameters['enableMetrics']
-        parms['enableMiscellaneous'] = self.parameters['enableMiscellaneous']
-        parms['enableNewstyle'] = self.parameters['enableNewstyle']
-        parms['enableSimilarities'] = self.parameters['enableSimilarities']
-        parms['enableTypecheck'] = self.parameters['enableTypecheck']
-        parms['enableVariables'] = self.parameters['enableVariables']
-        parms['enableLogging'] = self.parameters['enableLogging']
-        parms['enableStringFormat'] = self.parameters['enableStringFormat']
-        
-        checkers = []
-        if self.parameters['enableBasic']:
-            checkers.append('basic')
-        if self.parameters['enableClasses']:
-            checkers.append('classes')
-        if self.parameters['enableDesign']:
-            checkers.append('design')
-        if self.parameters['enableExceptions']:
-            checkers.append('exceptions')
-        if self.parameters['enableFormat']:
-            checkers.append('format')
-        if self.parameters['enableImports']:
-            checkers.append('imports')
-        if self.parameters['enableMetrics']:
-            checkers.append('metrics')
-        if self.parameters['enableMiscellaneous']:
-            checkers.append('miscellaneous')
-        if self.parameters['enableNewstyle']:
-            checkers.append('newstyle')
-        if self.parameters['enableSimilarities']:
-            checkers.append('similarities')
-        if self.parameters['enableTypecheck']:
-            checkers.append('typecheck')
-        if self.parameters['enableVariables']:
-            checkers.append('variables')
-        if self.parameters['enableLogging']:
-            checkers.append('logging')
-        if self.parameters['enableStringFormat']:
-            if self.version > '0.27.0':
-                checkers.append('string')
-            else:
-                checkers.append('string_format')
-            
-        args.append('--disable=all')
-        if checkers:
-            args.append('--enable={0}'.format(','.join(checkers)))
-        
-        # 2.3 messages options
-        parms['enabledMessages'] = self.parameters['enabledMessages']
-        parms['disabledMessages'] = self.parameters['disabledMessages']
-        if parms['enabledMessages']:
-            args.append('--enable={0}'.format(parms['enabledMessages']))
-        if parms['disabledMessages']:
-            args.append('--disable={0}'.format(parms['disabledMessages']))
-        
-        return (args, parms)
-
-    @pyqtSlot()
-    def on_configfileButton_clicked(self):
-        """
-        Private slot to select the configuration file.
-        
-        It displays a file selection dialog to select the configuration file.
-        """
-        startWith = self.configfileEdit.text()
-        if startWith == "":
-            startWith = self.ppath
-        config = E5FileDialog.getOpenFileName(
-            self,
-            self.tr("Select configuration file"),
-            startWith,
-            self.tr("Configuration Files (*.cfg *.cnf *.rc);;"
-                    "All Files (*)"))
-        if config:
-            self.configfileEdit.setText(Utilities.toNativeSeparators(config))
-    
-    @pyqtSlot()
-    def on_reportfileButton_clicked(self):
-        """
-        Private slot to select the report file.
-        
-        It displays a file selection dialog to select the report file.
-        """
-        report = E5FileDialog.getSaveFileName(
-            self,
-            self.tr("Select report file"),
-            self.reportfileEdit.text(),
-            None,
-            None,
-            E5FileDialog.Options(E5FileDialog.DontConfirmOverwrite))
-        
-        if report:
-            self.reportfileEdit.setText(Utilities.toNativeSeparators(report))
-    
-    def accept(self):
-        """
-        Public slot called by the Ok button.
-        
-        It saves the values in the parameters dictionary.
-        """
-        # get data of general tab
-        self.parameters['configFile'] = self.configfileEdit.text()
-        self.parameters['txtReport'] = self.txtOutputButton.isChecked()
-        self.parameters['htmlReport'] = self.htmlOutputButton.isChecked()
-        self.parameters['dialogReport'] = self.dialogOutputButton.isChecked()
-        self.parameters['reportFile'] = self.reportfileEdit.text()
-        
-        # get data of checkers tab
-        self.parameters['enableBasic'] = self.basicCheckBox.isChecked()
-        self.parameters['enableClasses'] = self.classesCheckBox.isChecked()
-        self.parameters['enableDesign'] = self.designCheckBox.isChecked()
-        self.parameters['enableExceptions'] = (
-            self.exceptionsCheckBox.isChecked())
-        self.parameters['enableFormat'] = self.formatCheckBox.isChecked()
-        self.parameters['enableImports'] = self.importsCheckBox.isChecked()
-        self.parameters['enableMetrics'] = self.metricsCheckBox.isChecked()
-        self.parameters['enableMiscellaneous'] = (
-            self.miscellaneousCheckBox.isChecked())
-        self.parameters['enableNewstyle'] = self.newstyleCheckBox.isChecked()
-        self.parameters['enableSimilarities'] = (
-            self.similaritiesCheckBox.isChecked())
-        self.parameters['enableTypecheck'] = self.typecheckCheckBox.isChecked()
-        self.parameters['enableVariables'] = self.variablesCheckBox.isChecked()
-        self.parameters['enableLogging'] = self.loggingCheckBox.isChecked()
-        self.parameters['enableStringFormat'] = (
-            self.stringFormatCheckBox.isChecked())
-        
-        # get data of messages tab
-        self.parameters['enabledMessages'] = ','.join(
-            [m.strip() for m in self.enabledMessagesEdit.text().split(',')])
-        self.parameters['disabledMessages'] = ','.join(
-            [m.strip() for m in self.disabledMessagesEdit.text().split(',')])
-        
-        # call the accept slot of the base class
-        super().accept()
-
-    ###########################################################################
-    ## Methods below are needed to generate a configuration file template
-    ###########################################################################
-
-    @pyqtSlot()
-    def on_configButton_clicked(self):
-        """
-        Private slot to handle the generation of a sample configuration.
-        """
-        self.buf = ""
-        self.pylintProc = QProcess()
-        args = []
-        
-        self.__ioEncoding = Preferences.getSystem("IOEncoding")
-        
-        args.append('--generate-rcfile')
-        
-        self.pylintProc.readyReadStandardOutput.connect(self.__readStdout)
-        self.pylintProc.readyReadStandardError.connect(self.__readStderr)
-        self.pylintProc.finished.connect(self.__createConfigDone)
-        
-        self.pylintProc.start(self.lint, args)
-        procStarted = self.pylintProc.waitForStarted()
-        if procStarted:
-            e5App().getObject("ViewManager").enableEditorsCheckFocusIn(False)
-        else:
-            E5MessageBox.critical(
-                self,
-                self.tr('Process Generation Error'),
-                self.tr(
-                    'Could not start {0}.<br>'
-                    'Ensure that it is in the search path.'
-                ).format(self.lint))
-    
-    def __createConfigDone(self, exitCode, exitStatus):
-        """
-        Private slot to handle the the finished signal of the pylint process.
-        
-        @param exitCode exit code of the process (integer)
-        @param exitStatus exit status of the process (QProcess.ExitStatus)
-        """
-        vm = e5App().getObject("ViewManager")
-        vm.enableEditorsCheckFocusIn(True)
-        if exitStatus == QProcess.NormalExit and exitCode == 0:
-            vm.newEditor()
-            aw = vm.activeWindow()
-            aw.insertAt(self.buf, 0, 0)
-            aw.setLanguage('dummy.rc')
-        self.reject()
-    
-    def __readStdout(self):
-        """
-        Private slot to handle the readyReadStandardOutput signal of the
-        pylint process.
-        """
-        if self.pylintProc is None:
-            return
-        self.pylintProc.setReadChannel(QProcess.StandardOutput)
-        
-        while self.pylintProc and self.pylintProc.canReadLine():
-            line = str(self.pylintProc.readLine(), self.__ioEncoding,
-                       "replace").rstrip()
-            self.buf += line + os.linesep
-        
-    def __readStderr(self):
-        """
-        Private slot to handle the readyReadStandardError signal of the
-        pylint process.
-        """
-        if self.pylintProc is None:
-            return
-        self.pylintProc.setReadChannel(QProcess.StandardError)
-        while self.pylintProc and self.pylintProc.canReadLine():
-            s = 'pylint: ' + str(
-                self.pylintProc.readLine(), self.__ioEncoding, "replace")
-            e5App().getObject("UserInterface").appendStderr.emit(s)

eric ide

mercurial