Sun, 07 Apr 2024 19:23:30 +0200
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 [{}] |