Fri, 29 Jul 2011 19:03:10 +0200
Added first set of sources.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ChangeLog Fri Jul 29 19:03:10 2011 +0200 @@ -0,0 +1,38 @@ +ChangeLog +--------- +Version 4.2.2: +- bug fixes +- added a button to refresh the result display + +Version 4.2.1: +- bug fixes + +Version 4.2.0: +- bug fixes +- added a Pylint action to the editor context menu + +Version 4.1.4: +- bug fixes + +Version 4.1.3: +- polished up the PyLint exec dialog +- changed license to GPL v3 + +Version 4.1.2: +- added Spanish translations from Jaime Seuma + +Version 4.1.1: +Changes to make the plugin compatible with eric 4.2 development line. + +Version 4.1.0: +first stable release + +Version 4.1-snapshot-20080107: +- bug fixes +- made Czech translation more general + +Version 4.1-snapshot-20071118: +- bug fixes + +Version 4.1-snapshot-20071117: +- first snapshot release of the separate PyLint checker plugin
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/PKGLIST Fri Jul 29 19:03:10 2011 +0200 @@ -0,0 +1,14 @@ +PluginPyLint.py +PyLint/Documentation/LICENSE.GPL3 +PyLint/PyLintConfigDialog.py +PyLint/PyLintConfigDialog.ui +PyLint/PyLintExecDialog.py +PyLint/PyLintExecDialog.ui +PyLint/Ui_PyLintConfigDialog.py +PyLint/Ui_PyLintExecDialog.py +PyLint/__init__.py +PyLint/i18n/pylint_cs.qm +PyLint/i18n/pylint_de.qm +PyLint/i18n/pylint_es.qm +PyLint/i18n/pylint_fr.qm +PyLint/i18n/pylint_ru.qm
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/PluginPyLint.e4p Fri Jul 29 19:03:10 2011 +0200 @@ -0,0 +1,255 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE Project SYSTEM "Project-5.1.dtd"> +<!-- eric5 project file for project PluginPyLint --> +<Project version="5.1"> + <Language>en_US</Language> + <Hash>abcf6641287ab95ca3df062cd9840dd92df2e42f</Hash> + <ProgLanguage mixed="0">Python3</ProgLanguage> + <ProjectType>E4Plugin</ProjectType> + <Description>This plugin implements an eric4 interface to the pylint checker.</Description> + <Version>5.0.x</Version> + <Author>Detlev Offenbach</Author> + <Email>detlev@die-offenbachs.de</Email> + <TranslationPattern>PyLint/i18n/pylint_%language%.ts</TranslationPattern> + <Eol index="1"/> + <Sources> + <Source>PluginPyLint.py</Source> + <Source>__init__.py</Source> + <Source>PyLint/PyLintConfigDialog.py</Source> + <Source>PyLint/__init__.py</Source> + <Source>PyLint/PyLintExecDialog.py</Source> + </Sources> + <Forms> + <Form>PyLint/PyLintConfigDialog.ui</Form> + <Form>PyLint/PyLintExecDialog.ui</Form> + </Forms> + <Translations> + <Translation>PyLint/i18n/pylint_fr.ts</Translation> + <Translation>PyLint/i18n/pylint_ru.ts</Translation> + <Translation>PyLint/i18n/pylint_de.ts</Translation> + <Translation>PyLint/i18n/pylint_cs.ts</Translation> + <Translation>PyLint/i18n/pylint_es.ts</Translation> + </Translations> + <Resources/> + <Interfaces/> + <Others> + <Other>PluginPyLint.e4p</Other> + <Other>PKGLIST</Other> + <Other>ChangeLog</Other> + <Other>PyLint/Documentation/LICENSE.GPL3</Other> + </Others> + <MainScript>PluginPyLint.py</MainScript> + <Vcs> + <VcsType>Mercurial</VcsType> + <VcsOptions> + <dict> + <key> + <string>add</string> + </key> + <value> + <list/> + </value> + <key> + <string>checkout</string> + </key> + <value> + <list/> + </value> + <key> + <string>commit</string> + </key> + <value> + <list/> + </value> + <key> + <string>diff</string> + </key> + <value> + <list/> + </value> + <key> + <string>export</string> + </key> + <value> + <list/> + </value> + <key> + <string>global</string> + </key> + <value> + <list/> + </value> + <key> + <string>history</string> + </key> + <value> + <list/> + </value> + <key> + <string>log</string> + </key> + <value> + <list/> + </value> + <key> + <string>remove</string> + </key> + <value> + <list/> + </value> + <key> + <string>status</string> + </key> + <value> + <list> + <string>--show-updates</string> + </list> + </value> + <key> + <string>tag</string> + </key> + <value> + <list/> + </value> + <key> + <string>update</string> + </key> + <value> + <list/> + </value> + </dict> + </VcsOptions> + <VcsOtherData> + <dict> + <key> + <string>standardLayout</string> + </key> + <value> + <bool>True</bool> + </value> + </dict> + </VcsOtherData> + </Vcs> + <FiletypeAssociations> + <FiletypeAssociation pattern="*.ui" type="FORMS"/> + <FiletypeAssociation pattern="*.idl" type="INTERFACES"/> + <FiletypeAssociation pattern="*.qm" type="TRANSLATIONS"/> + <FiletypeAssociation pattern="Ui_*.py" type="__IGNORE__"/> + <FiletypeAssociation pattern="*.ptl" type="SOURCES"/> + <FiletypeAssociation pattern="*.pyw" type="SOURCES"/> + <FiletypeAssociation pattern="*.ui.h" type="FORMS"/> + <FiletypeAssociation pattern="*.ts" type="TRANSLATIONS"/> + <FiletypeAssociation pattern="*.py" type="SOURCES"/> + <FiletypeAssociation pattern="*.qrc" type="RESOURCES"/> + </FiletypeAssociations> + <Documentation> + <DocumentationParams> + <dict> + <key> + <string>ERIC4DOC</string> + </key> + <value> + <dict> + <key> + <string>cssFile</string> + </key> + <value> + <string>/usr/lib64/python2.7/site-packages/eric4/CSSs/default.css</string> + </value> + <key> + <string>ignoreDirectories</string> + </key> + <value> + <list> + <string>.ropeproject</string> + </list> + </value> + <key> + <string>ignoreFilePatterns</string> + </key> + <value> + <list> + <string>Ui_*</string> + </list> + </value> + <key> + <string>outputDirectory</string> + </key> + <value> + <string>PyLint/Documentation/source</string> + </value> + <key> + <string>qtHelpEnabled</string> + </key> + <value> + <bool>False</bool> + </value> + <key> + <string>sourceExtensions</string> + </key> + <value> + <list> + <string></string> + </list> + </value> + <key> + <string>useRecursion</string> + </key> + <value> + <bool>True</bool> + </value> + </dict> + </value> + </dict> + </DocumentationParams> + </Documentation> + <Checkers> + <CheckersParams> + <dict> + <key> + <string>Pep8Checker</string> + </key> + <value> + <dict> + <key> + <string>ExcludeFiles</string> + </key> + <value> + <string>*/Ui_*.py</string> + </value> + <key> + <string>ExcludeMessages</string> + </key> + <value> + <string>E24, E501, W293</string> + </value> + <key> + <string>FixCodes</string> + </key> + <value> + <string></string> + </value> + <key> + <string>FixIssues</string> + </key> + <value> + <bool>False</bool> + </value> + <key> + <string>IncludeMessages</string> + </key> + <value> + <string></string> + </value> + <key> + <string>RepeatMessages</string> + </key> + <value> + <bool>True</bool> + </value> + </dict> + </value> + </dict> + </CheckersParams> + </Checkers> +</Project>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/PluginPyLint.py Fri Jul 29 19:03:10 2011 +0200 @@ -0,0 +1,507 @@ +# -*- coding: utf-8 -*- + +# Copyright (c) 2007 - 2011 Detlev Offenbach <detlev@die-offenbachs.de> +# + +""" +Module implementing the PyLint plug-in. +""" + +import os +import sys +import copy + +from PyQt4.QtCore import QObject, QTranslator, QCoreApplication +from PyQt4.QtGui import QDialog + +from E5Gui.E5Application import e5App +from E5Gui.E5Action import E5Action +from E5Gui import E5MessageBox + +from PyLint.PyLintConfigDialog import PyLintConfigDialog +from PyLint.PyLintExecDialog import PyLintExecDialog + +import Utilities + +# Start-of-Header +name = "PyLint Plugin" +author = "Detlev Offenbach <detlev@die-offenbachs.de>" +autoactivate = True +deactivateable = True +version = "5.0.0" +className = "PyLintPlugin" +packageName = "PyLint" +shortDescription = "Show the PyLint dialogs." +longDescription = """This plug-in implements the PyLint dialogs.""" \ + """ PyLint is used to check Python source files according to various rules.""" +needsRestart = False +pyqtApi = 2 +# End-of-Header + +error = "" + + +def exeDisplayData(): + """ + Public method to support the display of some executable info. + + @return dictionary containing the data to query the presence of + the executable + """ + data = { + "programEntry": True, + "header": QCoreApplication.translate("PyLintPlugin", + "Checkers - Pylint"), + "exe": 'dummypylint', + "versionCommand": '--version', + "versionStartsWith": 'dummypylint', + "versionPosition": -1, + "version": "", + "versionCleanup": (0, -1), + } + exe = _findExecutable() + if exe: + data["exe"] = exe + data["versionStartsWith"] = 'pylint' + + return data + + +def _findExecutable(): + """ + Restricted function to determine the name and path of the executable. + + @return path name of the executable (string) + """ + if Utilities.isWindowsPlatform(): + # + # Windows + # + exe = 'pylint.bat' + if Utilities.isinpath(exe): + return exe + try: + #only since python 3.2 + import sysconfig + scripts = sysconfig.get_path('scripts', 'nt') + return os.path.join(scripts, exe) + except ImportError: + try: + import winreg + except ImportError: + # give up ... + return None + + def getExePath(branch): + version = str(sys.version_info.major) + '.' + \ + str(sys.version_info.minor) + try: + software = winreg.OpenKey(branch, 'Software') + python = winreg.OpenKey(software, 'Python') + pcore = winreg.OpenKey(python, 'PythonCore') + version = winreg.OpenKey(pcore, version) + installpath = winreg.QueryValue(version, 'InstallPath') + return os.path.join(installpath, 'Scripts', exe) + except WindowsError: # __IGNORE_WARNING__ + return None + + exePath = getExePath(winreg.HKEY_CURRENT_USER) + if not exePath: + exePath = getExePath(winreg.HKEY_LOCAL_MACHINE) + return exePath + else: + # + # Linux, Unix ... + pylintScript = 'pylint' + # There could be multiple pylint executables in the path + # e.g. for different python variants + path = Utilities.getEnvironmentEntry('PATH') + # environment variable not defined + if path is None: + return None + + # step 1: determine possible candidates + exes = [] + dirs = path.split(os.pathsep) + for dir in dirs: + exe = os.path.join(dir, pylintScript) + if os.access(exe, os.X_OK): + exes.append(exe) + + # step 2: determine the Python 3 variant + found = False + for exe in exes: + try: + f = open(exe, "r") + line0 = f.readline() + if "python3" in line0.lower(): + found = True + finally: + f.close() + if found: + return exe + + return None + + +def _checkProgram(): + """ + Restricted function to check the availability of pylint. + + @return flag indicating availability (boolean) + """ + global error + + if _findExecutable() is None: + error = QCoreApplication.translate("PyLintPlugin", + "The pylint executable could not be found.") + return False + else: + return True + + +class PyLintPlugin(QObject): + """ + Class implementing the PyLint plug-in. + """ + def __init__(self, ui): + """ + Constructor + + @param ui reference to the user interface object (UI.UserInterface) + """ + QObject.__init__(self, ui) + self.__ui = ui + self.__initialize() + + self.__translator = None + self.__loadTranslator() + + def __initialize(self): + """ + Private slot to (re)initialize the plugin. + """ + self.__projectAct = None + self.__projectShowAct = None + self.__pylintPDialog = None + + self.__projectBrowserAct = None + self.__projectBrowserShowAct = None + self.__projectBrowserMenu = None + self.__pylintPsbDialog = None + + self.__editors = [] + self.__editorAct = None + self.__editorPylintDialog = None + self.__editorParms = None + + def activate(self): + """ + Public method to activate this plugin. + + @return tuple of None and activation status (boolean) + """ + global error + + # pylint is only activated if it is available + if not _checkProgram(): + return None, False + + try: + from pylint.__pkginfo__ import numversion + if numversion < (0, 23, 0): + error = self.trUtf8("PyLint version < 0.23.0.") + return None, False + except ImportError: + error = self.trUtf8("Cannot determine pylint version.") + return None, False + + menu = e5App().getObject("Project").getMenu("Checks") + if menu: + self.__projectAct = E5Action(self.trUtf8('Run PyLint'), + self.trUtf8('Run &PyLint...'), 0, 0, + self, 'project_check_pylint') + self.__projectAct.setStatusTip( + self.trUtf8('Check project, packages or modules with pylint.')) + self.__projectAct.setWhatsThis(self.trUtf8( + """<b>Run PyLint...</b>""" + """<p>This checks the project, packages or modules using pylint.</p>""" + )) + self.__projectAct.triggered[()].connect(self.__projectPylint) + e5App().getObject("Project").addE5Actions([self.__projectAct]) + menu.addAction(self.__projectAct) + + self.__projectShowAct = E5Action(self.trUtf8('Show PyLint Dialog'), + self.trUtf8('Show Py&Lint Dialog...'), 0, 0, + self, 'project_check_pylintshow') + self.__projectShowAct.setStatusTip( + self.trUtf8('Show the PyLint dialog with the results of the last run.')) + self.__projectShowAct.setWhatsThis(self.trUtf8( + """<b>Show PyLint Dialog...</b>""" + """<p>This shows the PyLint dialog with the results""" + """ of the last run.</p>""" + )) + self.__projectShowAct.triggered[()].connect(self.__projectPylintShow) + e5App().getObject("Project").addE5Actions([self.__projectShowAct]) + menu.addAction(self.__projectShowAct) + + self.__editorAct = E5Action(self.trUtf8('Run PyLint'), + self.trUtf8('Run &PyLint...'), 0, 0, + self, "") + self.__editorAct.setWhatsThis(self.trUtf8( + """<b>Run PyLint...</b>""" + """<p>This checks the loaded module using pylint.</p>""" + )) + self.__editorAct.triggered[()].connect(self.__editorPylint) + + e5App().getObject("Project").showMenu.connect(self.__projectShowMenu) + e5App().getObject("ProjectBrowser").getProjectBrowser("sources")\ + .showMenu.connect(self.__projectBrowserShowMenu) + e5App().getObject("ViewManager").editorOpenedEd.connect(self.__editorOpened) + e5App().getObject("ViewManager").editorClosedEd.connect(self.__editorClosed) + + for editor in e5App().getObject("ViewManager").getOpenEditors(): + self.__editorOpened(editor) + + error = "" + return None, True + + def deactivate(self): + """ + Public method to deactivate this plugin. + """ + e5App().getObject("Project").showMenu.disconnect(self.__projectShowMenu) + e5App().getObject("ProjectBrowser").getProjectBrowser("sources")\ + .showMenu.disconnect(self.__projectBrowserShowMenu) + e5App().getObject("ViewManager").editorOpenedEd.disconnect(self.__editorOpened) + e5App().getObject("ViewManager").editorClosedEd.disconnect(self.__editorClosed) + + menu = e5App().getObject("Project").getMenu("Checks") + if menu: + if self.__projectAct: + menu.removeAction(self.__projectAct) + e5App().getObject("Project").removeE5Actions([self.__projectAct]) + if self.__projectShowAct: + menu.removeAction(self.__projectShowAct) + e5App().getObject("Project").removeE5Actions([self.__projectShowAct]) + + if self.__projectBrowserMenu: + if self.__projectBrowserAct: + self.__projectBrowserMenu.removeAction(self.__projectBrowserAct) + if self.__projectBrowserShowAct: + self.__projectBrowserMenu.removeAction(self.__projectBrowserShowAct) + + for editor in self.__editors: + editor.showMenu.disconnect(self.__editorShowMenu) + menu = editor.getMenu("Checks") + if menu is not None: + menu.removeAction(self.__editorAct) + + self.__initialize() + + def __loadTranslator(self): + """ + Private method to load the translation file. + """ + if self.__ui is not None: + loc = self.__ui.getLocale() + if loc and loc != "C": + locale_dir = \ + os.path.join(os.path.dirname(__file__), "PyLint", "i18n") + translation = "pylint_{0}".format(loc) + translator = QTranslator(None) + loaded = translator.load(translation, locale_dir) + if loaded: + self.__translator = translator + e5App().installTranslator(self.__translator) + else: + print("Warning: translation file '{0}' could not be loaded."\ + .format(translation)) + print("Using default.") + + def __projectShowMenu(self, menuName, menu): + """ + Private slot called, when the the project menu or a submenu is + about to be shown. + + @param menuName name of the menu to be shown (string) + @param menu reference to the menu (QMenu) + """ + if menuName == "Checks": + if self.__projectAct is not None: + self.__projectAct.setEnabled( + e5App().getObject("Project").getProjectLanguage() == "Python3") + if self.__projectShowAct is not None: + self.__projectShowAct.setEnabled( + e5App().getObject("Project").getProjectLanguage() == "Python3") + self.__projectShowAct.setEnabled(self.__pylintPDialog is not None) + + def __projectBrowserShowMenu(self, menuName, menu): + """ + Private slot called, when the the project browser menu or a submenu is + about to be shown. + + @param menuName name of the menu to be shown (string) + @param menu reference to the menu (QMenu) + """ + if menuName == "Checks" and \ + e5App().getObject("Project").getProjectLanguage() == "Python3": + self.__projectBrowserMenu = menu + if self.__projectBrowserAct is None: + self.__projectBrowserAct = E5Action(self.trUtf8('Run PyLint'), + self.trUtf8('Run &PyLint...'), 0, 0, + self, '') + self.__projectBrowserAct.setWhatsThis(self.trUtf8( + """<b>Run PyLint...</b>""" + """<p>This checks the project, packages or modules""" + """ using pylint.</p>""" + )) + self.__projectBrowserAct.triggered[()].connect( + self.__projectBrowserPylint) + + if self.__projectBrowserShowAct is None: + self.__projectBrowserShowAct = \ + E5Action(self.trUtf8('Show PyLint Dialog'), + self.trUtf8('Show Py&Lint Dialog...'), 0, 0, + self, '') + self.__projectBrowserShowAct.setWhatsThis(self.trUtf8( + """<b>Show PyLint Dialog...</b>""" + """<p>This shows the PyLint dialog with the results""" + """ of the last run.</p>""" + )) + self.__projectBrowserShowAct.triggered[()].connect( + self.__projectBrowserPylintShow) + + if not self.__projectBrowserAct in menu.actions(): + menu.addAction(self.__projectBrowserAct) + if not self.__projectBrowserShowAct in menu.actions(): + menu.addAction(self.__projectBrowserShowAct) + self.__projectBrowserShowAct.setEnabled(self.__pylintPsbDialog is not None) + + def __pyLint(self, project, mpName, forProject, forEditor=False): + """ + Private method used to perform a PyLint run. + + @param project reference to the Project object + @param mpName name of module or package to be checked (string) + @param forProject flag indicating a run for the project (boolean) + """ + if forEditor: + parms = copy.deepcopy(self.__editorParms) + else: + parms = project.getData('CHECKERSPARMS', "PYLINT") + exe = _findExecutable() + if exe is None: + E5MessageBox.critical(None, + self.trUtf8("pylint"), + self.trUtf8("""The pylint executable could not be found.""")) + return + + dlg = PyLintConfigDialog(project.getProjectPath(), exe, parms) + if dlg.exec_() == QDialog.Accepted: + args, parms = dlg.generateParameters() + self.__editorParms = copy.deepcopy(parms) + if not forEditor: + project.setData('CHECKERSPARMS', "PYLINT", parms) + + # now do the call + dlg2 = PyLintExecDialog() + try: + reportFile = parms['reportFile'] + except KeyError: + reportFile = None + res = dlg2.start(args, mpName, reportFile, project.getProjectPath()) + if res: + dlg2.show() + if forProject: + self.__pylintPDialog = dlg2 + elif forEditor: + self.__editorPylintDialog = dlg2 + else: + self.__pylintPsbDialog = dlg2 + + def __projectPylint(self): + """ + Public slot used to check the project files with Pylint. + """ + project = e5App().getObject("Project") + project.saveAllScripts() + self.__pyLint(project, project.getProjectPath(), True) + + def __projectPylintShow(self): + """ + Public slot to show the PyLint dialog with the results of the last run. + """ + if self.__pylintPDialog is not None: + self.__pylintPDialog.show() + + def __projectBrowserPylint(self): + """ + Private method to handle the Pylint context menu action of the project + sources browser. + """ + project = e5App().getObject("Project") + browser = e5App().getObject("ProjectBrowser").getProjectBrowser("sources") + itm = browser.model().item(browser.currentIndex()) + try: + fn = itm.fileName() + except AttributeError: + fn = itm.dirName() + self.__pyLint(project, fn, False) + + def __projectBrowserPylintShow(self): + """ + Public slot to show the PyLint dialog with the results of the last run. + """ + if self.__pylintPsbDialog is not None: + self.__pylintPsbDialog.show() + + def __editorOpened(self, editor): + """ + Private slot called, when a new editor was opened. + + @param editor reference to the new editor (QScintilla.Editor) + """ + menu = editor.getMenu("Checks") + if menu is not None: + menu.addAction(self.__editorAct) + editor.showMenu.connect(self.__editorShowMenu) + self.__editors.append(editor) + + def __editorClosed(self, editor): + """ + Private slot called, when an editor was closed. + + @param editor reference to the editor (QScintilla.Editor) + """ + try: + self.__editors.remove(editor) + except ValueError: + pass + + def __editorShowMenu(self, menuName, menu, editor): + """ + Private slot called, when the the editor context menu or a submenu is + about to be shown. + + @param menuName name of the menu to be shown (string) + @param menu reference to the menu (QMenu) + @param editor reference to the editor (QScintilla.Editor) + """ + if menuName == "Checks": + if not self.__editorAct in menu.actions(): + menu.addAction(self.__editorAct) + self.__editorAct.setEnabled(editor.isPy3File()) + + def __editorPylint(self): + """ + Private slot to handle the Pylint context menu action of the editors. + """ + editor = e5App().getObject("ViewManager").activeWindow() + if editor is not None: + if not editor.checkDirty(): + return + + fn = editor.getFileName() + project = e5App().getObject("Project") + self.__pyLint(project, fn, False, True)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/PyLint/Documentation/LICENSE.GPL3 Fri Jul 29 19:03:10 2011 +0200 @@ -0,0 +1,621 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/> + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/PyLint/PyLintConfigDialog.py Fri Jul 29 19:03:10 2011 +0200 @@ -0,0 +1,338 @@ +# -*- coding: utf-8 -*- + +# Copyright (c) 2005 - 2011 Detlev Offenbach <detlev@die-offenbachs.de> +# + +""" +Module implementing a dialog to configure the PyLint process +""" + +import os +import copy + +from PyQt4.QtCore import pyqtSlot, QProcess, SIGNAL +from PyQt4.QtGui import QDialog, QFileDialog + +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=None, parent=None): + """ + 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 parent reference to the parent widget (QWidget) + """ + super().__init__(parent) + self.setupUi(self) + + 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: + for key, value in parms.items(): + self.parameters[key] = parms[key] + + 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.rpythonCheckBox.setChecked(self.parameters['enableRPython']) + + 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': False, + 'enableClasses': False, + 'enableDesign': False, + 'enableExceptions': False, + 'enableFormat': False, + 'enableImports': False, + 'enableMetrics': True, + 'enableMiscellaneous': False, + 'enableNewstyle': False, + 'enableSimilarities': False, + 'enableTypecheck': False, + 'enableVariables': False, + 'enableRPython': False, + } + + 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('--report=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['enableRPython'] = self.parameters['enableRPython'] + + 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['enableRPython']: + checkers.append('rpython') + args.append('--enable={0}'.format(','.join(checkers))) + + 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.trUtf8("Select configuration file"), + startWith, + self.trUtf8("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.trUtf8("Select report file"), + self.reportfileEdit.text(), + None, + None, + QFileDialog.Options(QFileDialog.DontConfirmOverwrite)) + + if report: + self.reportfileEdit.setText(Utilities.toNativeSeparators(report)) + + def accept(self): + """ + Protected 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['enableRPython'] = self.rpythonCheckBox.isChecked() + + # 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): + """ + Public 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.trUtf8('Process Generation Error'), + self.trUtf8( + '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").emit(SIGNAL('appendStderr'), s)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/PyLint/PyLintConfigDialog.ui Fri Jul 29 19:03:10 2011 +0200 @@ -0,0 +1,479 @@ +<ui version="4.0" > + <class>PyLintConfigDialog</class> + <widget class="QDialog" name="PyLintConfigDialog" > + <property name="geometry" > + <rect> + <x>0</x> + <y>0</y> + <width>528</width> + <height>335</height> + </rect> + </property> + <property name="windowTitle" > + <string>PyLint Configuration</string> + </property> + <property name="sizeGripEnabled" > + <bool>true</bool> + </property> + <layout class="QVBoxLayout" > + <property name="margin" > + <number>6</number> + </property> + <property name="spacing" > + <number>6</number> + </property> + <item> + <widget class="QTabWidget" name="tabWidget" > + <property name="currentIndex" > + <number>1</number> + </property> + <widget class="QWidget" name="General" > + <attribute name="title" > + <string>General</string> + </attribute> + <layout class="QGridLayout" > + <property name="margin" > + <number>6</number> + </property> + <property name="spacing" > + <number>6</number> + </property> + <item row="0" column="0" > + <widget class="QLabel" name="textLabel1" > + <property name="text" > + <string>Configuration &File:</string> + </property> + <property name="buddy" > + <cstring>configfileEdit</cstring> + </property> + </widget> + </item> + <item row="1" column="0" colspan="3" > + <widget class="QGroupBox" name="groupBox" > + <property name="title" > + <string>Output</string> + </property> + <layout class="QVBoxLayout" > + <property name="margin" > + <number>6</number> + </property> + <property name="spacing" > + <number>6</number> + </property> + <item> + <widget class="QRadioButton" name="txtOutputButton" > + <property name="toolTip" > + <string>Select to generate a plain text report</string> + </property> + <property name="text" > + <string>Generate &Textreport</string> + </property> + <property name="shortcut" > + <string>Alt+T</string> + </property> + </widget> + </item> + <item> + <widget class="QRadioButton" name="htmlOutputButton" > + <property name="toolTip" > + <string>Select to generate a HTML report</string> + </property> + <property name="text" > + <string>Generate &HTML Report</string> + </property> + <property name="shortcut" > + <string>Alt+H</string> + </property> + </widget> + </item> + <item> + <widget class="QRadioButton" name="dialogOutputButton" > + <property name="toolTip" > + <string>Show the pylint result in a dialog</string> + </property> + <property name="text" > + <string>Show Result &Dialog</string> + </property> + <property name="shortcut" > + <string>Alt+D</string> + </property> + </widget> + </item> + <item> + <widget class="QGroupBox" name="groupBox_2" > + <property name="title" > + <string>Report File</string> + </property> + <layout class="QHBoxLayout" > + <property name="margin" > + <number>6</number> + </property> + <property name="spacing" > + <number>6</number> + </property> + <item> + <widget class="QLineEdit" name="reportfileEdit" > + <property name="toolTip" > + <string>Enter the name of the report file</string> + </property> + </widget> + </item> + <item> + <widget class="QPushButton" name="reportfileButton" > + <property name="toolTip" > + <string>Press to open a file selection dialog</string> + </property> + <property name="text" > + <string>...</string> + </property> + </widget> + </item> + </layout> + </widget> + </item> + </layout> + </widget> + </item> + <item row="0" column="1" > + <widget class="QLineEdit" name="configfileEdit" > + <property name="toolTip" > + <string>Enter the name of the configuration file</string> + </property> + </widget> + </item> + <item row="3" column="0" colspan="3" > + <layout class="QHBoxLayout" > + <property name="margin" > + <number>0</number> + </property> + <property name="spacing" > + <number>6</number> + </property> + <item> + <spacer> + <property name="orientation" > + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeType" > + <enum>QSizePolicy::Expanding</enum> + </property> + <property name="sizeHint" > + <size> + <width>40</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + <item> + <widget class="QPushButton" name="configButton" > + <property name="toolTip" > + <string>Press to generate a sample configuration</string> + </property> + <property name="whatsThis" > + <string><b>Generate Configuration Template</b> +<p>This generates a sample configuration. The data is shown in a new editor window.</p></string> + </property> + <property name="text" > + <string>&Generate Configuration Template</string> + </property> + <property name="shortcut" > + <string>Alt+G</string> + </property> + </widget> + </item> + <item> + <spacer> + <property name="orientation" > + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeType" > + <enum>QSizePolicy::Expanding</enum> + </property> + <property name="sizeHint" > + <size> + <width>40</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + </layout> + </item> + <item row="2" column="0" colspan="3" > + <widget class="Line" name="line1" > + <property name="frameShape" > + <enum>QFrame::HLine</enum> + </property> + <property name="frameShadow" > + <enum>QFrame::Sunken</enum> + </property> + <property name="orientation" > + <enum>Qt::Horizontal</enum> + </property> + </widget> + </item> + <item row="0" column="2" > + <widget class="QPushButton" name="configfileButton" > + <property name="toolTip" > + <string>Press to open a file selection dialog</string> + </property> + <property name="text" > + <string>...</string> + </property> + </widget> + </item> + </layout> + </widget> + <widget class="QWidget" name="Checkers" > + <attribute name="title" > + <string>Checkers</string> + </attribute> + <layout class="QGridLayout" > + <property name="margin" > + <number>6</number> + </property> + <property name="spacing" > + <number>6</number> + </property> + <item row="5" column="2" colspan="2" > + <spacer> + <property name="orientation" > + <enum>Qt::Vertical</enum> + </property> + <property name="sizeType" > + <enum>QSizePolicy::Expanding</enum> + </property> + <property name="sizeHint" > + <size> + <width>20</width> + <height>40</height> + </size> + </property> + </spacer> + </item> + <item row="2" column="4" > + <widget class="QCheckBox" name="variablesCheckBox" > + <property name="toolTip" > + <string>Select to enable the variables checker</string> + </property> + <property name="text" > + <string>Variables</string> + </property> + </widget> + </item> + <item row="1" column="4" > + <widget class="QCheckBox" name="typecheckCheckBox" > + <property name="toolTip" > + <string>Select to enable the typecheck checker</string> + </property> + <property name="text" > + <string>Typecheck</string> + </property> + </widget> + </item> + <item row="0" column="4" > + <widget class="QCheckBox" name="similaritiesCheckBox" > + <property name="toolTip" > + <string>Select to enable the similarities checker</string> + </property> + <property name="text" > + <string>Similarities</string> + </property> + </widget> + </item> + <item row="4" column="2" > + <widget class="QCheckBox" name="rpythonCheckBox" > + <property name="toolTip" > + <string>Select to enable the rpython checker</string> + </property> + <property name="text" > + <string>RPython</string> + </property> + </widget> + </item> + <item row="3" column="2" > + <widget class="QCheckBox" name="newstyleCheckBox" > + <property name="toolTip" > + <string>Select to enable the newstyle checker</string> + </property> + <property name="text" > + <string>Newstyle</string> + </property> + </widget> + </item> + <item row="2" column="2" colspan="2" > + <widget class="QCheckBox" name="miscellaneousCheckBox" > + <property name="toolTip" > + <string>Select to enable the miscellaneous checker</string> + </property> + <property name="text" > + <string>Miscellaneous</string> + </property> + </widget> + </item> + <item row="1" column="2" > + <widget class="QCheckBox" name="metricsCheckBox" > + <property name="toolTip" > + <string>Select to enable the metrics checker</string> + </property> + <property name="text" > + <string>Metrics</string> + </property> + </widget> + </item> + <item row="4" column="0" > + <widget class="QCheckBox" name="formatCheckBox" > + <property name="toolTip" > + <string>Select to enable the format checker</string> + </property> + <property name="text" > + <string>Format</string> + </property> + </widget> + </item> + <item row="3" column="0" colspan="2" > + <widget class="QCheckBox" name="exceptionsCheckBox" > + <property name="toolTip" > + <string>Select to enable the exceptions checker</string> + </property> + <property name="text" > + <string>Exceptions</string> + </property> + </widget> + </item> + <item row="2" column="0" > + <widget class="QCheckBox" name="designCheckBox" > + <property name="toolTip" > + <string>Select to enable the design checker</string> + </property> + <property name="text" > + <string>Design</string> + </property> + </widget> + </item> + <item row="1" column="0" colspan="2" > + <widget class="QCheckBox" name="classesCheckBox" > + <property name="toolTip" > + <string>Select to enable the classes checker</string> + </property> + <property name="text" > + <string>Classes</string> + </property> + </widget> + </item> + <item row="0" column="2" colspan="2" > + <widget class="QCheckBox" name="importsCheckBox" > + <property name="toolTip" > + <string>Select to enable the imports checker</string> + </property> + <property name="text" > + <string>Imports</string> + </property> + </widget> + </item> + <item row="0" column="0" colspan="2" > + <widget class="QCheckBox" name="basicCheckBox" > + <property name="toolTip" > + <string>Select to enable the basic checker</string> + </property> + <property name="text" > + <string>Basic</string> + </property> + </widget> + </item> + </layout> + </widget> + </widget> + </item> + <item> + <widget class="QDialogButtonBox" name="buttonBox" > + <property name="orientation" > + <enum>Qt::Horizontal</enum> + </property> + <property name="standardButtons" > + <set>QDialogButtonBox::Cancel|QDialogButtonBox::NoButton|QDialogButtonBox::Ok</set> + </property> + </widget> + </item> + </layout> + </widget> + <layoutdefault spacing="6" margin="6" /> + <pixmapfunction>qPixmapFromMimeSource</pixmapfunction> + <tabstops> + <tabstop>tabWidget</tabstop> + <tabstop>configfileEdit</tabstop> + <tabstop>configfileButton</tabstop> + <tabstop>txtOutputButton</tabstop> + <tabstop>htmlOutputButton</tabstop> + <tabstop>dialogOutputButton</tabstop> + <tabstop>reportfileEdit</tabstop> + <tabstop>reportfileButton</tabstop> + <tabstop>configButton</tabstop> + <tabstop>basicCheckBox</tabstop> + <tabstop>classesCheckBox</tabstop> + <tabstop>designCheckBox</tabstop> + <tabstop>exceptionsCheckBox</tabstop> + <tabstop>formatCheckBox</tabstop> + <tabstop>importsCheckBox</tabstop> + <tabstop>metricsCheckBox</tabstop> + <tabstop>miscellaneousCheckBox</tabstop> + <tabstop>newstyleCheckBox</tabstop> + <tabstop>rpythonCheckBox</tabstop> + <tabstop>similaritiesCheckBox</tabstop> + <tabstop>typecheckCheckBox</tabstop> + <tabstop>variablesCheckBox</tabstop> + <tabstop>buttonBox</tabstop> + </tabstops> + <resources/> + <connections> + <connection> + <sender>dialogOutputButton</sender> + <signal>toggled(bool)</signal> + <receiver>groupBox_2</receiver> + <slot>setDisabled(bool)</slot> + <hints> + <hint type="sourcelabel" > + <x>78</x> + <y>163</y> + </hint> + <hint type="destinationlabel" > + <x>62</x> + <y>188</y> + </hint> + </hints> + </connection> + <connection> + <sender>buttonBox</sender> + <signal>accepted()</signal> + <receiver>PyLintConfigDialog</receiver> + <slot>accept()</slot> + <hints> + <hint type="sourcelabel" > + <x>35</x> + <y>321</y> + </hint> + <hint type="destinationlabel" > + <x>34</x> + <y>333</y> + </hint> + </hints> + </connection> + <connection> + <sender>buttonBox</sender> + <signal>rejected()</signal> + <receiver>PyLintConfigDialog</receiver> + <slot>reject()</slot> + <hints> + <hint type="sourcelabel" > + <x>91</x> + <y>309</y> + </hint> + <hint type="destinationlabel" > + <x>100</x> + <y>332</y> + </hint> + </hints> + </connection> + </connections> +</ui>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/PyLint/PyLintExecDialog.py Fri Jul 29 19:03:10 2011 +0200 @@ -0,0 +1,357 @@ +# -*- coding: utf-8 -*- + +# Copyright (c) 2005 - 2011 Detlev Offenbach <detlev@die-offenbachs.de> +# + +""" +Module implementing a dialog to show the results of the PyLint run. +""" + +import os + +from PyQt4.QtCore import * +from PyQt4.QtGui import * + +from E5Gui import E5MessageBox, E5FileDialog +from E5Gui.E5Application import e5App + +from .Ui_PyLintExecDialog import Ui_PyLintExecDialog + +import Preferences +import Utilities + + +class PyLintExecDialog(QWidget, Ui_PyLintExecDialog): + """ + Class implementing a dialog to show the results of the PyLint run. + + This class starts a QProcess and displays a dialog that + shows the results of the PyLint command process. + """ + def __init__(self, parent=None): + """ + Constructor + + @param parent parent widget of this dialog (QWidget) + """ + QWidget.__init__(self, parent) + self.setupUi(self) + + self.saveButton = self.buttonBox.addButton( + self.trUtf8("Save Report..."), QDialogButtonBox.ActionRole) + self.saveButton.setToolTip( + self.trUtf8("Press to save the report to a file")) + self.saveButton.setEnabled(False) + + self.refreshButton = self.buttonBox.addButton( + self.trUtf8("Refresh"), QDialogButtonBox.ActionRole) + self.refreshButton.setToolTip(self.trUtf8("Press to refresh the result display")) + self.refreshButton.setEnabled(False) + + self.buttonBox.button(QDialogButtonBox.Close).setEnabled(False) + self.buttonBox.button(QDialogButtonBox.Cancel).setDefault(True) + + self.messageList.header().setSortIndicator(0, Qt.AscendingOrder) + + self.process = None + self.noResults = True + self.htmlOutput = False + self.parsedOutput = False + self.__scrollPosition = -1 # illegal value + + self.typeDict = { + 'C': self.trUtf8('Convention'), + 'R': self.trUtf8('Refactor'), + 'W': self.trUtf8('Warning'), + 'E': self.trUtf8('Error'), + 'F': self.trUtf8('Fatal'), + } + + def start(self, args, fn, reportFile, ppath): + """ + Public slot to start PyLint. + + @param args commandline arguments for documentation programPyLint + (list of strings) + @param fn filename or dirname to be processed by PyLint (string) + @param reportFile filename of file to write the report to (string) + @param ppath project path (string) + @return flag indicating the successful start of the process (boolean) + """ + self.errorGroup.hide() + + self.args = args[:] + self.fn = fn + self.reportFile = reportFile + self.ppath = ppath + + self.pathname = os.path.dirname(fn) + self.filename = os.path.basename(fn) + + self.contents.clear() + self.errors.clear() + self.messageList.clear() + + self.buttonBox.button(QDialogButtonBox.Close).setEnabled(False) + self.buttonBox.button(QDialogButtonBox.Cancel).setEnabled(True) + self.buttonBox.button(QDialogButtonBox.Cancel).setDefault(True) + self.saveButton.setEnabled(False) + self.refreshButton.setEnabled(False) + + program = args[0] + del args[0] + args.append(self.filename) + + self.process = QProcess() + self.process.setWorkingDirectory(self.pathname) + + self.process.readyReadStandardError.connect(self.__readStderr) + self.process.finished.connect(self.__finish) + + self.__ioEncoding = Preferences.getSystem("IOEncoding") + if "--output-format=parseable" in args: + self.reportFile = None + self.contents.hide() + self.process.readyReadStandardOutput.connect(self.__readParseStdout) + self.parsedOutput = True + else: + self.process.readyReadStandardOutput.connect(self.__readStdout) + self.messageList.hide() + if "--output-format=html" in args: + self.contents.setAcceptRichText(True) + self.contents.setHtml('<b>Processing your request...</b>') + self.htmlOutput = True + else: + self.contents.setAcceptRichText(False) + self.contents.setCurrentFont( + Preferences.getEditorOtherFonts("MonospacedFont")) + self.htmlOutput = False + self.parsedOutput = False + self.noResults = True + + self.buf = "" + + self.process.start(program, args) + procStarted = self.process.waitForStarted() + if not procStarted: + E5MessageBox.critical(None, + self.trUtf8('Process Generation Error'), + self.trUtf8( + 'The process {0} could not be started. ' + 'Ensure, that it is in the search path.' + ).format(program)) + else: + self.setCursor(QCursor(Qt.WaitCursor)) + return procStarted + + def on_buttonBox_clicked(self, button): + """ + Private slot called by a button of the button box clicked. + + @param button button that was clicked (QAbstractButton) + """ + if button == self.buttonBox.button(QDialogButtonBox.Close): + self.close() + elif button == self.buttonBox.button(QDialogButtonBox.Cancel): + self.__finish() + elif button == self.saveButton: + self.on_saveButton_clicked() + elif button == self.refreshButton: + self.on_refreshButton_clicked() + + def __finish(self): + """ + Private slot called when the process finished. + + It is called when the process finished or + the user pressed the button. + """ + self.unsetCursor() + + if self.htmlOutput: + self.contents.setHtml(self.buf) + else: + cursor = self.contents.textCursor() + cursor.movePosition(QTextCursor.Start) + self.contents.setTextCursor(cursor) + + if self.process is not None and \ + self.process.state() != QProcess.NotRunning: + self.process.terminate() + QTimer.singleShot(2000, self.process.kill) + self.process.waitForFinished(3000) + + self.buttonBox.button(QDialogButtonBox.Close).setEnabled(True) + self.buttonBox.button(QDialogButtonBox.Cancel).setEnabled(False) + self.buttonBox.button(QDialogButtonBox.Close).setDefault(True) + self.refreshButton.setEnabled(True) + if self.parsedOutput: + QApplication.processEvents() + self.messageList.sortItems(self.messageList.sortColumn(), + self.messageList.header().sortIndicatorOrder()) + self.messageList.header().resizeSections(QHeaderView.ResizeToContents) + self.messageList.header().setStretchLastSection(True) + else: + if self.__scrollPosition != -1: + self.contents.verticalScrollBar().setValue(self.__scrollPosition) + + self.process = None + + if self.reportFile: + self.__writeReport() + elif not self.parsedOutput: + self.saveButton.setEnabled(True) + + if self.noResults: + self.__createItem(self.trUtf8('No PyLint errors found.'), "", "", "") + + @pyqtSlot() + def on_refreshButton_clicked(self): + """ + Private slot to refresh the status display. + """ + self.__scrollPosition = self.contents.verticalScrollBar().value() + self.start(self.args, self.fn, self.reportFile, self.ppath) + + def __readStdout(self): + """ + Private slot to handle the readyReadStandardOutput signal. + + It reads the output of the process, formats it and inserts it into + the contents pane. + """ + self.process.setReadChannel(QProcess.StandardOutput) + + while self.process.canReadLine(): + s = self.process.readLine() + self.buf += s + os.linesep + if not self.htmlOutput: + self.contents.insertPlainText(s) + self.contents.ensureCursorVisible() + + def __createItem(self, file, line, type_, message): + """ + Private method to create an entry in the message list. + + @param file filename of file (string) + @param line linenumber of message (integer or string) + @param type_ type of message (string) + @param message message text (string) + """ + itm = QTreeWidgetItem(self.messageList, [ + file, str(line), type_, message]) + itm.setTextAlignment(1, Qt.AlignRight) + itm.setTextAlignment(2, Qt.AlignHCenter) + + def __readParseStdout(self): + """ + Private slot to handle the readyReadStandardOutput signal for parseable output. + + It reads the output of the process, formats it and inserts it into + the message list pane. + """ + self.process.setReadChannel(QProcess.StandardOutput) + + while self.process.canReadLine(): + s = str(self.process.readLine(), self.__ioEncoding, 'replace') + if s: + try: + if Utilities.isWindowsPlatform(): + drive, s = os.path.splitdrive(s) + fname, lineno, fullmessage = s.split(':') + fname = drive + fname + else: + fname, lineno, fullmessage = s.split(':') + type_, message = fullmessage.strip().split(']', 1) + type_ = type_.strip()[1:].split(',', 1)[0] + message = message.strip() + if type_ and type_[0] in self.typeDict: + if len(type_) == 1: + self.__createItem(fname, lineno, + self.typeDict[type_], message) + else: + self.__createItem(fname, lineno, + "{0} {1}".format( + self.typeDict[type_[0]], type_[1:]), + message) + self.noResults = False + except ValueError: + continue + + def __readStderr(self): + """ + Private slot to handle the readyReadStandardError signal. + + It reads the error output of the process and inserts it into the + error pane. + """ + self.process.setReadChannel(QProcess.StandardError) + + while self.process.canReadLine(): + self.errorGroup.show() + s = str(self.process.readLine(), self.__ioEncoding, 'replace') + self.errors.insertPlainText(s) + self.errors.ensureCursorVisible() + + def on_messageList_itemActivated(self, itm, column): + """ + Private slot to handle the itemActivated signal of the message list. + + @param itm The message item that was activated (QTreeWidgetItem) + @param column column the item was activated in (integer) + """ + if self.noResults: + return + + fn = os.path.join(self.pathname, itm.text(0)) + lineno = int(itm.text(1)) + + e5App().getObject("ViewManager").openSourceFile(fn, lineno) + + def __writeReport(self): + """ + Private slot to write the report to a report file. + """ + self.reportFile = self.reportFile + if os.path.exists(self.reportFile): + res = E5MessageBox.warning(self, + self.trUtf8("PyLint Report"), + self.trUtf8( + """<p>The PyLint report file <b>{0}</b> already exists.</p>""")\ + .format(self.reportFile), + QMessageBox.StandardButtons( + QMessageBox.Cancel | \ + QMessageBox.Ignore), + QMessageBox.Cancel) + if res == QMessageBox.Cancel: + return + + try: + f = open(self.reportFile, 'w') + f.write(self.buf) + f.close() + except IOError as why: + E5MessageBox.critical(self, self.trUtf8('PyLint Report'), + self.trUtf8('<p>The PyLint report file <b>{0}</b> could not be written.' + '<br>Reason: {1}</p>') + .format(self.reportFile, str(why))) + + @pyqtSlot() + def on_saveButton_clicked(self): + """ + Private slot to save the report to a file. + """ + if self.htmlOutput: + filter = self.trUtf8("HTML Files (*.html);;All Files (*)") + else: + filter = self.trUtf8("Text Files (*.txt);;All Files (*)") + + self.reportFile = E5FileDialog.getSaveFileName( + self, + self.trUtf8("PyLint Report"), + self.ppath, + filter, + None, + QFileDialog.Options(QFileDialog.DontConfirmOverwrite)) + if self.reportFile: + self.__writeReport()
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/PyLint/PyLintExecDialog.ui Fri Jul 29 19:03:10 2011 +0200 @@ -0,0 +1,160 @@ +<ui version="4.0" > + <class>PyLintExecDialog</class> + <widget class="QWidget" name="PyLintExecDialog" > + <property name="geometry" > + <rect> + <x>0</x> + <y>0</y> + <width>753</width> + <height>605</height> + </rect> + </property> + <property name="sizePolicy" > + <sizepolicy vsizetype="Expanding" hsizetype="Expanding" > + <horstretch>0</horstretch> + <verstretch>3</verstretch> + </sizepolicy> + </property> + <property name="windowTitle" > + <string>PyLint Results</string> + </property> + <layout class="QVBoxLayout" name="verticalLayout_3" > + <item> + <widget class="QGroupBox" name="resultsGroup" > + <property name="sizePolicy" > + <sizepolicy vsizetype="Preferred" hsizetype="Preferred" > + <horstretch>0</horstretch> + <verstretch>3</verstretch> + </sizepolicy> + </property> + <property name="title" > + <string>Results</string> + </property> + <layout class="QVBoxLayout" name="verticalLayout" > + <item> + <widget class="QTextEdit" name="contents" > + <property name="sizePolicy" > + <sizepolicy vsizetype="Expanding" hsizetype="Expanding" > + <horstretch>0</horstretch> + <verstretch>3</verstretch> + </sizepolicy> + </property> + <property name="whatsThis" > + <string><b>PyLint Execution</b> +<p>This shows the results of the PyLint run.</p></string> + </property> + <property name="tabChangesFocus" > + <bool>true</bool> + </property> + <property name="readOnly" > + <bool>true</bool> + </property> + </widget> + </item> + <item> + <widget class="QTreeWidget" name="messageList" > + <property name="sizePolicy" > + <sizepolicy vsizetype="Expanding" hsizetype="Expanding" > + <horstretch>0</horstretch> + <verstretch>3</verstretch> + </sizepolicy> + </property> + <property name="alternatingRowColors" > + <bool>true</bool> + </property> + <property name="rootIsDecorated" > + <bool>false</bool> + </property> + <property name="itemsExpandable" > + <bool>false</bool> + </property> + <property name="sortingEnabled" > + <bool>true</bool> + </property> + <column> + <property name="text" > + <string>File</string> + </property> + </column> + <column> + <property name="text" > + <string>Line</string> + </property> + </column> + <column> + <property name="text" > + <string>Type</string> + </property> + </column> + <column> + <property name="text" > + <string>Message</string> + </property> + </column> + <column> + <property name="text" > + <string/> + </property> + </column> + </widget> + </item> + </layout> + </widget> + </item> + <item> + <widget class="QGroupBox" name="errorGroup" > + <property name="sizePolicy" > + <sizepolicy vsizetype="Preferred" hsizetype="Preferred" > + <horstretch>0</horstretch> + <verstretch>1</verstretch> + </sizepolicy> + </property> + <property name="title" > + <string>Errors</string> + </property> + <layout class="QVBoxLayout" name="verticalLayout_2" > + <item> + <widget class="QTextEdit" name="errors" > + <property name="sizePolicy" > + <sizepolicy vsizetype="Preferred" hsizetype="Expanding" > + <horstretch>0</horstretch> + <verstretch>1</verstretch> + </sizepolicy> + </property> + <property name="whatsThis" > + <string><b>PyLint Execution</b> +<p>This shows the errors of the PyLint run.</p></string> + </property> + <property name="tabChangesFocus" > + <bool>true</bool> + </property> + <property name="readOnly" > + <bool>true</bool> + </property> + </widget> + </item> + </layout> + </widget> + </item> + <item> + <widget class="QDialogButtonBox" name="buttonBox" > + <property name="orientation" > + <enum>Qt::Horizontal</enum> + </property> + <property name="standardButtons" > + <set>QDialogButtonBox::Cancel|QDialogButtonBox::Close</set> + </property> + </widget> + </item> + </layout> + </widget> + <layoutdefault spacing="6" margin="11" /> + <pixmapfunction>qPixmapFromMimeSource</pixmapfunction> + <tabstops> + <tabstop>contents</tabstop> + <tabstop>messageList</tabstop> + <tabstop>errors</tabstop> + </tabstops> + <resources/> + <connections/> +</ui>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/PyLint/__init__.py Fri Jul 29 19:03:10 2011 +0200 @@ -0,0 +1,8 @@ +# -*- coding: utf-8 -*- + +# Copyright (c) 2007 - 2011 Detlev Offenbach <detlev@die-offenbachs.de> +# + +""" +Package containing the PyLint plugin. +"""
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/PyLint/i18n/pylint_cs.ts Fri Jul 29 19:03:10 2011 +0200 @@ -0,0 +1,492 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS><TS version="2.0" language="cs_CZ" sourcelanguage=""> +<context> + <name>PyLintConfigDialog</name> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="211"/> + <source>PyLint Configuration</source> + <translation>PyLint konfigurace</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="235"/> + <source>General</source> + <translation>Hlavní</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="213"/> + <source>Output</source> + <translation>Výstup</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="214"/> + <source>Select to generate a plain text report</source> + <translation>Vybrat pro generování textového reportu</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="215"/> + <source>Generate &Textreport</source> + <translation>Generovat &textový report</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="216"/> + <source>Alt+T</source> + <translation></translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="217"/> + <source>Select to generate a HTML report</source> + <translation>Vybrat pro generování HTML reportu</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="218"/> + <source>Generate &HTML Report</source> + <translation>Generovat &HTML report</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="219"/> + <source>Alt+H</source> + <translation></translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="220"/> + <source>Show the pylint result in a dialog</source> + <translation>Zobrazit pylint výsledku v dialogu</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="221"/> + <source>Show Result &Dialog</source> + <translation>Zobrazit &dialog výsledku</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="222"/> + <source>Alt+D</source> + <translation></translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="223"/> + <source>Report File</source> + <translation>Report soubor</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="224"/> + <source>Enter the name of the report file</source> + <translation>Zadejte jméno souboru reportu</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="233"/> + <source>Press to open a file selection dialog</source> + <translation>Stisknout pro otevření dialogu výběru souborů</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="234"/> + <source>...</source> + <translation>...</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="227"/> + <source>Enter the name of the configuration file</source> + <translation>Zadejte jméno konfiguračního souboru</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="228"/> + <source>Press to generate a sample configuration</source> + <translation>Stisknout pro vygenerování vzorové konfigurace</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="229"/> + <source><b>Generate Configuration Template</b> +<p>This generates a sample configuration. The data is shown in a new editor window.</p></source> + <translation><b>Generovat konfigurační šablonu</b> +<p>Toto vygeneruje konfigurační šablonu. Hodnoty jsou zobrazeny v novém editačním okně.</p></translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="231"/> + <source>&Generate Configuration Template</source> + <translation>&Generovat šablonu s konfigurací</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="232"/> + <source>Alt+G</source> + <translation></translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="262"/> + <source>Checkers</source> + <translation>Kontroloři</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="236"/> + <source>Select to enable the variables checker</source> + <translation>Vybrat pro aktivaci kontrolora proměnných</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="237"/> + <source>Variables</source> + <translation>Proměnné</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="240"/> + <source>Select to enable the similarities checker</source> + <translation>Vybrat pro aktivaci kontrolora podobnosti</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="241"/> + <source>Similarities</source> + <translation>Podobnosti</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="248"/> + <source>Select to enable the metrics checker</source> + <translation>Vybrat pro aktivaci kontrolora metriky</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="249"/> + <source>Metrics</source> + <translation>Metriky</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="246"/> + <source>Select to enable the miscellaneous checker</source> + <translation>Vybrat pro aktivaci různých kontrolorů</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="247"/> + <source>Miscellaneous</source> + <translation>Různé</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="258"/> + <source>Select to enable the imports checker</source> + <translation>Vybrat pro aktivaci kontrolora importů</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="259"/> + <source>Imports</source> + <translation>Importy</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="250"/> + <source>Select to enable the format checker</source> + <translation>Vybrat pro aktivaci kontrolora formátu</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="251"/> + <source>Format</source> + <translation>Formát</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="254"/> + <source>Select to enable the design checker</source> + <translation>Vybrat pro aktivaci kontrolory designu</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="255"/> + <source>Design</source> + <translation>Design</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="256"/> + <source>Select to enable the classes checker</source> + <translation>Vybrat pro aktivaci kontrolora tříd</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="257"/> + <source>Classes</source> + <translation>Třídy</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="252"/> + <source>Select to enable the exceptions checker</source> + <translation>Vybrat pro aktivaci kontrolora výjimek</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="253"/> + <source>Exceptions</source> + <translation>Výjimky</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="260"/> + <source>Select to enable the basic checker</source> + <translation>Vybrat pro aktivaci základního kontrolora</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="261"/> + <source>Basic</source> + <translation>Základní</translation> + </message> + <message> + <location filename="PyLint/PyLintConfigDialog.py" line="231"/> + <source>Select configuration file</source> + <translation>Vybrat konfigurační soubor</translation> + </message> + <message> + <location filename="PyLint/PyLintConfigDialog.py" line="231"/> + <source>Configuration Files (*.cfg *.cnf *.rc);;All Files (*)</source> + <translation>Konfigurační soubory (*.cfg *.cnf *.rc);;Všechny soubory (*)</translation> + </message> + <message> + <location filename="PyLint/PyLintConfigDialog.py" line="246"/> + <source>Select report file</source> + <translation>Vybrat soubor reportu</translation> + </message> + <message> + <location filename="PyLint/PyLintConfigDialog.py" line="318"/> + <source>Process Generation Error</source> + <translation>Chyba v procesu generování</translation> + </message> + <message> + <location filename="PyLint/PyLintConfigDialog.py" line="318"/> + <source>Could not start %1.<br>Ensure that it is in the search path.</source> + <translation>Nelze spustit %1.<br>Ověřte, že je umístěn v požadované cestě.</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="212"/> + <source>Configuration &File:</source> + <translation>Kon&figurační soubor:</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="238"/> + <source>Select to enable the typecheck checker</source> + <translation>Vybrat pro aktivaci kontrolora typecheck</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="239"/> + <source>Typecheck</source> + <translation></translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="244"/> + <source>Select to enable the newstyle checker</source> + <translation>Vybrat pro aktivaci kontrolora newstyle</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="245"/> + <source>Newstyle</source> + <translation></translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="242"/> + <source>Select to enable the rpython checker</source> + <translation>Vybrat pro zapnutí rpython kontrolora</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="243"/> + <source>RPython</source> + <translation></translation> + </message> +</context> +<context> + <name>PyLintExecDialog</name> + <message> + <location filename="PyLint/Ui_PyLintExecDialog.py" line="86"/> + <source>PyLint Results</source> + <translation>PyLint výsledky</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintExecDialog.py" line="88"/> + <source>Results:</source> + <translation type="obsolete">Výsledky:</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintExecDialog.py" line="88"/> + <source><b>PyLint Execution</b> +<p>This shows the results of the PyLint run.</p></source> + <translation><b>Běh PyLintu</b> +<p>Zobrazuje výsledky běhu PyLintu.</p></translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintExecDialog.py" line="91"/> + <source>File</source> + <translation>Soubor</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintExecDialog.py" line="92"/> + <source>Line</source> + <translation>Řádek</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintExecDialog.py" line="93"/> + <source>Type</source> + <translation>Typ</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintExecDialog.py" line="94"/> + <source>Message</source> + <translation>Zpráva</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintExecDialog.py" line="95"/> + <source>Errors:</source> + <translation type="obsolete">Chyby:</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintExecDialog.py" line="96"/> + <source><b>PyLint Execution</b> +<p>This shows the errors of the PyLint run.</p></source> + <translation><b>Běh PyLintu</b><p>Zobrazuje výsledky běhu PyLintu.</p></translation> + </message> + <message> + <location filename="PyLint/PyLintExecDialog.py" line="40"/> + <source>Save Report...</source> + <translation>Uložit report...</translation> + </message> + <message> + <location filename="PyLint/PyLintExecDialog.py" line="42"/> + <source>Press to save the report to a file</source> + <translation>Stisknout pro uložení reportu do souboru</translation> + </message> + <message> + <location filename="PyLint/PyLintExecDialog.py" line="62"/> + <source>Convention</source> + <translation>Konvence</translation> + </message> + <message> + <location filename="PyLint/PyLintExecDialog.py" line="63"/> + <source>Refactor</source> + <translation></translation> + </message> + <message> + <location filename="PyLint/PyLintExecDialog.py" line="64"/> + <source>Warning</source> + <translation>Varování</translation> + </message> + <message> + <location filename="PyLint/PyLintExecDialog.py" line="65"/> + <source>Error</source> + <translation>Chyba</translation> + </message> + <message> + <location filename="PyLint/PyLintExecDialog.py" line="66"/> + <source>Fatal</source> + <translation>Fatální</translation> + </message> + <message> + <location filename="PyLint/PyLintExecDialog.py" line="139"/> + <source>Process Generation Error</source> + <translation>Chyba v procesu generování</translation> + </message> + <message> + <location filename="PyLint/PyLintExecDialog.py" line="205"/> + <source>No PyLint errors found.</source> + <translation>PyLint chyby nebyly nalezeny.</translation> + </message> + <message> + <location filename="PyLint/PyLintExecDialog.py" line="347"/> + <source>PyLint Report</source> + <translation>PyLint report</translation> + </message> + <message> + <location filename="PyLint/PyLintExecDialog.py" line="315"/> + <source><p>The PyLint report file <b>%1</b> already exists.</p></source> + <translation><p>Soubor s PyLint reportem <b>%1</b> již existuje.</p></translation> + </message> + <message> + <location filename="PyLint/PyLintExecDialog.py" line="332"/> + <source><p>The PyLint report file <b>%1</b> could not be written.<br>Reason: %2</p></source> + <translation><p>Do souboru s PyLint reportem <b>%1</b> nelze zapsat .<br>Důvod: %2</p></translation> + </message> + <message> + <location filename="PyLint/PyLintExecDialog.py" line="343"/> + <source>HTML Files (*.html);;All Files (*)</source> + <translation>HTML soubory (*.html);;Všechny soubory (*)</translation> + </message> + <message> + <location filename="PyLint/PyLintExecDialog.py" line="345"/> + <source>Text Files (*.txt);;All Files (*)</source> + <translation>Textové soubory (*.txt);;Všechny soubory (*)</translation> + </message> + <message> + <location filename="PyLint/PyLintExecDialog.py" line="139"/> + <source>The process %1 could not be started. Ensure, that it is in the search path.</source> + <translation>Proces %1 nelze spustit. Ověřte, že je umístěn v požadované cestě.</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintExecDialog.py" line="87"/> + <source>Results</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintExecDialog.py" line="95"/> + <source>Errors</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="PyLint/PyLintExecDialog.py" line="47"/> + <source>Refresh</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="PyLint/PyLintExecDialog.py" line="48"/> + <source>Press to refresh the result display</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>PyLintPlugin</name> + <message> + <location filename="PluginPyLint.py" line="274"/> + <source>Run PyLint</source> + <translation>Spustit PyLint</translation> + </message> + <message> + <location filename="PluginPyLint.py" line="274"/> + <source>Run &PyLint...</source> + <translation>Spustit &PyLint...</translation> + </message> + <message> + <location filename="PluginPyLint.py" line="140"/> + <source>Check project, packages or modules with pylint.</source> + <translation>Zkontrolovat projekt, balíčky nebo moduly s pylintem.</translation> + </message> + <message> + <location filename="PluginPyLint.py" line="277"/> + <source><b>Run PyLint...</b><p>This checks the project, packages or modules using pylint.</p></source> + <translation><b>Spustit PyLint...</b><p>Toto zkontroluje poejkt, balíčky nebo moduly za pomoci pylintu.</p></translation> + </message> + <message> + <location filename="PluginPyLint.py" line="287"/> + <source>Show PyLint Dialog</source> + <translation>Zobrazit PyLint dialog</translation> + </message> + <message> + <location filename="PluginPyLint.py" line="287"/> + <source>Show Py&Lint Dialog...</source> + <translation>Zobrazit Py&Lint dialog...</translation> + </message> + <message> + <location filename="PluginPyLint.py" line="153"/> + <source>Show the PyLint dialog with the results of the last run.</source> + <translation>Zobrazit PyLint dialog s výsledky posledního spuštění.</translation> + </message> + <message> + <location filename="PluginPyLint.py" line="290"/> + <source><b>Show PyLint Dialog...</b><p>This shows the PyLint dialog with the results of the last run.</p></source> + <translation><b>Zobrazit PyLint dialog...</b><p>Zobrazuje PyLint dialog s výsledky předchozího spuštění.</p></translation> + </message> + <message> + <location filename="PluginPyLint.py" line="59"/> + <source>Checkers - Pylint</source> + <translation></translation> + </message> + <message> + <location filename="PluginPyLint.py" line="126"/> + <source>PyLint version < 0.12.0.</source> + <translation>PyLint verze < 0.12.0.</translation> + </message> + <message> + <location filename="PluginPyLint.py" line="129"/> + <source>Cannot determine Pylint version.</source> + <translation>Nelze zjistit PyLint verzi.</translation> + </message> + <message> + <location filename="PluginPyLint.py" line="132"/> + <source>PyLint executable '%1' not found.</source> + <translation>PyLint spustitlený kód '%1' nebyl nalezen.</translation> + </message> + <message> + <location filename="PluginPyLint.py" line="168"/> + <source><b>Run PyLint...</b><p>This checks the loaded module using pylint.</p></source> + <translation type="unfinished"></translation> + </message> +</context> +</TS>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/PyLint/i18n/pylint_de.ts Fri Jul 29 19:03:10 2011 +0200 @@ -0,0 +1,483 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS><TS version="2.0" language="de" sourcelanguage=""> +<context> + <name>PyLintConfigDialog</name> + <message> + <location filename="PyLint/PyLintConfigDialog.py" line="231"/> + <source>Configuration Files (*.cfg *.cnf *.rc);;All Files (*)</source> + <translation>Konfigurationsdateien (*.cfg *.cnf *.rc);;Alle Dateien (*)</translation> + </message> + <message> + <location filename="PyLint/PyLintConfigDialog.py" line="231"/> + <source>Select configuration file</source> + <translation>Wähle Konfigurationsdatei aus</translation> + </message> + <message> + <location filename="PyLint/PyLintConfigDialog.py" line="246"/> + <source>Select report file</source> + <translation>Wähle Berichtsdatei aus</translation> + </message> + <message> + <location filename="PyLint/PyLintConfigDialog.py" line="318"/> + <source>Process Generation Error</source> + <translation>Fehler beim Prozessstart</translation> + </message> + <message> + <location filename="PyLint/PyLintConfigDialog.py" line="318"/> + <source>Could not start %1.<br>Ensure that it is in the search path.</source> + <translation>%1 konnte nicht gestartet werden.<br>Stellen sie sicher, dass es sich im Suchpfad befindet.</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="211"/> + <source>PyLint Configuration</source> + <translation>PyLint Konfiguration</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="235"/> + <source>General</source> + <translation>Allgemein</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="213"/> + <source>Output</source> + <translation>Ausgabe</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="214"/> + <source>Select to generate a plain text report</source> + <translation>Auswählen, um einen Textbericht zu erstellen</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="215"/> + <source>Generate &Textreport</source> + <translation>&Textbericht erzeugen</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="216"/> + <source>Alt+T</source> + <translation>Alt+T</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="217"/> + <source>Select to generate a HTML report</source> + <translation>Auswählen, um einen HTML-Bericht zu erstellen</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="218"/> + <source>Generate &HTML Report</source> + <translation>&HTML-Bericht erzeugen</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="219"/> + <source>Alt+H</source> + <translation>Alt+H</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="220"/> + <source>Show the pylint result in a dialog</source> + <translation>Zeigt das PyLint Ergebnis in einem Dialog</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="221"/> + <source>Show Result &Dialog</source> + <translation>&Ergebnisdialog anzeigen</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="222"/> + <source>Alt+D</source> + <translation>Alt+E</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="223"/> + <source>Report File</source> + <translation>Berichtsdatei</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="224"/> + <source>Enter the name of the report file</source> + <translation>Gib den Namen einer Berichtsdatei ein</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="233"/> + <source>Press to open a file selection dialog</source> + <translation>Drücken, um einen Dateiauswahldialog zu öffnen</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="234"/> + <source>...</source> + <translation>...</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="227"/> + <source>Enter the name of the configuration file</source> + <translation>Gib den namen der Konfigurationsdatei ein</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="228"/> + <source>Press to generate a sample configuration</source> + <translation>Drücken, um eine Beispielkonfiguration zu erstellen</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="229"/> + <source><b>Generate Configuration Template</b> +<p>This generates a sample configuration. The data is shown in a new editor window.</p></source> + <translation><b>Konfigurationsvorlage erstellen</b> +<p>Dies erzeugt eine Beispielkonfiguration. Die Daten werden in einem neuen Editorfenster angezeigt.</p></translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="231"/> + <source>&Generate Configuration Template</source> + <translation>&Konfigurationsvorlage erstellen</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="232"/> + <source>Alt+G</source> + <translation>Alt+K</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="262"/> + <source>Checkers</source> + <translation>Prüfer</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="236"/> + <source>Select to enable the variables checker</source> + <translation>Auswählen, um den Variablen-Prüfer zu aktivieren</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="237"/> + <source>Variables</source> + <translation>Variablen</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="240"/> + <source>Select to enable the similarities checker</source> + <translation>Auswählen, um den Ähnlichkeiten-Prüfer zu aktivieren</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="241"/> + <source>Similarities</source> + <translation>Ähnlichkeiten</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="248"/> + <source>Select to enable the metrics checker</source> + <translation>Auswählen, um Metriken zu erzeugen</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="249"/> + <source>Metrics</source> + <translation>Metriken</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="246"/> + <source>Select to enable the miscellaneous checker</source> + <translation>Auswählen, um den Prüfer für Verschiedenes zu aktivieren</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="247"/> + <source>Miscellaneous</source> + <translation>Verschiedenes</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="258"/> + <source>Select to enable the imports checker</source> + <translation>Auswählen, um den Imports-Prüfer zu aktivieren</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="259"/> + <source>Imports</source> + <translation>Imports</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="250"/> + <source>Select to enable the format checker</source> + <translation>Auswählen, um den Format-Prüfer zu aktivieren</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="251"/> + <source>Format</source> + <translation>Format</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="254"/> + <source>Select to enable the design checker</source> + <translation>Auswählen, um den Design-Prüfer zu aktivieren</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="255"/> + <source>Design</source> + <translation>Design</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="256"/> + <source>Select to enable the classes checker</source> + <translation>Auswählen, um den Klassen-Prüfer zu aktivieren</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="257"/> + <source>Classes</source> + <translation>Klassen</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="252"/> + <source>Select to enable the exceptions checker</source> + <translation>Auswählen, um den Ausnahmen-Prüfer zu aktivieren</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="253"/> + <source>Exceptions</source> + <translation>Ausnahmen</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="260"/> + <source>Select to enable the basic checker</source> + <translation>Auswählen, um den Prüfer für Grundlegendes zu aktivieren</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="261"/> + <source>Basic</source> + <translation>Grundlegendes</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="212"/> + <source>Configuration &File:</source> + <translation>Konfiguration&datei:</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="238"/> + <source>Select to enable the typecheck checker</source> + <translation>Auswählen, um den Typ-Prüfer zu aktivieren</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="239"/> + <source>Typecheck</source> + <translation>Typ</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="244"/> + <source>Select to enable the newstyle checker</source> + <translation>Auswählen, um den 'Neuer Stil'-Prüfer zu aktivieren</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="245"/> + <source>Newstyle</source> + <translation>Neuer Stil</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="242"/> + <source>Select to enable the rpython checker</source> + <translation>Auswählen, um den RPython-Prüfer zu aktivieren</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="243"/> + <source>RPython</source> + <translation>RPython</translation> + </message> +</context> +<context> + <name>PyLintExecDialog</name> + <message> + <location filename="PyLint/PyLintExecDialog.py" line="139"/> + <source>Process Generation Error</source> + <translation>Fehler beim Prozessstart</translation> + </message> + <message> + <location filename="PyLint/PyLintExecDialog.py" line="347"/> + <source>PyLint Report</source> + <translation>PyLint Bericht</translation> + </message> + <message> + <location filename="PyLint/PyLintExecDialog.py" line="315"/> + <source><p>The PyLint report file <b>%1</b> already exists.</p></source> + <translation><p>Die PyLint Berichtsdatei <b>%1</b> existiert bereits.</p></translation> + </message> + <message> + <location filename="PyLint/PyLintExecDialog.py" line="332"/> + <source><p>The PyLint report file <b>%1</b> could not be written.<br>Reason: %2</p></source> + <translation><p>Die Pylint Berichtsdatei <b>%1</b> konnte nicht geschrieben werden.<br>Ursache: %2</p></translation> + </message> + <message> + <location filename="PyLint/PyLintExecDialog.py" line="343"/> + <source>HTML Files (*.html);;All Files (*)</source> + <translation>HTML Dateien (*.html);;Alle Dateien (*)</translation> + </message> + <message> + <location filename="PyLint/PyLintExecDialog.py" line="345"/> + <source>Text Files (*.txt);;All Files (*)</source> + <translation>Textdateien (*.txt);;Alle Dateien (*)</translation> + </message> + <message> + <location filename="PyLint/PyLintExecDialog.py" line="62"/> + <source>Convention</source> + <translation>Konvention</translation> + </message> + <message> + <location filename="PyLint/PyLintExecDialog.py" line="63"/> + <source>Refactor</source> + <translation>Refaktorierung</translation> + </message> + <message> + <location filename="PyLint/PyLintExecDialog.py" line="64"/> + <source>Warning</source> + <translation>Warnung</translation> + </message> + <message> + <location filename="PyLint/PyLintExecDialog.py" line="65"/> + <source>Error</source> + <translation>Fehler</translation> + </message> + <message> + <location filename="PyLint/PyLintExecDialog.py" line="66"/> + <source>Fatal</source> + <translation>Fatal</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintExecDialog.py" line="86"/> + <source>PyLint Results</source> + <translation>PyLint Resultate</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintExecDialog.py" line="88"/> + <source><b>PyLint Execution</b> +<p>This shows the results of the PyLint run.</p></source> + <translation><b>PyLint Ausführung</b> +<p>Dies zeigt die Resultate eines PyLint Laufes.</p></translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintExecDialog.py" line="91"/> + <source>File</source> + <translation>Datei</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintExecDialog.py" line="92"/> + <source>Line</source> + <translation>Zeile</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintExecDialog.py" line="93"/> + <source>Type</source> + <translation>Typ</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintExecDialog.py" line="94"/> + <source>Message</source> + <translation>Nachricht</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintExecDialog.py" line="96"/> + <source><b>PyLint Execution</b> +<p>This shows the errors of the PyLint run.</p></source> + <translation><b>PyLint Ausführung</b> +<p>Dies zeigt die Fehler eines PyLint Laufes.</p></translation> + </message> + <message> + <location filename="PyLint/PyLintExecDialog.py" line="42"/> + <source>Press to save the report to a file</source> + <translation>Drücken, um eine Berichtsdatei zu schreiben</translation> + </message> + <message> + <location filename="PyLint/PyLintExecDialog.py" line="205"/> + <source>No PyLint errors found.</source> + <translation>Keine PyLint Fehler gefunden.</translation> + </message> + <message> + <location filename="PyLint/PyLintExecDialog.py" line="40"/> + <source>Save Report...</source> + <translation>Bericht speichern...</translation> + </message> + <message> + <location filename="PyLint/PyLintExecDialog.py" line="139"/> + <source>The process %1 could not be started. Ensure, that it is in the search path.</source> + <translation>Der Prozess %1 konnte nicht gestartet werden. Stellen Sie sicher, dass er sich im Suchpfad befindet.</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintExecDialog.py" line="87"/> + <source>Results</source> + <translation>Resultate</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintExecDialog.py" line="95"/> + <source>Errors</source> + <translation>Fehler</translation> + </message> + <message> + <location filename="PyLint/PyLintExecDialog.py" line="47"/> + <source>Refresh</source> + <translation>Erneuern</translation> + </message> + <message> + <location filename="PyLint/PyLintExecDialog.py" line="48"/> + <source>Press to refresh the result display</source> + <translation>Drücken, um die Ergebnisanzeige zu erneuern</translation> + </message> +</context> +<context> + <name>PyLintPlugin</name> + <message> + <location filename="PluginPyLint.py" line="274"/> + <source>Run PyLint</source> + <translation>PyLint ausführen</translation> + </message> + <message> + <location filename="PluginPyLint.py" line="274"/> + <source>Run &PyLint...</source> + <translation>&PyLint ausführen...</translation> + </message> + <message> + <location filename="PluginPyLint.py" line="140"/> + <source>Check project, packages or modules with pylint.</source> + <translation>Überprüft das Projekt, Packages oder Module mit PyLint.</translation> + </message> + <message> + <location filename="PluginPyLint.py" line="277"/> + <source><b>Run PyLint...</b><p>This checks the project, packages or modules using pylint.</p></source> + <translation><b>PyLint ausführen...</b><p>Dies überprüft das Projekt, Packages oder Module mit PyLint.</p></translation> + </message> + <message> + <location filename="PluginPyLint.py" line="287"/> + <source>Show PyLint Dialog</source> + <translation>Zeige PyLint Dialog</translation> + </message> + <message> + <location filename="PluginPyLint.py" line="287"/> + <source>Show Py&Lint Dialog...</source> + <translation>Zeige Py&Lint Dialog...</translation> + </message> + <message> + <location filename="PluginPyLint.py" line="153"/> + <source>Show the PyLint dialog with the results of the last run.</source> + <translation>Zeige den PyLint Dialog mit den Ergebnissen des letzten Laufes.</translation> + </message> + <message> + <location filename="PluginPyLint.py" line="290"/> + <source><b>Show PyLint Dialog...</b><p>This shows the PyLint dialog with the results of the last run.</p></source> + <translation><b>Zeige PyLint Dialog...</b><p>Dies zeigt den PyLint Dialog mit den Ergebnissen des letzten Laufes.</p></translation> + </message> + <message> + <location filename="PluginPyLint.py" line="59"/> + <source>Checkers - Pylint</source> + <translation>Prüfer - Pylint</translation> + </message> + <message> + <location filename="PluginPyLint.py" line="126"/> + <source>PyLint version < 0.12.0.</source> + <translation>PyLint Version < 0.12.0.</translation> + </message> + <message> + <location filename="PluginPyLint.py" line="129"/> + <source>Cannot determine Pylint version.</source> + <translation>PyLint Version kann nicht ermittelt werden.</translation> + </message> + <message> + <location filename="PluginPyLint.py" line="132"/> + <source>PyLint executable '%1' not found.</source> + <translation>PyLint Programm '%1' wurde nicht gefunden.</translation> + </message> + <message> + <location filename="PluginPyLint.py" line="168"/> + <source><b>Run PyLint...</b><p>This checks the loaded module using pylint.</p></source> + <translation><b>PyLint ausführen...</b><p>Dies überprüft das geladene Module mit PyLint.</p></translation> + </message> +</context> +</TS>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/PyLint/i18n/pylint_es.ts Fri Jul 29 19:03:10 2011 +0200 @@ -0,0 +1,482 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS><TS version="2.0" language="es_ES" sourcelanguage=""> +<context> + <name>PyLintConfigDialog</name> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="211"/> + <source>PyLint Configuration</source> + <translation>Configuración de PyLint</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="235"/> + <source>General</source> + <translation>General</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="212"/> + <source>Configuration &File:</source> + <translation>&Archivo de Configuración:</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="213"/> + <source>Output</source> + <translation>Output</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="214"/> + <source>Select to generate a plain text report</source> + <translation>Seleccionar para generar un informe de texto plano</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="215"/> + <source>Generate &Textreport</source> + <translation>Generar Informe de &Texto</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="216"/> + <source>Alt+T</source> + <translation>Alt+T</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="217"/> + <source>Select to generate a HTML report</source> + <translation>Seleccionar para generar un informe HTML</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="218"/> + <source>Generate &HTML Report</source> + <translation>Generar Informe &HTML</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="219"/> + <source>Alt+H</source> + <translation>Alt+H</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="220"/> + <source>Show the pylint result in a dialog</source> + <translation>Mostrar en un diálogo el resultado de pylint</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="221"/> + <source>Show Result &Dialog</source> + <translation>Mostrar un &Diálogo de Resultado</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="222"/> + <source>Alt+D</source> + <translation>Alt+D</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="223"/> + <source>Report File</source> + <translation>Archivo de Informe</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="224"/> + <source>Enter the name of the report file</source> + <translation>Intruducir el nombre de un archivo de informe</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="233"/> + <source>Press to open a file selection dialog</source> + <translation>Pulse para abrir un diálogo de selección de archivo</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="234"/> + <source>...</source> + <translation>...</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="227"/> + <source>Enter the name of the configuration file</source> + <translation>Introduzca el nombre del archivo de configuración</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="228"/> + <source>Press to generate a sample configuration</source> + <translation>ulse para generar una configuración de ejemplo</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="229"/> + <source><b>Generate Configuration Template</b> +<p>This generates a sample configuration. The data is shown in a new editor window.</p></source> + <translation><b>Generar Plantilla de Configuración</b> +<p>Genera una configuración de ejemplo. Los datos se muestran en una nueva ventana de editor.</p></translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="231"/> + <source>&Generate Configuration Template</source> + <translation>&Generar Plantilla de Configuración</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="232"/> + <source>Alt+G</source> + <translation>Alt+G</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="262"/> + <source>Checkers</source> + <translation>Revisores</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="236"/> + <source>Select to enable the variables checker</source> + <translation>Seleccionar para habilitar la verificación de variables</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="237"/> + <source>Variables</source> + <translation>Variables</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="238"/> + <source>Select to enable the typecheck checker</source> + <translation>Seleccionar para habilitar la verificación de tipos</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="239"/> + <source>Typecheck</source> + <translation>Revisión de Tipos</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="240"/> + <source>Select to enable the similarities checker</source> + <translation>Seleccionar para habilitar la verificación de similitudes</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="241"/> + <source>Similarities</source> + <translation>Similitudes</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="242"/> + <source>Select to enable the rpython checker</source> + <translation>Seleccionar para habilitar la verificación de rpython</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="243"/> + <source>RPython</source> + <translation>RPython</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="244"/> + <source>Select to enable the newstyle checker</source> + <translation>Seleccionar para habilitar la verificación de nuevo estilo</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="245"/> + <source>Newstyle</source> + <translation>Nuevo Estilo</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="246"/> + <source>Select to enable the miscellaneous checker</source> + <translation>Seleccionar para habilitar diversas verificaciones</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="247"/> + <source>Miscellaneous</source> + <translation>Miscelánea</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="248"/> + <source>Select to enable the metrics checker</source> + <translation>Seleccionar para habilitar la veriricación de métricas</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="249"/> + <source>Metrics</source> + <translation>Métricas</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="250"/> + <source>Select to enable the format checker</source> + <translation>Seleccionar para habilitar la verificación de formato</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="251"/> + <source>Format</source> + <translation>Formato</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="252"/> + <source>Select to enable the exceptions checker</source> + <translation>Seleccionar para habilitar la verificación de excepciones</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="253"/> + <source>Exceptions</source> + <translation>Excepciones</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="254"/> + <source>Select to enable the design checker</source> + <translation>Seleccionar para habilitar la revisión de diseño</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="255"/> + <source>Design</source> + <translation>Diseño</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="256"/> + <source>Select to enable the classes checker</source> + <translation>Seleccionar para habilitar la verificación de clases</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="257"/> + <source>Classes</source> + <translation>Clases</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="258"/> + <source>Select to enable the imports checker</source> + <translation>Seleccionar para habilitar la verificación de imports</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="259"/> + <source>Imports</source> + <translation>Imports</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="260"/> + <source>Select to enable the basic checker</source> + <translation>Seleccionar para habilitar la verificación básica</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="261"/> + <source>Basic</source> + <translation>Básica</translation> + </message> + <message> + <location filename="PyLint/PyLintConfigDialog.py" line="231"/> + <source>Select configuration file</source> + <translation>Seleccionar archivo de configuración</translation> + </message> + <message> + <location filename="PyLint/PyLintConfigDialog.py" line="231"/> + <source>Configuration Files (*.cfg *.cnf *.rc);;All Files (*)</source> + <translation>Archivos de configuración (*.cfg *.cnf *.rc);;Todos los Archivos (*)</translation> + </message> + <message> + <location filename="PyLint/PyLintConfigDialog.py" line="246"/> + <source>Select report file</source> + <translation>Seleccionar archivo de informes</translation> + </message> + <message> + <location filename="PyLint/PyLintConfigDialog.py" line="318"/> + <source>Process Generation Error</source> + <translation>Error de Generación de Proceso</translation> + </message> + <message> + <location filename="PyLint/PyLintConfigDialog.py" line="318"/> + <source>Could not start %1.<br>Ensure that it is in the search path.</source> + <translation>No se ha podido ejecutar el proceso %1.<br>Asegúrese de que está en la ruta de búsqueda.</translation> + </message> +</context> +<context> + <name>PyLintExecDialog</name> + <message> + <location filename="PyLint/Ui_PyLintExecDialog.py" line="86"/> + <source>PyLint Results</source> + <translation>Resultados de PyLint</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintExecDialog.py" line="88"/> + <source><b>PyLint Execution</b> +<p>This shows the results of the PyLint run.</p></source> + <translation><b>Ejecución de PyLint</b><p>Muestra los resultados de la ejecución de PyLint.</p></translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintExecDialog.py" line="91"/> + <source>File</source> + <translation>Archivo</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintExecDialog.py" line="92"/> + <source>Line</source> + <translation>Línea</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintExecDialog.py" line="93"/> + <source>Type</source> + <translation>Tipo</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintExecDialog.py" line="94"/> + <source>Message</source> + <translation>Mensaje</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintExecDialog.py" line="96"/> + <source><b>PyLint Execution</b> +<p>This shows the errors of the PyLint run.</p></source> + <translation><b>Ejecución de PyLint</b> +<p>Muestra los errores de la ejecución de PyLint.</p></translation> + </message> + <message> + <location filename="PyLint/PyLintExecDialog.py" line="40"/> + <source>Save Report...</source> + <translation>Gaurdar Informe...</translation> + </message> + <message> + <location filename="PyLint/PyLintExecDialog.py" line="42"/> + <source>Press to save the report to a file</source> + <translation>Pulse para guardar el informe a un archivo</translation> + </message> + <message> + <location filename="PyLint/PyLintExecDialog.py" line="62"/> + <source>Convention</source> + <translation>Convención</translation> + </message> + <message> + <location filename="PyLint/PyLintExecDialog.py" line="63"/> + <source>Refactor</source> + <translation>Refactorizar</translation> + </message> + <message> + <location filename="PyLint/PyLintExecDialog.py" line="64"/> + <source>Warning</source> + <translation>Advertencia</translation> + </message> + <message> + <location filename="PyLint/PyLintExecDialog.py" line="65"/> + <source>Error</source> + <translation>Error</translation> + </message> + <message> + <location filename="PyLint/PyLintExecDialog.py" line="66"/> + <source>Fatal</source> + <translation>Fatal</translation> + </message> + <message> + <location filename="PyLint/PyLintExecDialog.py" line="139"/> + <source>Process Generation Error</source> + <translation>Error de Generación de Proceso</translation> + </message> + <message> + <location filename="PyLint/PyLintExecDialog.py" line="139"/> + <source>The process %1 could not be started. Ensure, that it is in the search path.</source> + <translation>No se ha podido ejecutar el proceso %1.<br>Asegúrese de que está en la ruta de búsqueda.</translation> + </message> + <message> + <location filename="PyLint/PyLintExecDialog.py" line="205"/> + <source>No PyLint errors found.</source> + <translation>No se han encontrado errores de PyLint.</translation> + </message> + <message> + <location filename="PyLint/PyLintExecDialog.py" line="347"/> + <source>PyLint Report</source> + <translation>Informe de PyLint</translation> + </message> + <message> + <location filename="PyLint/PyLintExecDialog.py" line="315"/> + <source><p>The PyLint report file <b>%1</b> already exists.</p></source> + <translation><p>El archivo de informe PyLint <b>%1</b> ya existe.</p></translation> + </message> + <message> + <location filename="PyLint/PyLintExecDialog.py" line="332"/> + <source><p>The PyLint report file <b>%1</b> could not be written.<br>Reason: %2</p></source> + <translation><p>El archivo de informe PyLint <b>%1</b> no ha podido guardarse.<br>Causa: %2</p></translation> + </message> + <message> + <location filename="PyLint/PyLintExecDialog.py" line="343"/> + <source>HTML Files (*.html);;All Files (*)</source> + <translation>Archivos HTML (*.html);;Todos los Archivos (*)</translation> + </message> + <message> + <location filename="PyLint/PyLintExecDialog.py" line="345"/> + <source>Text Files (*.txt);;All Files (*)</source> + <translation>Archivos de Texto (*.txt);;Todos los Archivos (*)</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintExecDialog.py" line="87"/> + <source>Results</source> + <translation>Resultados</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintExecDialog.py" line="95"/> + <source>Errors</source> + <translation>Errores</translation> + </message> + <message> + <location filename="PyLint/PyLintExecDialog.py" line="47"/> + <source>Refresh</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="PyLint/PyLintExecDialog.py" line="48"/> + <source>Press to refresh the result display</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>PyLintPlugin</name> + <message> + <location filename="PluginPyLint.py" line="59"/> + <source>Checkers - Pylint</source> + <translation>Revisores - PyLint</translation> + </message> + <message> + <location filename="PluginPyLint.py" line="126"/> + <source>PyLint version < 0.12.0.</source> + <translation>Versión de PyLint < 0.12.0.</translation> + </message> + <message> + <location filename="PluginPyLint.py" line="129"/> + <source>Cannot determine Pylint version.</source> + <translation>No se puede determinar la versión de PyLint.</translation> + </message> + <message> + <location filename="PluginPyLint.py" line="132"/> + <source>PyLint executable '%1' not found.</source> + <translation>Ejecutable de PyLint '%1' no encontrado.</translation> + </message> + <message> + <location filename="PluginPyLint.py" line="274"/> + <source>Run PyLint</source> + <translation>Ejecutar PyLint</translation> + </message> + <message> + <location filename="PluginPyLint.py" line="274"/> + <source>Run &PyLint...</source> + <translation>Ejecutar &PyLint...</translation> + </message> + <message> + <location filename="PluginPyLint.py" line="140"/> + <source>Check project, packages or modules with pylint.</source> + <translation>Revisar proyecto, paquetes o módulos con pylint.</translation> + </message> + <message> + <location filename="PluginPyLint.py" line="277"/> + <source><b>Run PyLint...</b><p>This checks the project, packages or modules using pylint.</p></source> + <translation><b>Ejecutar PyLint...</b><p>Verifica el proyecto, paquetes o módulos usando pylint.</p></translation> + </message> + <message> + <location filename="PluginPyLint.py" line="287"/> + <source>Show PyLint Dialog</source> + <translation>Mostrar Diálogo de PyLint</translation> + </message> + <message> + <location filename="PluginPyLint.py" line="287"/> + <source>Show Py&Lint Dialog...</source> + <translation>Mostrar Diálogo de Py&Lint...</translation> + </message> + <message> + <location filename="PluginPyLint.py" line="153"/> + <source>Show the PyLint dialog with the results of the last run.</source> + <translation>Mostrar el diálogo de PyLint con los resultados de la última ejecución.</translation> + </message> + <message> + <location filename="PluginPyLint.py" line="290"/> + <source><b>Show PyLint Dialog...</b><p>This shows the PyLint dialog with the results of the last run.</p></source> + <translation><b>Mostrar Diálogo de PyLint...</b><p>Muestra el diálogo de PyLint con los resultados de la última ejecución.</p></translation> + </message> + <message> + <location filename="PluginPyLint.py" line="168"/> + <source><b>Run PyLint...</b><p>This checks the loaded module using pylint.</p></source> + <translation><b>Ejecutar PyLint...</b><p>Utiliza pylint para chequear el módulo cargado.</p></translation> + </message> +</context> +</TS>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/PyLint/i18n/pylint_fr.ts Fri Jul 29 19:03:10 2011 +0200 @@ -0,0 +1,493 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS><TS version="2.0" language="fr" sourcelanguage=""> +<context> + <name>PyLintConfigDialog</name> + <message> + <location filename="PyLint/PyLintConfigDialog.py" line="231"/> + <source>Configuration Files (*.cfg *.cnf *.rc);;All Files (*)</source> + <translation>Fichiers de configuration (*.cfg *.cnf *.rc);;Tous les fichiers (*)</translation> + </message> + <message> + <location filename="PyLint/PyLintConfigDialog.py" line="231"/> + <source>Select configuration file</source> + <translation>Sélection d'un fichier de configuration</translation> + </message> + <message> + <location filename="PyLint/PyLintConfigDialog.py" line="246"/> + <source>Select report file</source> + <translation>Sélecion d'un fichier rapport</translation> + </message> + <message> + <location filename="PyLint/PyLintConfigDialog.py" line="318"/> + <source>Process Generation Error</source> + <translation>Erreur dans la generation du processus</translation> + </message> + <message> + <location filename="PyLint/PyLintConfigDialog.py" line="318"/> + <source>Could not start %1.<br>Ensure that it is in the search path.</source> + <translation>Impossible de démarrer %1.<br>Assurez-vous qu'il est bien dans le chemin de recherche.</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="211"/> + <source>PyLint Configuration</source> + <translation>Configuration de PyLint</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="235"/> + <source>General</source> + <translation>Général</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="213"/> + <source>Output</source> + <translation>Sortie</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="214"/> + <source>Select to generate a plain text report</source> + <translation>Sélectionner pour générer un rapport au format texte brut</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="215"/> + <source>Generate &Textreport</source> + <translation>Générer un rapport au format &texte</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="216"/> + <source>Alt+T</source> + <translation>Alt+T</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="217"/> + <source>Select to generate a HTML report</source> + <translation>Sélectionner pour générer un rapport au format HTML</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="218"/> + <source>Generate &HTML Report</source> + <translation>Générer un rapport au format &HTML</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="219"/> + <source>Alt+H</source> + <translation>Alt+H</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="220"/> + <source>Show the pylint result in a dialog</source> + <translation>Afficher les résultats de pylint dans un fenêtre indépendante</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="221"/> + <source>Show Result &Dialog</source> + <translation>Afficher le résultat dans une &fenêtre</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="222"/> + <source>Alt+D</source> + <translation>Alt+D</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="223"/> + <source>Report File</source> + <translation>Fichier Rapport</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="224"/> + <source>Enter the name of the report file</source> + <translation>Entrer le nom du fichier rapport</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="233"/> + <source>Press to open a file selection dialog</source> + <translation>Cliquer pour choisir un fichier</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="234"/> + <source>...</source> + <translation>...</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="227"/> + <source>Enter the name of the configuration file</source> + <translation>Entrer le nom du fichier de configuration</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="228"/> + <source>Press to generate a sample configuration</source> + <translation>Cliquer pour générer un exemple de configuration</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="229"/> + <source><b>Generate Configuration Template</b> +<p>This generates a sample configuration. The data is shown in a new editor window.</p></source> + <translation><b>Générer un gabarit de configuration</b> +<p>Génère un exemple de configuration. Les données sont affichées dans une nouvelle fenêtre d'édition.</p></translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="231"/> + <source>&Generate Configuration Template</source> + <translation>&Générer un gabarit de configuration</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="232"/> + <source>Alt+G</source> + <translation>Alt+G</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="262"/> + <source>Checkers</source> + <translation>Vérificateurs</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="236"/> + <source>Select to enable the variables checker</source> + <translation>Cocher pour activer la vérification des variables</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="237"/> + <source>Variables</source> + <translation>Variables</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="240"/> + <source>Select to enable the similarities checker</source> + <translation>Cocher pour activer la vérification des similarités</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="241"/> + <source>Similarities</source> + <translation>Similarités</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="248"/> + <source>Select to enable the metrics checker</source> + <translation>Cocher pour activer le décompte des lignes dans les différentes catégories de code</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="249"/> + <source>Metrics</source> + <translation>Décompte des lignes</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="246"/> + <source>Select to enable the miscellaneous checker</source> + <translation>Cocher pour activer la vérification des paramètres divers</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="247"/> + <source>Miscellaneous</source> + <translation>Divers</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="258"/> + <source>Select to enable the imports checker</source> + <translation>Cocher pour activer la vérification des importations</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="259"/> + <source>Imports</source> + <translation>Imports</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="250"/> + <source>Select to enable the format checker</source> + <translation>Cocher pour activer la vérification des formats</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="251"/> + <source>Format</source> + <translation>Format</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="254"/> + <source>Select to enable the design checker</source> + <translation>Cocher pour activer la vérification de design de code</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="255"/> + <source>Design</source> + <translation>Design</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="256"/> + <source>Select to enable the classes checker</source> + <translation>Cocher pour activer la vérification des classes</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="257"/> + <source>Classes</source> + <translation>Classes</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="252"/> + <source>Select to enable the exceptions checker</source> + <translation>Cocher pour activer la vérification des exceptions</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="253"/> + <source>Exceptions</source> + <translation>Exceptions</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="260"/> + <source>Select to enable the basic checker</source> + <translation>Cocher pour activer la vérification basique</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="261"/> + <source>Basic</source> + <translation>Basique</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="212"/> + <source>Configuration &File:</source> + <translation>&Fichier de configuration:</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="238"/> + <source>Select to enable the typecheck checker</source> + <translation>Cocher pour activer le vérificateur de types</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="239"/> + <source>Typecheck</source> + <translation>Vérificateur de types</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="244"/> + <source>Select to enable the newstyle checker</source> + <translation>Cocher pour activer le vérificateur de styles</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="245"/> + <source>Newstyle</source> + <translation>Newstyle</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="242"/> + <source>Select to enable the rpython checker</source> + <translation>Cocher pour activer le vérificateur rpython</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="243"/> + <source>RPython</source> + <translation>RPython</translation> + </message> +</context> +<context> + <name>PyLintExecDialog</name> + <message> + <location filename="PyLint/PyLintExecDialog.py" line="139"/> + <source>Process Generation Error</source> + <translation>Erreur dans la génération du processus</translation> + </message> + <message> + <location filename="PyLint/PyLintExecDialog.py" line="347"/> + <source>PyLint Report</source> + <translation>Rapport PyLint</translation> + </message> + <message> + <location filename="PyLint/PyLintExecDialog.py" line="315"/> + <source><p>The PyLint report file <b>%1</b> already exists.</p></source> + <translation><p>Le fichier rapport PyLint <b>%1</b> existe déjà.</p></translation> + </message> + <message> + <location filename="PyLint/PyLintExecDialog.py" line="332"/> + <source><p>The PyLint report file <b>%1</b> could not be written.<br>Reason: %2</p></source> + <translation><p>Impossible d'écrire le fichier rapport PyLint <b>%1</b>. Raison : <b>%2</b></p></translation> + </message> + <message> + <location filename="PyLint/PyLintExecDialog.py" line="343"/> + <source>HTML Files (*.html);;All Files (*)</source> + <translation>Fichiers HTML (*.html);;Tous les fichiers (*)</translation> + </message> + <message> + <location filename="PyLint/PyLintExecDialog.py" line="345"/> + <source>Text Files (*.txt);;All Files (*)</source> + <translation>Fichiers texte (*.txt);;Tous fichiers (*)</translation> + </message> + <message> + <location filename="PyLint/PyLintExecDialog.py" line="62"/> + <source>Convention</source> + <translation>Convention</translation> + </message> + <message> + <location filename="PyLint/PyLintExecDialog.py" line="63"/> + <source>Refactor</source> + <translation>Restructuration</translation> + </message> + <message> + <location filename="PyLint/PyLintExecDialog.py" line="64"/> + <source>Warning</source> + <translation>Warning</translation> + </message> + <message> + <location filename="PyLint/PyLintExecDialog.py" line="65"/> + <source>Error</source> + <translation>Erreur</translation> + </message> + <message> + <location filename="PyLint/PyLintExecDialog.py" line="66"/> + <source>Fatal</source> + <translation>Fatal</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintExecDialog.py" line="86"/> + <source>PyLint Results</source> + <translation>Résultats PyLint</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintExecDialog.py" line="88"/> + <source>Results:</source> + <translation type="obsolete">Résultats:</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintExecDialog.py" line="88"/> + <source><b>PyLint Execution</b> +<p>This shows the results of the PyLint run.</p></source> + <translation><b>Execution PyLint</b> +<p>Affiche les résultats de la vérification PyLint.</p></translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintExecDialog.py" line="91"/> + <source>File</source> + <translation>Fichier</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintExecDialog.py" line="92"/> + <source>Line</source> + <translation>Ligne</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintExecDialog.py" line="93"/> + <source>Type</source> + <translation>Type</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintExecDialog.py" line="94"/> + <source>Message</source> + <translation>Message</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintExecDialog.py" line="95"/> + <source>Errors:</source> + <translation type="obsolete">Erreurs:</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintExecDialog.py" line="96"/> + <source><b>PyLint Execution</b> +<p>This shows the errors of the PyLint run.</p></source> + <translation><b>Execution PyLint</b> +<p>Affiche les erreurs de l'execution de PyLint.</p></translation> + </message> + <message> + <location filename="PyLint/PyLintExecDialog.py" line="42"/> + <source>Press to save the report to a file</source> + <translation>Cliquer pour enregistrer le rapport dans un fichier</translation> + </message> + <message> + <location filename="PyLint/PyLintExecDialog.py" line="205"/> + <source>No PyLint errors found.</source> + <translation>Aucune erreur PyLint.</translation> + </message> + <message> + <location filename="PyLint/PyLintExecDialog.py" line="40"/> + <source>Save Report...</source> + <translation>Enregistrer le rapport...</translation> + </message> + <message> + <location filename="PyLint/PyLintExecDialog.py" line="139"/> + <source>The process %1 could not be started. Ensure, that it is in the search path.</source> + <translation>Impossible de lancer le processus %1. Assurez-vous qu'il est bien dans le chemin de recherche.</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintExecDialog.py" line="87"/> + <source>Results</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintExecDialog.py" line="95"/> + <source>Errors</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="PyLint/PyLintExecDialog.py" line="47"/> + <source>Refresh</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="PyLint/PyLintExecDialog.py" line="48"/> + <source>Press to refresh the result display</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>PyLintPlugin</name> + <message> + <location filename="PluginPyLint.py" line="274"/> + <source>Run PyLint</source> + <translation>Lancer PyLint</translation> + </message> + <message> + <location filename="PluginPyLint.py" line="274"/> + <source>Run &PyLint...</source> + <translation>Lancer &PyLint...</translation> + </message> + <message> + <location filename="PluginPyLint.py" line="140"/> + <source>Check project, packages or modules with pylint.</source> + <translation>Vérifie le projet, les packages ou les modules avec pylint.</translation> + </message> + <message> + <location filename="PluginPyLint.py" line="277"/> + <source><b>Run PyLint...</b><p>This checks the project, packages or modules using pylint.</p></source> + <translation><b>Lancer PyLint...</b><p>Vérifie le projet, les packages ou les modules avec pylint.</p></translation> + </message> + <message> + <location filename="PluginPyLint.py" line="287"/> + <source>Show PyLint Dialog</source> + <translation>Afficher la fenêtre PyLint</translation> + </message> + <message> + <location filename="PluginPyLint.py" line="287"/> + <source>Show Py&Lint Dialog...</source> + <translation>Afficher la fenêtre P&yLint...</translation> + </message> + <message> + <location filename="PluginPyLint.py" line="153"/> + <source>Show the PyLint dialog with the results of the last run.</source> + <translation>Affiche la fenêtre PyLint avec les résultats du dernier run.</translation> + </message> + <message> + <location filename="PluginPyLint.py" line="290"/> + <source><b>Show PyLint Dialog...</b><p>This shows the PyLint dialog with the results of the last run.</p></source> + <translation><b>Afficher la fenêtre PyLint...</b><p>Affiche la fenêtre PyLint avec les résultats du dernier run.</p></translation> + </message> + <message> + <location filename="PluginPyLint.py" line="59"/> + <source>Checkers - Pylint</source> + <translation>Vérificateurs - Pylint</translation> + </message> + <message> + <location filename="PluginPyLint.py" line="126"/> + <source>PyLint version < 0.12.0.</source> + <translation>PyLint version < 0.12.0.</translation> + </message> + <message> + <location filename="PluginPyLint.py" line="129"/> + <source>Cannot determine Pylint version.</source> + <translation>Impossible de déterminer la version de Pylint.</translation> + </message> + <message> + <location filename="PluginPyLint.py" line="132"/> + <source>PyLint executable '%1' not found.</source> + <translation>Impossible de trouver l'executable Pylint '%1'.</translation> + </message> + <message> + <location filename="PluginPyLint.py" line="168"/> + <source><b>Run PyLint...</b><p>This checks the loaded module using pylint.</p></source> + <translation type="unfinished"></translation> + </message> +</context> +</TS>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/PyLint/i18n/pylint_ru.ts Fri Jul 29 19:03:10 2011 +0200 @@ -0,0 +1,493 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS><TS version="2.0" language="ru" sourcelanguage=""> +<context> + <name>PyLintConfigDialog</name> + <message> + <location filename="PyLint/PyLintConfigDialog.py" line="231"/> + <source>Configuration Files (*.cfg *.cnf *.rc);;All Files (*)</source> + <translation>Файлы конфигурации (*.cfg *.cnf *.rc);;Все файлы (*)</translation> + </message> + <message> + <location filename="PyLint/PyLintConfigDialog.py" line="231"/> + <source>Select configuration file</source> + <translation>Выберите файл конфигурации</translation> + </message> + <message> + <location filename="PyLint/PyLintConfigDialog.py" line="246"/> + <source>Select report file</source> + <translation>Выберите файл отчёта</translation> + </message> + <message> + <location filename="PyLint/PyLintConfigDialog.py" line="318"/> + <source>Process Generation Error</source> + <translation>Ошибка процесса генерации</translation> + </message> + <message> + <location filename="PyLint/PyLintConfigDialog.py" line="318"/> + <source>Could not start %1.<br>Ensure that it is in the search path.</source> + <translation>Невозможно запустить %1.<br>Убедитесь, что он находится в пути поиска.</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="211"/> + <source>PyLint Configuration</source> + <translation>Конфигурация PyLint</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="235"/> + <source>General</source> + <translation>Общее</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="213"/> + <source>Output</source> + <translation>Вывод</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="214"/> + <source>Select to generate a plain text report</source> + <translation>Генерировать отчёт в виде простого текста</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="215"/> + <source>Generate &Textreport</source> + <translation>Генерировать &текстовый отчёт</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="216"/> + <source>Alt+T</source> + <translation>Alt+T</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="217"/> + <source>Select to generate a HTML report</source> + <translation>Генерировать отчёт в виде HTML</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="218"/> + <source>Generate &HTML Report</source> + <translation>Генерировать &HTML отчёт</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="219"/> + <source>Alt+H</source> + <translation>Alt+H</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="220"/> + <source>Show the pylint result in a dialog</source> + <translation>Показать результаты pylint в диалоге</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="221"/> + <source>Show Result &Dialog</source> + <translation>Показать &диалог с результатами</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="222"/> + <source>Alt+D</source> + <translation>Alt+D</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="223"/> + <source>Report File</source> + <translation>Файл отчёта</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="224"/> + <source>Enter the name of the report file</source> + <translation>Задайте имя файла отчёта</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="233"/> + <source>Press to open a file selection dialog</source> + <translation>Открыть диалог выбора файла</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="234"/> + <source>...</source> + <translation>...</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="227"/> + <source>Enter the name of the configuration file</source> + <translation>Задайте имя конфигурационного файла</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="228"/> + <source>Press to generate a sample configuration</source> + <translation>Нажмите для генерации примерной конфигурации</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="229"/> + <source><b>Generate Configuration Template</b> +<p>This generates a sample configuration. The data is shown in a new editor window.</p></source> + <translation><b>Генерировать шаблон конфигурации</b> +<p>Генерирует примерную конфигурацию. Данные будут показаны в новом окне редактора.</p></translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="231"/> + <source>&Generate Configuration Template</source> + <translation>&Генерировать шаблон конфигурации</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="232"/> + <source>Alt+G</source> + <translation>Alt+G</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="262"/> + <source>Checkers</source> + <translation>Проверки</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="236"/> + <source>Select to enable the variables checker</source> + <translation>Разрешить проверку переменных</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="237"/> + <source>Variables</source> + <translation>Переменные</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="240"/> + <source>Select to enable the similarities checker</source> + <translation>Разрешить проверку схожестей</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="241"/> + <source>Similarities</source> + <translation>Схожести</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="248"/> + <source>Select to enable the metrics checker</source> + <translation>Разрешить проверку метрик</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="249"/> + <source>Metrics</source> + <translation>Метрики</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="246"/> + <source>Select to enable the miscellaneous checker</source> + <translation>Разрешить проверку всего остального</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="247"/> + <source>Miscellaneous</source> + <translation>Разное</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="258"/> + <source>Select to enable the imports checker</source> + <translation>Разрешить проверку импортов</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="259"/> + <source>Imports</source> + <translation>Импорты</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="250"/> + <source>Select to enable the format checker</source> + <translation>Разрешить проверку формата</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="251"/> + <source>Format</source> + <translation>Формат</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="254"/> + <source>Select to enable the design checker</source> + <translation>Разрешить проверку дизайна</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="255"/> + <source>Design</source> + <translation>Дизайн</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="256"/> + <source>Select to enable the classes checker</source> + <translation>Разрешить проверку классов</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="257"/> + <source>Classes</source> + <translation>Классы</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="252"/> + <source>Select to enable the exceptions checker</source> + <translation>Разрешить проверку исключений</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="253"/> + <source>Exceptions</source> + <translation>Исключения</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="260"/> + <source>Select to enable the basic checker</source> + <translation>Разрешить базовую проверку</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="261"/> + <source>Basic</source> + <translation>Базовые</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="212"/> + <source>Configuration &File:</source> + <translation>Конфигурационный &файл:</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="238"/> + <source>Select to enable the typecheck checker</source> + <translation>Разрешить проверку типов</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="239"/> + <source>Typecheck</source> + <translation>Проверка типов</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="244"/> + <source>Select to enable the newstyle checker</source> + <translation>Разрешить проверку нового стиля</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="245"/> + <source>Newstyle</source> + <translation>Новый стиль</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="242"/> + <source>Select to enable the rpython checker</source> + <translation>Разрешить проверку rpython</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintConfigDialog.py" line="243"/> + <source>RPython</source> + <translation>RPython</translation> + </message> +</context> +<context> + <name>PyLintExecDialog</name> + <message> + <location filename="PyLint/PyLintExecDialog.py" line="139"/> + <source>Process Generation Error</source> + <translation>Ошибка процесса генерации</translation> + </message> + <message> + <location filename="PyLint/PyLintExecDialog.py" line="347"/> + <source>PyLint Report</source> + <translation>Отчёт PyLint</translation> + </message> + <message> + <location filename="PyLint/PyLintExecDialog.py" line="315"/> + <source><p>The PyLint report file <b>%1</b> already exists.</p></source> + <translation><p>Отчёт <b>%1</b> уже сущеструет.</p></translation> + </message> + <message> + <location filename="PyLint/PyLintExecDialog.py" line="332"/> + <source><p>The PyLint report file <b>%1</b> could not be written.<br>Reason: %2</p></source> + <translation><p>Невозможно сохранить файл отчёта <b>%1</b>.<br> %2</p></translation> + </message> + <message> + <location filename="PyLint/PyLintExecDialog.py" line="343"/> + <source>HTML Files (*.html);;All Files (*)</source> + <translation>Файлы разметки HTML (*.html);;Все файлы (*)</translation> + </message> + <message> + <location filename="PyLint/PyLintExecDialog.py" line="345"/> + <source>Text Files (*.txt);;All Files (*)</source> + <translation>Текстовые файлы (*.txt);;Все файлы (*)</translation> + </message> + <message> + <location filename="PyLint/PyLintExecDialog.py" line="62"/> + <source>Convention</source> + <translation>Соглашение</translation> + </message> + <message> + <location filename="PyLint/PyLintExecDialog.py" line="63"/> + <source>Refactor</source> + <translation>Переработка</translation> + </message> + <message> + <location filename="PyLint/PyLintExecDialog.py" line="64"/> + <source>Warning</source> + <translation>Предупреждение</translation> + </message> + <message> + <location filename="PyLint/PyLintExecDialog.py" line="65"/> + <source>Error</source> + <translation>Ошибка</translation> + </message> + <message> + <location filename="PyLint/PyLintExecDialog.py" line="66"/> + <source>Fatal</source> + <translation>Критическая</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintExecDialog.py" line="86"/> + <source>PyLint Results</source> + <translation>Результаты PyLint</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintExecDialog.py" line="88"/> + <source>Results:</source> + <translation type="obsolete">Результаты:</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintExecDialog.py" line="88"/> + <source><b>PyLint Execution</b> +<p>This shows the results of the PyLint run.</p></source> + <translation><b>Выполнение PyLint</b> +<p>Отображает результаты выполнения PyLint.</p></translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintExecDialog.py" line="91"/> + <source>File</source> + <translation>Файл</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintExecDialog.py" line="92"/> + <source>Line</source> + <translation>Строка</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintExecDialog.py" line="93"/> + <source>Type</source> + <translation>Тип</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintExecDialog.py" line="94"/> + <source>Message</source> + <translation>Сообщение</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintExecDialog.py" line="95"/> + <source>Errors:</source> + <translation type="obsolete">Ошибки:</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintExecDialog.py" line="96"/> + <source><b>PyLint Execution</b> +<p>This shows the errors of the PyLint run.</p></source> + <translation><b>Выполнение PyLint</b> +<p>Отображает ошибки выполнения PyLint.</p></translation> + </message> + <message> + <location filename="PyLint/PyLintExecDialog.py" line="42"/> + <source>Press to save the report to a file</source> + <translation>Сохранить отчёт в файл</translation> + </message> + <message> + <location filename="PyLint/PyLintExecDialog.py" line="205"/> + <source>No PyLint errors found.</source> + <translation>Ошибки PyLint не найдены.</translation> + </message> + <message> + <location filename="PyLint/PyLintExecDialog.py" line="40"/> + <source>Save Report...</source> + <translation>Сохранить отчёт...</translation> + </message> + <message> + <location filename="PyLint/PyLintExecDialog.py" line="139"/> + <source>The process %1 could not be started. Ensure, that it is in the search path.</source> + <translation>Не могу запустить процесс '%1'. Убедитесь, что он находится в пути поиска.</translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintExecDialog.py" line="87"/> + <source>Results</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="PyLint/Ui_PyLintExecDialog.py" line="95"/> + <source>Errors</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="PyLint/PyLintExecDialog.py" line="47"/> + <source>Refresh</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="PyLint/PyLintExecDialog.py" line="48"/> + <source>Press to refresh the result display</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>PyLintPlugin</name> + <message> + <location filename="PluginPyLint.py" line="274"/> + <source>Run PyLint</source> + <translation>Запустить PyLint</translation> + </message> + <message> + <location filename="PluginPyLint.py" line="274"/> + <source>Run &PyLint...</source> + <translation>Запустить &PyLint...</translation> + </message> + <message> + <location filename="PluginPyLint.py" line="140"/> + <source>Check project, packages or modules with pylint.</source> + <translation>Проверить проект, пакеты или модули с помощью pylint.</translation> + </message> + <message> + <location filename="PluginPyLint.py" line="277"/> + <source><b>Run PyLint...</b><p>This checks the project, packages or modules using pylint.</p></source> + <translation><b>Запустить PyLint...</b><p>Проверить проект, пакеты или модули с помощью pylint.</p></translation> + </message> + <message> + <location filename="PluginPyLint.py" line="287"/> + <source>Show PyLint Dialog</source> + <translation>Показать диалог PyLint</translation> + </message> + <message> + <location filename="PluginPyLint.py" line="287"/> + <source>Show Py&Lint Dialog...</source> + <translation>Показать диалог Py&Lint...</translation> + </message> + <message> + <location filename="PluginPyLint.py" line="153"/> + <source>Show the PyLint dialog with the results of the last run.</source> + <translation>Показать диалог PyLint с результатами последнего запуска.</translation> + </message> + <message> + <location filename="PluginPyLint.py" line="290"/> + <source><b>Show PyLint Dialog...</b><p>This shows the PyLint dialog with the results of the last run.</p></source> + <translation><b>Показать диалог PyLint...</b><p>Показать диалог PyLint с результатами последнего запуска.</p></translation> + </message> + <message> + <location filename="PluginPyLint.py" line="59"/> + <source>Checkers - Pylint</source> + <translation>Контролирующие программы — Pylint</translation> + </message> + <message> + <location filename="PluginPyLint.py" line="126"/> + <source>PyLint version < 0.12.0.</source> + <translation>Версия PyLint меньше 0.12.0.</translation> + </message> + <message> + <location filename="PluginPyLint.py" line="129"/> + <source>Cannot determine Pylint version.</source> + <translation>Невозможно определить версию Pylint.</translation> + </message> + <message> + <location filename="PluginPyLint.py" line="132"/> + <source>PyLint executable '%1' not found.</source> + <translation>Исполняемый файл PyLint '%1' не найден.</translation> + </message> + <message> + <location filename="PluginPyLint.py" line="168"/> + <source><b>Run PyLint...</b><p>This checks the loaded module using pylint.</p></source> + <translation type="unfinished"></translation> + </message> +</context> +</TS>