23 # Start-Of-Header |
22 # Start-Of-Header |
24 name = "Syntax Checker Plugin" |
23 name = "Syntax Checker Plugin" |
25 author = "Detlev Offenbach <detlev@die-offenbachs.de>" |
24 author = "Detlev Offenbach <detlev@die-offenbachs.de>" |
26 autoactivate = True |
25 autoactivate = True |
27 deactivateable = True |
26 deactivateable = True |
28 version = "5.4.0" |
27 version = "5.5.0" |
29 className = "SyntaxCheckerPlugin" |
28 className = "SyntaxCheckerPlugin" |
30 packageName = "__core__" |
29 packageName = "__core__" |
31 shortDescription = "Show the Syntax Checker dialog." |
30 shortDescription = "Show the Syntax Checker dialog." |
32 longDescription = """This plugin implements the Syntax Checker dialog.""" \ |
31 longDescription = """This plugin implements the Syntax Checker dialog.""" \ |
33 """ Syntax Checker is used to check Python source files for correct""" \ |
32 """ Syntax Checker is used to check Python source files for correct""" \ |
117 @param problems dictionary with the keys 'error' and 'warnings' which |
116 @param problems dictionary with the keys 'error' and 'warnings' which |
118 hold a list containing details about the error/ warnings |
117 hold a list containing details about the error/ warnings |
119 (file name, line number, column, codestring (only at syntax |
118 (file name, line number, column, codestring (only at syntax |
120 errors), the message, a list with arguments for the message) |
119 errors), the message, a list with arguments for the message) |
121 """ |
120 """ |
|
121 from CheckerPlugins.SyntaxChecker.pyflakes.translations import \ |
|
122 getTranslatedFlakesMessage |
122 warnings = problems.get('warnings', []) |
123 warnings = problems.get('warnings', []) |
123 for warning in warnings: |
124 for warning in warnings: |
124 # Translate messages |
125 # Translate messages |
125 msg_args = warning.pop() |
126 msg_args = warning.pop() |
126 translated = QApplication.translate( |
127 warning[4] = getTranslatedFlakesMessage(warning[4], msg_args) |
127 'py3Flakes', warning[4]).format(*msg_args) |
|
128 # Avoid leading "u" at Python2 unicode strings |
|
129 if translated.startswith("u'"): |
|
130 translated = translated[1:] |
|
131 warning[4] = translated.replace(" u'", " '") |
|
132 |
128 |
133 problems['warnings'] = warnings |
129 problems['warnings'] = warnings |
134 self.syntaxCheckService.syntaxChecked.emit(fn, problems) |
130 self.syntaxCheckService.syntaxChecked.emit(fn, problems) |
135 |
131 |
136 def activate(self): |
132 def activate(self): |
140 @return tuple of None and activation status (boolean) |
136 @return tuple of None and activation status (boolean) |
141 """ |
137 """ |
142 menu = e5App().getObject("Project").getMenu("Checks") |
138 menu = e5App().getObject("Project").getMenu("Checks") |
143 if menu: |
139 if menu: |
144 self.__projectAct = E5Action( |
140 self.__projectAct = E5Action( |
145 self.trUtf8('Check Syntax'), |
141 self.tr('Check Syntax'), |
146 self.trUtf8('&Syntax...'), 0, 0, |
142 self.tr('&Syntax...'), 0, 0, |
147 self, 'project_check_syntax') |
143 self, 'project_check_syntax') |
148 self.__projectAct.setStatusTip( |
144 self.__projectAct.setStatusTip( |
149 self.trUtf8('Check syntax.')) |
145 self.tr('Check syntax.')) |
150 self.__projectAct.setWhatsThis(self.trUtf8( |
146 self.__projectAct.setWhatsThis(self.tr( |
151 """<b>Check Syntax...</b>""" |
147 """<b>Check Syntax...</b>""" |
152 """<p>This checks Python files for syntax errors.</p>""" |
148 """<p>This checks Python files for syntax errors.</p>""" |
153 )) |
149 )) |
154 self.__projectAct.triggered[()].connect(self.__projectSyntaxCheck) |
150 self.__projectAct.triggered.connect(self.__projectSyntaxCheck) |
155 e5App().getObject("Project").addE5Actions([self.__projectAct]) |
151 e5App().getObject("Project").addE5Actions([self.__projectAct]) |
156 menu.addAction(self.__projectAct) |
152 menu.addAction(self.__projectAct) |
157 |
153 |
158 self.__editorAct = E5Action( |
154 self.__editorAct = E5Action( |
159 self.trUtf8('Check Syntax'), |
155 self.tr('Check Syntax'), |
160 self.trUtf8('&Syntax...'), 0, 0, |
156 self.tr('&Syntax...'), 0, 0, |
161 self, "") |
157 self, "") |
162 self.__editorAct.setWhatsThis(self.trUtf8( |
158 self.__editorAct.setWhatsThis(self.tr( |
163 """<b>Check Syntax...</b>""" |
159 """<b>Check Syntax...</b>""" |
164 """<p>This checks Python files for syntax errors.</p>""" |
160 """<p>This checks Python files for syntax errors.</p>""" |
165 )) |
161 )) |
166 self.__editorAct.triggered[()].connect(self.__editorSyntaxCheck) |
162 self.__editorAct.triggered.connect(self.__editorSyntaxCheck) |
167 |
163 |
168 e5App().getObject("Project").showMenu.connect(self.__projectShowMenu) |
164 e5App().getObject("Project").showMenu.connect(self.__projectShowMenu) |
169 e5App().getObject("ProjectBrowser").getProjectBrowser("sources")\ |
165 e5App().getObject("ProjectBrowser").getProjectBrowser("sources")\ |
170 .showMenu.connect(self.__projectBrowserShowMenu) |
166 .showMenu.connect(self.__projectBrowserShowMenu) |
171 e5App().getObject("ViewManager").editorOpenedEd.connect( |
167 e5App().getObject("ViewManager").editorOpenedEd.connect( |
233 e5App().getObject("Project").getProjectLanguage() in \ |
229 e5App().getObject("Project").getProjectLanguage() in \ |
234 self.syntaxCheckService.getLanguages(): |
230 self.syntaxCheckService.getLanguages(): |
235 self.__projectBrowserMenu = menu |
231 self.__projectBrowserMenu = menu |
236 if self.__projectBrowserAct is None: |
232 if self.__projectBrowserAct is None: |
237 self.__projectBrowserAct = E5Action( |
233 self.__projectBrowserAct = E5Action( |
238 self.trUtf8('Check Syntax'), |
234 self.tr('Check Syntax'), |
239 self.trUtf8('&Syntax...'), 0, 0, |
235 self.tr('&Syntax...'), 0, 0, |
240 self, "") |
236 self, "") |
241 self.__projectBrowserAct.setWhatsThis(self.trUtf8( |
237 self.__projectBrowserAct.setWhatsThis(self.tr( |
242 """<b>Check Syntax...</b>""" |
238 """<b>Check Syntax...</b>""" |
243 """<p>This checks Python files for syntax errors.</p>""" |
239 """<p>This checks Python files for syntax errors.</p>""" |
244 )) |
240 )) |
245 self.__projectBrowserAct.triggered[()].connect( |
241 self.__projectBrowserAct.triggered.connect( |
246 self.__projectBrowserSyntaxCheck) |
242 self.__projectBrowserSyntaxCheck) |
247 if not self.__projectBrowserAct in menu.actions(): |
243 if not self.__projectBrowserAct in menu.actions(): |
248 menu.addAction(self.__projectBrowserAct) |
244 menu.addAction(self.__projectBrowserAct) |
249 |
245 |
250 def __projectSyntaxCheck(self): |
246 def __projectSyntaxCheck(self): |
327 Private slot to handle the syntax check context menu action of the |
323 Private slot to handle the syntax check context menu action of the |
328 editors. |
324 editors. |
329 """ |
325 """ |
330 editor = e5App().getObject("ViewManager").activeWindow() |
326 editor = e5App().getObject("ViewManager").activeWindow() |
331 if editor is not None: |
327 if editor is not None: |
332 from CheckerPlugins.SyntaxChecker.SyntaxCheckerDialog import \ |
328 from CheckerPlugins.SyntaxChecker.SyntaxCheckerDialog import \ |
333 SyntaxCheckerDialog |
329 SyntaxCheckerDialog |
334 self.__editorSyntaxCheckerDialog = SyntaxCheckerDialog() |
330 self.__editorSyntaxCheckerDialog = SyntaxCheckerDialog() |
335 self.__editorSyntaxCheckerDialog.show() |
331 self.__editorSyntaxCheckerDialog.show() |
336 self.__editorSyntaxCheckerDialog.start( |
332 if editor.isJavascriptFile(): |
337 editor.getFileName() or "Unnamed.py", editor.text()) |
333 unnamed = "Unnamed.js" |
|
334 else: |
|
335 unnamed = "Unnamed.py" |
|
336 self.__editorSyntaxCheckerDialog.start( |
|
337 editor.getFileName() or unnamed, editor.text()) |