src/eric7/Plugins/CheckerPlugins/SyntaxChecker/pyCheckSyntax.py

Sun, 07 Apr 2024 19:23:30 +0200

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Sun, 07 Apr 2024 19:23:30 +0200
branch
eric7
changeset 10670
bfa05f79d932
parent 10439
21c28b0f9e41
child 10690
fab36645aa7d
permissions
-rw-r--r--

Corrected the Python syntax check to handle indentation and tab errors (subclasses of SyntaxError) (see issue 555).

2571
e6bb19eb87ea Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
1 # -*- coding: utf-8 -*-
e6bb19eb87ea Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
2
10439
21c28b0f9e41 Updated copyright for 2024.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10341
diff changeset
3 # Copyright (c) 2011 - 2024 Detlev Offenbach <detlev@die-offenbachs.de>
2571
e6bb19eb87ea Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
4 #
e6bb19eb87ea Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
5
e6bb19eb87ea Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
6 """
7639
422fd05e9c91 Removed some more Python2 related code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7637
diff changeset
7 Module implementing the syntax check for Python 3.
2571
e6bb19eb87ea Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
8 """
4543
2e6a880670e9 Fixed a few code style issues (forgotten future imports, copyrights,...).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4385
diff changeset
9
9473
3f23dbf37dbe Resorted the import statements using isort.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9462
diff changeset
10 import ast
9482
a2bc06a54d9d Corrected/acknowledged some bad import style and removed some obsolete code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9473
diff changeset
11 import builtins
9473
3f23dbf37dbe Resorted the import statements using isort.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9462
diff changeset
12 import contextlib
3f23dbf37dbe Resorted the import statements using isort.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9462
diff changeset
13 import multiprocessing
7637
c878e8255972 Removed some more Python2 related code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7635
diff changeset
14 import queue
2571
e6bb19eb87ea Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
15 import re
e6bb19eb87ea Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
16 import traceback
10162
e7040c88b39e Made some modification in preparation for Python 3.12.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10111
diff changeset
17 import warnings
2571
e6bb19eb87ea Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
18
8243
cc717c2ae956 Applied some more code simplifications suggested by the new Simplify checker (Y105: use contextlib.suppress) (batch 2).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8234
diff changeset
19 with contextlib.suppress(ImportError):
3173
1fb284abe46e Interface to add user-defined services, e.g. in plugins. Auto syntax check working. Little cleanup.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3159
diff changeset
20 from pyflakes.checker import Checker
9473
3f23dbf37dbe Resorted the import statements using isort.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9462
diff changeset
21 from pyflakes.messages import ImportStarUsage, ImportStarUsed
3173
1fb284abe46e Interface to add user-defined services, e.g. in plugins. Auto syntax check working. Little cleanup.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3159
diff changeset
22
6107
78dabf542c6b Extended the check for VCS conflict markers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6048
diff changeset
23 VcsConflictMarkerRegExpList = (
78dabf542c6b Extended the check for VCS conflict markers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6048
diff changeset
24 re.compile(
6109
041715a2f703 Another fix for the VCS conflict markers regexp.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6108
diff changeset
25 r"""^<<<<<<< .*?\|\|\|\|\|\|\| .*?=======.*?>>>>>>> .*?$""",
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
26 re.MULTILINE | re.DOTALL,
6107
78dabf542c6b Extended the check for VCS conflict markers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6048
diff changeset
27 ),
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
28 re.compile(r"""^<<<<<<< .*?=======.*?>>>>>>> .*?$""", re.MULTILINE | re.DOTALL),
6107
78dabf542c6b Extended the check for VCS conflict markers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6048
diff changeset
29 )
3173
1fb284abe46e Interface to add user-defined services, e.g. in plugins. Auto syntax check working. Little cleanup.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3159
diff changeset
30
6119
18fb5d765f3a Fixed some code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6109
diff changeset
31
3173
1fb284abe46e Interface to add user-defined services, e.g. in plugins. Auto syntax check working. Little cleanup.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3159
diff changeset
32 def initService():
1fb284abe46e Interface to add user-defined services, e.g. in plugins. Auto syntax check working. Little cleanup.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3159
diff changeset
33 """
1fb284abe46e Interface to add user-defined services, e.g. in plugins. Auto syntax check working. Little cleanup.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3159
diff changeset
34 Initialize the service and return the entry point.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
35
9508
5a02bdb1dcba Harmonized the naming of some code in the syntax checker plugin.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9507
diff changeset
36 @return the entry point for the background client
5a02bdb1dcba Harmonized the naming of some code in the syntax checker plugin.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9507
diff changeset
37 @rtype function
3173
1fb284abe46e Interface to add user-defined services, e.g. in plugins. Auto syntax check working. Little cleanup.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3159
diff changeset
38 """
9508
5a02bdb1dcba Harmonized the naming of some code in the syntax checker plugin.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9507
diff changeset
39 return pySyntaxAndPyflakesCheck
2571
e6bb19eb87ea Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
40
e6bb19eb87ea Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
41
4231
0b38613388c9 Implemented the batch check mode for the syntax checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4207
diff changeset
42 def initBatchService():
0b38613388c9 Implemented the batch check mode for the syntax checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4207
diff changeset
43 """
0b38613388c9 Implemented the batch check mode for the syntax checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4207
diff changeset
44 Initialize the batch service and return the entry point.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
45
9508
5a02bdb1dcba Harmonized the naming of some code in the syntax checker plugin.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9507
diff changeset
46 @return the entry point for the background client
5a02bdb1dcba Harmonized the naming of some code in the syntax checker plugin.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9507
diff changeset
47 @rtype function
4231
0b38613388c9 Implemented the batch check mode for the syntax checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4207
diff changeset
48 """
9508
5a02bdb1dcba Harmonized the naming of some code in the syntax checker plugin.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9507
diff changeset
49 return pySyntaxAndPyflakesBatchCheck
4231
0b38613388c9 Implemented the batch check mode for the syntax checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4207
diff changeset
50
0b38613388c9 Implemented the batch check mode for the syntax checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4207
diff changeset
51
5586
0e5421d679e7 Added capability to place line flags (e.g. __IGNORE...) on the line following the one to be ignored.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
52 def extractLineFlags(line, startComment="#", endComment="", flagsLine=False):
2571
e6bb19eb87ea Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
53 """
3065
070b35dde35e Fixed a bunch of indentation issues.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 2571
diff changeset
54 Function to extract flags starting and ending with '__' from a line
070b35dde35e Fixed a bunch of indentation issues.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 2571
diff changeset
55 comment.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
56
9508
5a02bdb1dcba Harmonized the naming of some code in the syntax checker plugin.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9507
diff changeset
57 @param line line to extract flags from
5a02bdb1dcba Harmonized the naming of some code in the syntax checker plugin.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9507
diff changeset
58 @type str
5a02bdb1dcba Harmonized the naming of some code in the syntax checker plugin.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9507
diff changeset
59 @param startComment string identifying the start of the comment
5a02bdb1dcba Harmonized the naming of some code in the syntax checker plugin.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9507
diff changeset
60 @type str
5a02bdb1dcba Harmonized the naming of some code in the syntax checker plugin.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9507
diff changeset
61 @param endComment string identifying the end of a comment
5a02bdb1dcba Harmonized the naming of some code in the syntax checker plugin.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9507
diff changeset
62 @type str
5a02bdb1dcba Harmonized the naming of some code in the syntax checker plugin.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9507
diff changeset
63 @param flagsLine flag indicating to check for a flags only line
5a02bdb1dcba Harmonized the naming of some code in the syntax checker plugin.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9507
diff changeset
64 @type bool
5a02bdb1dcba Harmonized the naming of some code in the syntax checker plugin.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9507
diff changeset
65 @return list containing the extracted flags
5a02bdb1dcba Harmonized the naming of some code in the syntax checker plugin.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9507
diff changeset
66 @rtype list of str
2571
e6bb19eb87ea Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
67 """
e6bb19eb87ea Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
68 flags = []
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
69
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
70 if not flagsLine or (flagsLine and line.strip().startswith(startComment)):
5586
0e5421d679e7 Added capability to place line flags (e.g. __IGNORE...) on the line following the one to be ignored.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
71 pos = line.rfind(startComment)
0e5421d679e7 Added capability to place line flags (e.g. __IGNORE...) on the line following the one to be ignored.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
72 if pos >= 0:
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
73 comment = line[pos + len(startComment) :].strip()
5586
0e5421d679e7 Added capability to place line flags (e.g. __IGNORE...) on the line following the one to be ignored.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
74 if endComment:
0e5421d679e7 Added capability to place line flags (e.g. __IGNORE...) on the line following the one to be ignored.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
75 endPos = line.rfind(endComment)
0e5421d679e7 Added capability to place line flags (e.g. __IGNORE...) on the line following the one to be ignored.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
76 if endPos >= 0:
0e5421d679e7 Added capability to place line flags (e.g. __IGNORE...) on the line following the one to be ignored.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
77 comment = comment[:endPos]
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
78 flags = [
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
79 f.strip()
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
80 for f in comment.split()
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
81 if (f.startswith("__") and f.endswith("__"))
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
82 ]
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
83 flags += [
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
84 f.strip().lower() for f in comment.split() if f in ("noqa", "NOQA")
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
85 ]
2571
e6bb19eb87ea Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
86 return flags
e6bb19eb87ea Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
87
e6bb19eb87ea Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
88
9508
5a02bdb1dcba Harmonized the naming of some code in the syntax checker plugin.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9507
diff changeset
89 def pySyntaxAndPyflakesCheck(
9924
b41c9a7bcbbb Syntax Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
90 filename,
b41c9a7bcbbb Syntax Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
91 codestring,
b41c9a7bcbbb Syntax Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
92 checkFlakes=True,
b41c9a7bcbbb Syntax Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
93 ignoreStarImportWarnings=False,
b41c9a7bcbbb Syntax Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
94 additionalBuiltins=None,
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
95 ):
2571
e6bb19eb87ea Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
96 """
e6bb19eb87ea Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
97 Function to compile one Python source file to Python bytecode
e6bb19eb87ea Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
98 and to perform a pyflakes check.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
99
9508
5a02bdb1dcba Harmonized the naming of some code in the syntax checker plugin.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9507
diff changeset
100 @param filename source filename
5a02bdb1dcba Harmonized the naming of some code in the syntax checker plugin.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9507
diff changeset
101 @type str
5a02bdb1dcba Harmonized the naming of some code in the syntax checker plugin.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9507
diff changeset
102 @param codestring string containing the code to compile
5a02bdb1dcba Harmonized the naming of some code in the syntax checker plugin.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9507
diff changeset
103 @type str
5a02bdb1dcba Harmonized the naming of some code in the syntax checker plugin.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9507
diff changeset
104 @param checkFlakes flag indicating to do a pyflakes check
5a02bdb1dcba Harmonized the naming of some code in the syntax checker plugin.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9507
diff changeset
105 @type bool
5a02bdb1dcba Harmonized the naming of some code in the syntax checker plugin.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9507
diff changeset
106 @param ignoreStarImportWarnings flag indicating to ignore 'star import' warnings
5a02bdb1dcba Harmonized the naming of some code in the syntax checker plugin.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9507
diff changeset
107 @type bool
9924
b41c9a7bcbbb Syntax Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
108 @param additionalBuiltins list of names pyflakes should consider as builtins
b41c9a7bcbbb Syntax Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
109 @type list of str
10341
3fdffd9cc21d Syntax Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10188
diff changeset
110 @return list of dictionaries with the keys 'error', 'py_warnings' and 'warnings'
3fdffd9cc21d Syntax Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10188
diff changeset
111 which contain a tuple with details about the syntax error or a list of
3fdffd9cc21d Syntax Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10188
diff changeset
112 tuples with details about Python warnings and PyFlakes warnings. Each tuple
3fdffd9cc21d Syntax Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10188
diff changeset
113 contains the file name, line number, column, code string (only for syntax
3fdffd9cc21d Syntax Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10188
diff changeset
114 errors), the message and an optional list with arguments for the message.
3fdffd9cc21d Syntax Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10188
diff changeset
115 @rtype list of dict
2571
e6bb19eb87ea Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
116 """
9508
5a02bdb1dcba Harmonized the naming of some code in the syntax checker plugin.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9507
diff changeset
117 return __pySyntaxAndPyflakesCheck(
9924
b41c9a7bcbbb Syntax Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
118 filename, codestring, checkFlakes, ignoreStarImportWarnings, additionalBuiltins
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
119 )
4231
0b38613388c9 Implemented the batch check mode for the syntax checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4207
diff changeset
120
0b38613388c9 Implemented the batch check mode for the syntax checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4207
diff changeset
121
9508
5a02bdb1dcba Harmonized the naming of some code in the syntax checker plugin.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9507
diff changeset
122 def pySyntaxAndPyflakesBatchCheck(argumentsList, send, fx, cancelled, maxProcesses=0):
4231
0b38613388c9 Implemented the batch check mode for the syntax checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4207
diff changeset
123 """
0b38613388c9 Implemented the batch check mode for the syntax checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4207
diff changeset
124 Module function to check syntax for a batch of files.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
125
9508
5a02bdb1dcba Harmonized the naming of some code in the syntax checker plugin.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9507
diff changeset
126 @param argumentsList list of arguments tuples as given for pySyntaxAndPyflakesCheck
5762
76ef5f340007 Added functionality to limit the number of processes used for bachground services.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5683
diff changeset
127 @type list
76ef5f340007 Added functionality to limit the number of processes used for bachground services.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5683
diff changeset
128 @param send reference to send function
10341
3fdffd9cc21d Syntax Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10188
diff changeset
129 @type function
5762
76ef5f340007 Added functionality to limit the number of processes used for bachground services.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5683
diff changeset
130 @param fx registered service name
76ef5f340007 Added functionality to limit the number of processes used for bachground services.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5683
diff changeset
131 @type str
4231
0b38613388c9 Implemented the batch check mode for the syntax checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4207
diff changeset
132 @param cancelled reference to function checking for a cancellation
10341
3fdffd9cc21d Syntax Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10188
diff changeset
133 @type function
5762
76ef5f340007 Added functionality to limit the number of processes used for bachground services.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5683
diff changeset
134 @param maxProcesses number of processes to be used
76ef5f340007 Added functionality to limit the number of processes used for bachground services.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5683
diff changeset
135 @type int
4231
0b38613388c9 Implemented the batch check mode for the syntax checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4207
diff changeset
136 """
5762
76ef5f340007 Added functionality to limit the number of processes used for bachground services.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5683
diff changeset
137 if maxProcesses == 0:
76ef5f340007 Added functionality to limit the number of processes used for bachground services.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5683
diff changeset
138 # determine based on CPU count
76ef5f340007 Added functionality to limit the number of processes used for bachground services.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5683
diff changeset
139 try:
76ef5f340007 Added functionality to limit the number of processes used for bachground services.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5683
diff changeset
140 NumberOfProcesses = multiprocessing.cpu_count()
76ef5f340007 Added functionality to limit the number of processes used for bachground services.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5683
diff changeset
141 if NumberOfProcesses >= 1:
76ef5f340007 Added functionality to limit the number of processes used for bachground services.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5683
diff changeset
142 NumberOfProcesses -= 1
76ef5f340007 Added functionality to limit the number of processes used for bachground services.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5683
diff changeset
143 except NotImplementedError:
76ef5f340007 Added functionality to limit the number of processes used for bachground services.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5683
diff changeset
144 NumberOfProcesses = 1
76ef5f340007 Added functionality to limit the number of processes used for bachground services.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5683
diff changeset
145 else:
76ef5f340007 Added functionality to limit the number of processes used for bachground services.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5683
diff changeset
146 NumberOfProcesses = maxProcesses
4231
0b38613388c9 Implemented the batch check mode for the syntax checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4207
diff changeset
147
0b38613388c9 Implemented the batch check mode for the syntax checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4207
diff changeset
148 # Create queues
0b38613388c9 Implemented the batch check mode for the syntax checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4207
diff changeset
149 taskQueue = multiprocessing.Queue()
0b38613388c9 Implemented the batch check mode for the syntax checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4207
diff changeset
150 doneQueue = multiprocessing.Queue()
0b38613388c9 Implemented the batch check mode for the syntax checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4207
diff changeset
151
9289
ba49c41e8f63 Did some optimizations in the multiprocessing code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9284
diff changeset
152 # Submit tasks (initially two times the number of processes)
ba49c41e8f63 Did some optimizations in the multiprocessing code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9284
diff changeset
153 tasks = len(argumentsList)
9292
a5c8a0213fe3 Fixed an issue in the multiprocessing usage causing a traceback when then number of tasks is smaller than the number of worker processes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9289
diff changeset
154 initialTasks = min(2 * NumberOfProcesses, tasks)
9289
ba49c41e8f63 Did some optimizations in the multiprocessing code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9284
diff changeset
155 for _ in range(initialTasks):
ba49c41e8f63 Did some optimizations in the multiprocessing code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9284
diff changeset
156 taskQueue.put(argumentsList.pop(0))
4231
0b38613388c9 Implemented the batch check mode for the syntax checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4207
diff changeset
157
0b38613388c9 Implemented the batch check mode for the syntax checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4207
diff changeset
158 # Start worker processes
8650
100726f55a9a Changed the 'multiprocessing.Process()' code of the background batch services to (hopefully) cure the slow down when used multiple times.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8312
diff changeset
159 workers = [
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
160 multiprocessing.Process(target=workerTask, args=(taskQueue, doneQueue))
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
161 for _ in range(NumberOfProcesses)
8650
100726f55a9a Changed the 'multiprocessing.Process()' code of the background batch services to (hopefully) cure the slow down when used multiple times.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8312
diff changeset
162 ]
100726f55a9a Changed the 'multiprocessing.Process()' code of the background batch services to (hopefully) cure the slow down when used multiple times.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8312
diff changeset
163 for worker in workers:
100726f55a9a Changed the 'multiprocessing.Process()' code of the background batch services to (hopefully) cure the slow down when used multiple times.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8312
diff changeset
164 worker.start()
4231
0b38613388c9 Implemented the batch check mode for the syntax checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4207
diff changeset
165
0b38613388c9 Implemented the batch check mode for the syntax checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4207
diff changeset
166 # Get and send results
9289
ba49c41e8f63 Did some optimizations in the multiprocessing code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9284
diff changeset
167 for _ in range(tasks):
5672
495b53f37f6c Corrected an issue in various checker services that caused them to block, if an exception was thrown in a checker class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5616
diff changeset
168 resultSent = False
495b53f37f6c Corrected an issue in various checker services that caused them to block, if an exception was thrown in a checker class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5616
diff changeset
169 wasCancelled = False
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
170
5672
495b53f37f6c Corrected an issue in various checker services that caused them to block, if an exception was thrown in a checker class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5616
diff changeset
171 while not resultSent:
495b53f37f6c Corrected an issue in various checker services that caused them to block, if an exception was thrown in a checker class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5616
diff changeset
172 try:
495b53f37f6c Corrected an issue in various checker services that caused them to block, if an exception was thrown in a checker class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5616
diff changeset
173 # get result (waiting max. 3 seconds and send it to frontend
495b53f37f6c Corrected an issue in various checker services that caused them to block, if an exception was thrown in a checker class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5616
diff changeset
174 filename, result = doneQueue.get()
495b53f37f6c Corrected an issue in various checker services that caused them to block, if an exception was thrown in a checker class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5616
diff changeset
175 send(fx, filename, result)
495b53f37f6c Corrected an issue in various checker services that caused them to block, if an exception was thrown in a checker class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5616
diff changeset
176 resultSent = True
495b53f37f6c Corrected an issue in various checker services that caused them to block, if an exception was thrown in a checker class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5616
diff changeset
177 except queue.Empty:
495b53f37f6c Corrected an issue in various checker services that caused them to block, if an exception was thrown in a checker class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5616
diff changeset
178 # ignore empty queue, just carry on
495b53f37f6c Corrected an issue in various checker services that caused them to block, if an exception was thrown in a checker class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5616
diff changeset
179 if cancelled():
495b53f37f6c Corrected an issue in various checker services that caused them to block, if an exception was thrown in a checker class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5616
diff changeset
180 wasCancelled = True
495b53f37f6c Corrected an issue in various checker services that caused them to block, if an exception was thrown in a checker class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5616
diff changeset
181 break
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
182
5672
495b53f37f6c Corrected an issue in various checker services that caused them to block, if an exception was thrown in a checker class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5616
diff changeset
183 if wasCancelled or cancelled():
4231
0b38613388c9 Implemented the batch check mode for the syntax checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4207
diff changeset
184 # just exit the loop ignoring the results of queued tasks
0b38613388c9 Implemented the batch check mode for the syntax checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4207
diff changeset
185 break
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
186
9289
ba49c41e8f63 Did some optimizations in the multiprocessing code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9284
diff changeset
187 if argumentsList:
ba49c41e8f63 Did some optimizations in the multiprocessing code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9284
diff changeset
188 taskQueue.put(argumentsList.pop(0))
4231
0b38613388c9 Implemented the batch check mode for the syntax checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4207
diff changeset
189
0b38613388c9 Implemented the batch check mode for the syntax checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4207
diff changeset
190 # Tell child processes to stop
6188
5a6ae3be31e6 Fixed some loop related coding issues detected by the extended code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6119
diff changeset
191 for _ in range(NumberOfProcesses):
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
192 taskQueue.put("STOP")
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
193
8650
100726f55a9a Changed the 'multiprocessing.Process()' code of the background batch services to (hopefully) cure the slow down when used multiple times.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8312
diff changeset
194 for worker in workers:
100726f55a9a Changed the 'multiprocessing.Process()' code of the background batch services to (hopefully) cure the slow down when used multiple times.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8312
diff changeset
195 worker.join()
100726f55a9a Changed the 'multiprocessing.Process()' code of the background batch services to (hopefully) cure the slow down when used multiple times.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8312
diff changeset
196 worker.close()
9284
3b3a4f659782 "Blacked" the sources.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9279
diff changeset
197
9279
e252f827aaa7 Added code to explicitly close the queues to/from the workers at the end of a batch check.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
198 taskQueue.close()
e252f827aaa7 Added code to explicitly close the queues to/from the workers at the end of a batch check.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
199 doneQueue.close()
4231
0b38613388c9 Implemented the batch check mode for the syntax checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4207
diff changeset
200
0b38613388c9 Implemented the batch check mode for the syntax checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4207
diff changeset
201
8650
100726f55a9a Changed the 'multiprocessing.Process()' code of the background batch services to (hopefully) cure the slow down when used multiple times.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8312
diff changeset
202 def workerTask(inputQueue, outputQueue):
4231
0b38613388c9 Implemented the batch check mode for the syntax checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4207
diff changeset
203 """
7335
07ed3d73bf58 Syntax Checker:
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7256
diff changeset
204 Module function acting as the parallel worker for the syntax check.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
205
9508
5a02bdb1dcba Harmonized the naming of some code in the syntax checker plugin.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9507
diff changeset
206 @param inputQueue input queue
5a02bdb1dcba Harmonized the naming of some code in the syntax checker plugin.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9507
diff changeset
207 @type multiprocessing.Queue
5a02bdb1dcba Harmonized the naming of some code in the syntax checker plugin.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9507
diff changeset
208 @param outputQueue output queue
5a02bdb1dcba Harmonized the naming of some code in the syntax checker plugin.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9507
diff changeset
209 @type multiprocessing.Queue
4231
0b38613388c9 Implemented the batch check mode for the syntax checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4207
diff changeset
210 """
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
211 for filename, args in iter(inputQueue.get, "STOP"):
9924
b41c9a7bcbbb Syntax Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
212 source, checkFlakes, ignoreStarImportWarnings, additionalBuiltins = args
9508
5a02bdb1dcba Harmonized the naming of some code in the syntax checker plugin.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9507
diff changeset
213 result = __pySyntaxAndPyflakesCheck(
9924
b41c9a7bcbbb Syntax Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
214 filename, source, checkFlakes, ignoreStarImportWarnings, additionalBuiltins
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
215 )
5588
6ba512d9f46a Continued fixing code style issues detected by the extended style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5586
diff changeset
216 outputQueue.put((filename, result))
4231
0b38613388c9 Implemented the batch check mode for the syntax checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4207
diff changeset
217
0b38613388c9 Implemented the batch check mode for the syntax checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4207
diff changeset
218
9508
5a02bdb1dcba Harmonized the naming of some code in the syntax checker plugin.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9507
diff changeset
219 def __pySyntaxAndPyflakesCheck(
9924
b41c9a7bcbbb Syntax Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
220 filename,
b41c9a7bcbbb Syntax Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
221 codestring,
b41c9a7bcbbb Syntax Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
222 checkFlakes=True,
b41c9a7bcbbb Syntax Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
223 ignoreStarImportWarnings=False,
b41c9a7bcbbb Syntax Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
224 additionalBuiltins=None,
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
225 ):
4231
0b38613388c9 Implemented the batch check mode for the syntax checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4207
diff changeset
226 """
0b38613388c9 Implemented the batch check mode for the syntax checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4207
diff changeset
227 Function to compile one Python source file to Python bytecode
0b38613388c9 Implemented the batch check mode for the syntax checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4207
diff changeset
228 and to perform a pyflakes check.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
229
8205
4a0f1f896341 Applied some code simplifications suggested by the new Simplify checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7923
diff changeset
230 @param filename source filename
4a0f1f896341 Applied some code simplifications suggested by the new Simplify checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7923
diff changeset
231 @type str
4a0f1f896341 Applied some code simplifications suggested by the new Simplify checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7923
diff changeset
232 @param codestring string containing the code to compile
4a0f1f896341 Applied some code simplifications suggested by the new Simplify checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7923
diff changeset
233 @type str
4a0f1f896341 Applied some code simplifications suggested by the new Simplify checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7923
diff changeset
234 @param checkFlakes flag indicating to do a pyflakes check
4a0f1f896341 Applied some code simplifications suggested by the new Simplify checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7923
diff changeset
235 @type bool
7900
72b88fb20261 Corrected the use of '@keyparam' in the source documentation.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7639
diff changeset
236 @param ignoreStarImportWarnings flag indicating to
8205
4a0f1f896341 Applied some code simplifications suggested by the new Simplify checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7923
diff changeset
237 ignore 'star import' warnings
4a0f1f896341 Applied some code simplifications suggested by the new Simplify checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7923
diff changeset
238 @type bool
9924
b41c9a7bcbbb Syntax Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
239 @param additionalBuiltins list of names pyflakes should consider as builtins
b41c9a7bcbbb Syntax Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
240 @type list of str
10341
3fdffd9cc21d Syntax Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10188
diff changeset
241 @return list of dictionaries with the keys 'error', 'py_warnings' and 'warnings'
3fdffd9cc21d Syntax Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10188
diff changeset
242 which contain a tuple with details about the syntax error or a list of
3fdffd9cc21d Syntax Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10188
diff changeset
243 tuples with details about Python warnings and PyFlakes warnings. Each tuple
3fdffd9cc21d Syntax Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10188
diff changeset
244 contains the file name, line number, column, code string (only for syntax
3fdffd9cc21d Syntax Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10188
diff changeset
245 errors), the message and an optional list with arguments for the message.
3fdffd9cc21d Syntax Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10188
diff changeset
246 @rtype list of dict
4231
0b38613388c9 Implemented the batch check mode for the syntax checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4207
diff changeset
247 """
10111
049fbbd2253d Syntax Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9924
diff changeset
248 if codestring:
10162
e7040c88b39e Made some modification in preparation for Python 3.12.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10111
diff changeset
249 errorDict = {}
10188
0f873791d67e Syntax Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10162
diff changeset
250 pyWarnings = []
0f873791d67e Syntax Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10162
diff changeset
251
0f873791d67e Syntax Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10162
diff changeset
252 def showwarning(
0f873791d67e Syntax Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10162
diff changeset
253 message,
0f873791d67e Syntax Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10162
diff changeset
254 category,
0f873791d67e Syntax Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10162
diff changeset
255 filename,
0f873791d67e Syntax Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10162
diff changeset
256 lineno,
0f873791d67e Syntax Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10162
diff changeset
257 file=None, # noqa: U100
0f873791d67e Syntax Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10162
diff changeset
258 line=None, # noqa: U100
0f873791d67e Syntax Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10162
diff changeset
259 ):
0f873791d67e Syntax Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10162
diff changeset
260 pyWarnings.append(
0f873791d67e Syntax Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10162
diff changeset
261 (
0f873791d67e Syntax Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10162
diff changeset
262 filename,
0f873791d67e Syntax Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10162
diff changeset
263 lineno,
0f873791d67e Syntax Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10162
diff changeset
264 0,
0f873791d67e Syntax Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10162
diff changeset
265 "",
0f873791d67e Syntax Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10162
diff changeset
266 "{0}: {1}".format(category.__name__, message),
0f873791d67e Syntax Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10162
diff changeset
267 )
0f873791d67e Syntax Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10162
diff changeset
268 )
0f873791d67e Syntax Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10162
diff changeset
269
0f873791d67e Syntax Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10162
diff changeset
270 warnings.showwarning = showwarning
0f873791d67e Syntax Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10162
diff changeset
271 warnings.filterwarnings("always")
0f873791d67e Syntax Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10162
diff changeset
272
2571
e6bb19eb87ea Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
273 try:
10111
049fbbd2253d Syntax Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9924
diff changeset
274 # Check for VCS conflict markers
049fbbd2253d Syntax Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9924
diff changeset
275 for conflictMarkerRe in VcsConflictMarkerRegExpList:
049fbbd2253d Syntax Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9924
diff changeset
276 conflict = conflictMarkerRe.search(codestring)
049fbbd2253d Syntax Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9924
diff changeset
277 if conflict is not None:
049fbbd2253d Syntax Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9924
diff changeset
278 start, i = conflict.span()
049fbbd2253d Syntax Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9924
diff changeset
279 lineindex = 1 + codestring.count("\n", 0, start)
049fbbd2253d Syntax Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9924
diff changeset
280 return [
049fbbd2253d Syntax Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9924
diff changeset
281 {
049fbbd2253d Syntax Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9924
diff changeset
282 "error": (
049fbbd2253d Syntax Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9924
diff changeset
283 filename,
049fbbd2253d Syntax Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9924
diff changeset
284 lineindex,
049fbbd2253d Syntax Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9924
diff changeset
285 0,
049fbbd2253d Syntax Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9924
diff changeset
286 "",
049fbbd2253d Syntax Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9924
diff changeset
287 "VCS conflict marker found",
049fbbd2253d Syntax Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9924
diff changeset
288 )
049fbbd2253d Syntax Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9924
diff changeset
289 }
049fbbd2253d Syntax Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9924
diff changeset
290 ]
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
291
10111
049fbbd2253d Syntax Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9924
diff changeset
292 if filename.endswith(".ptl"):
049fbbd2253d Syntax Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9924
diff changeset
293 try:
049fbbd2253d Syntax Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9924
diff changeset
294 import quixote.ptl_compile # __IGNORE_WARNING_I10__
049fbbd2253d Syntax Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9924
diff changeset
295 except ImportError:
049fbbd2253d Syntax Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9924
diff changeset
296 return [
049fbbd2253d Syntax Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9924
diff changeset
297 {"error": (filename, 0, 0, "", "Quixote plugin not found.")}
049fbbd2253d Syntax Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9924
diff changeset
298 ]
049fbbd2253d Syntax Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9924
diff changeset
299 template = quixote.ptl_compile.Template(codestring, filename)
049fbbd2253d Syntax Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9924
diff changeset
300 template.compile()
049fbbd2253d Syntax Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9924
diff changeset
301 else:
049fbbd2253d Syntax Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9924
diff changeset
302 module = builtins.compile(
049fbbd2253d Syntax Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9924
diff changeset
303 codestring, filename, "exec", ast.PyCF_ONLY_AST
049fbbd2253d Syntax Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9924
diff changeset
304 )
049fbbd2253d Syntax Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9924
diff changeset
305 except SyntaxError as detail:
049fbbd2253d Syntax Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9924
diff changeset
306 index = 0
049fbbd2253d Syntax Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9924
diff changeset
307 code = ""
049fbbd2253d Syntax Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9924
diff changeset
308 error = ""
049fbbd2253d Syntax Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9924
diff changeset
309 lines = traceback.format_exception_only(SyntaxError, detail)
049fbbd2253d Syntax Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9924
diff changeset
310 match = re.match(
049fbbd2253d Syntax Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9924
diff changeset
311 r'\s*File "(.+)", line (\d+)', lines[0].replace("<string>", filename)
049fbbd2253d Syntax Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9924
diff changeset
312 )
049fbbd2253d Syntax Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9924
diff changeset
313 if match is not None:
049fbbd2253d Syntax Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9924
diff changeset
314 fn, line = match.group(1, 2)
049fbbd2253d Syntax Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9924
diff changeset
315 if lines[1].startswith("SyntaxError:"):
049fbbd2253d Syntax Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9924
diff changeset
316 error = re.match("SyntaxError: (.+)", lines[1]).group(1)
10670
bfa05f79d932 Corrected the Python syntax check to handle indentation and tab errors (subclasses of SyntaxError) (see issue 555).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
317 elif lines[1].startswith("IndentationError:"):
bfa05f79d932 Corrected the Python syntax check to handle indentation and tab errors (subclasses of SyntaxError) (see issue 555).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
318 error = re.match("IndentationError: (.+)", lines[1]).group(1)
bfa05f79d932 Corrected the Python syntax check to handle indentation and tab errors (subclasses of SyntaxError) (see issue 555).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
319 elif lines[1].startswith("TabError:"):
bfa05f79d932 Corrected the Python syntax check to handle indentation and tab errors (subclasses of SyntaxError) (see issue 555).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
320 error = re.match("TabError: (.+)", lines[1]).group(1)
10111
049fbbd2253d Syntax Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9924
diff changeset
321 else:
049fbbd2253d Syntax Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9924
diff changeset
322 code = re.match("(.+)", lines[1]).group(1)
049fbbd2253d Syntax Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9924
diff changeset
323 for seLine in lines[2:]:
049fbbd2253d Syntax Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9924
diff changeset
324 if seLine.startswith("SyntaxError:"):
049fbbd2253d Syntax Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9924
diff changeset
325 error = re.match("SyntaxError: (.+)", seLine).group(1)
10670
bfa05f79d932 Corrected the Python syntax check to handle indentation and tab errors (subclasses of SyntaxError) (see issue 555).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
326 elif seLine.startswith("IndentationError:"):
bfa05f79d932 Corrected the Python syntax check to handle indentation and tab errors (subclasses of SyntaxError) (see issue 555).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
327 error = re.match("IndentationError: (.+)", seLine).group(1)
bfa05f79d932 Corrected the Python syntax check to handle indentation and tab errors (subclasses of SyntaxError) (see issue 555).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
328 elif seLine.startswith("TabError:"):
bfa05f79d932 Corrected the Python syntax check to handle indentation and tab errors (subclasses of SyntaxError) (see issue 555).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
329 error = re.match("TabError: (.+)", seLine).group(1)
10111
049fbbd2253d Syntax Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9924
diff changeset
330 elif seLine.rstrip().endswith("^"):
049fbbd2253d Syntax Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9924
diff changeset
331 index = len(seLine.rstrip()) - 4
049fbbd2253d Syntax Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9924
diff changeset
332 else:
049fbbd2253d Syntax Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9924
diff changeset
333 fn = detail.filename
049fbbd2253d Syntax Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9924
diff changeset
334 line = detail.lineno or 1
049fbbd2253d Syntax Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9924
diff changeset
335 error = detail.msg
10162
e7040c88b39e Made some modification in preparation for Python 3.12.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10111
diff changeset
336 errorDict = {"error": (fn, int(line), index, code.strip(), error)}
10111
049fbbd2253d Syntax Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9924
diff changeset
337 except ValueError as detail:
049fbbd2253d Syntax Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9924
diff changeset
338 try:
049fbbd2253d Syntax Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9924
diff changeset
339 fn = detail.filename
049fbbd2253d Syntax Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9924
diff changeset
340 line = detail.lineno
049fbbd2253d Syntax Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9924
diff changeset
341 error = detail.msg
049fbbd2253d Syntax Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9924
diff changeset
342 except AttributeError:
049fbbd2253d Syntax Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9924
diff changeset
343 fn = filename
049fbbd2253d Syntax Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9924
diff changeset
344 line = 1
049fbbd2253d Syntax Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9924
diff changeset
345 error = str(detail)
10162
e7040c88b39e Made some modification in preparation for Python 3.12.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10111
diff changeset
346 errorDict = {"error": (fn, line, 0, "", error)}
10111
049fbbd2253d Syntax Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9924
diff changeset
347 except Exception as detail:
049fbbd2253d Syntax Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9924
diff changeset
348 with contextlib.suppress(AttributeError):
049fbbd2253d Syntax Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9924
diff changeset
349 fn = detail.filename
049fbbd2253d Syntax Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9924
diff changeset
350 line = detail.lineno
049fbbd2253d Syntax Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9924
diff changeset
351 error = detail.msg
10162
e7040c88b39e Made some modification in preparation for Python 3.12.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10111
diff changeset
352 errorDict = {"error": (fn, line, 0, "", error)}
e7040c88b39e Made some modification in preparation for Python 3.12.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10111
diff changeset
353 finally:
e7040c88b39e Made some modification in preparation for Python 3.12.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10111
diff changeset
354 warnings.resetwarnings()
e7040c88b39e Made some modification in preparation for Python 3.12.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10111
diff changeset
355
10188
0f873791d67e Syntax Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10162
diff changeset
356 # return the syntax error, if one was detected
10162
e7040c88b39e Made some modification in preparation for Python 3.12.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10111
diff changeset
357 if errorDict:
e7040c88b39e Made some modification in preparation for Python 3.12.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10111
diff changeset
358 return [errorDict]
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
359
10111
049fbbd2253d Syntax Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9924
diff changeset
360 # pyflakes
049fbbd2253d Syntax Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9924
diff changeset
361 results = []
10188
0f873791d67e Syntax Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10162
diff changeset
362 if checkFlakes:
0f873791d67e Syntax Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10162
diff changeset
363 lines = codestring.splitlines()
0f873791d67e Syntax Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10162
diff changeset
364 try:
0f873791d67e Syntax Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10162
diff changeset
365 flakesWarnings = Checker(
0f873791d67e Syntax Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10162
diff changeset
366 module, filename, builtins=additionalBuiltins, withDoctest=True
0f873791d67e Syntax Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10162
diff changeset
367 )
0f873791d67e Syntax Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10162
diff changeset
368 flakesWarnings.messages.sort(key=lambda a: a.lineno)
0f873791d67e Syntax Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10162
diff changeset
369 for flakesWarning in flakesWarnings.messages:
0f873791d67e Syntax Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10162
diff changeset
370 if ignoreStarImportWarnings and isinstance(
0f873791d67e Syntax Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10162
diff changeset
371 flakesWarning, (ImportStarUsed, ImportStarUsage)
0f873791d67e Syntax Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10162
diff changeset
372 ):
0f873791d67e Syntax Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10162
diff changeset
373 continue
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
374
10188
0f873791d67e Syntax Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10162
diff changeset
375 _fn, lineno, col, message, msg_args = flakesWarning.getMessageData()
0f873791d67e Syntax Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10162
diff changeset
376 lineFlags = extractLineFlags(lines[lineno - 1].strip())
0f873791d67e Syntax Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10162
diff changeset
377 with contextlib.suppress(IndexError):
0f873791d67e Syntax Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10162
diff changeset
378 lineFlags += extractLineFlags(
0f873791d67e Syntax Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10162
diff changeset
379 lines[lineno].strip(), flagsLine=True
0f873791d67e Syntax Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10162
diff changeset
380 )
0f873791d67e Syntax Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10162
diff changeset
381 if (
0f873791d67e Syntax Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10162
diff changeset
382 "__IGNORE_WARNING__" not in lineFlags
0f873791d67e Syntax Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10162
diff changeset
383 and "__IGNORE_FLAKES_WARNING__" not in lineFlags
0f873791d67e Syntax Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10162
diff changeset
384 and "noqa" not in lineFlags
0f873791d67e Syntax Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10162
diff changeset
385 ):
0f873791d67e Syntax Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10162
diff changeset
386 results.append((_fn, lineno, col, "", message, msg_args))
0f873791d67e Syntax Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10162
diff changeset
387 except SyntaxError as err:
0f873791d67e Syntax Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10162
diff changeset
388 msg = err.text.strip() if err.text.strip() else err.msg
0f873791d67e Syntax Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10162
diff changeset
389 results.append((filename, err.lineno, 0, "FLAKES_ERROR", msg, []))
10111
049fbbd2253d Syntax Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9924
diff changeset
390
10188
0f873791d67e Syntax Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10162
diff changeset
391 return [{"py_warnings": pyWarnings, "warnings": results}]
10111
049fbbd2253d Syntax Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9924
diff changeset
392
049fbbd2253d Syntax Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9924
diff changeset
393 else:
049fbbd2253d Syntax Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9924
diff changeset
394 return [{}]

eric ide

mercurial