src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Annotations/AnnotationsChecker.py

Wed, 27 Jul 2022 15:52:14 +0200

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Wed, 27 Jul 2022 15:52:14 +0200
branch
eric7
changeset 9274
86fab0c74430
parent 9221
bf71ee032bb4
child 9276
e6748a5e24b9
permissions
-rw-r--r--

Added some TODO markers to update some checker code.

7246
c32a350d2414 Code Style Checker:
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
1 # -*- coding: utf-8 -*-
c32a350d2414 Code Style Checker:
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
2
8881
54e42bc2437a Updated copyright for 2022.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8773
diff changeset
3 # Copyright (c) 2019 - 2022 Detlev Offenbach <detlev@die-offenbachs.de>
7246
c32a350d2414 Code Style Checker:
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
4 #
c32a350d2414 Code Style Checker:
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
5
c32a350d2414 Code Style Checker:
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
6 """
c32a350d2414 Code Style Checker:
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
7 Module implementing a checker for function type annotations.
c32a350d2414 Code Style Checker:
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
8 """
c32a350d2414 Code Style Checker:
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
9
8198
1c765dc90c21 Code Style Checker: changed code such, that the AST tree is built only once and passed to each checker module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8166
diff changeset
10 import copy
7246
c32a350d2414 Code Style Checker:
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
11 import ast
8244
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
12 import sys
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
13 from functools import lru_cache
7246
c32a350d2414 Code Style Checker:
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
14
7622
384e2aa5c073 Code Style Checker: continued to implement checker for security related issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7610
diff changeset
15 import AstUtilities
384e2aa5c073 Code Style Checker: continued to implement checker for security related issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7610
diff changeset
16
8244
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
17 from .AnnotationsEnums import AnnotationType, ClassDecoratorType, FunctionType
8246
e4b95b0ebd31 Code Style Checker: added configuration options for the reworked the type annotations checker to the code style checker dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8244
diff changeset
18 from .AnnotationsCheckerDefaults import AnnotationsCheckerDefaultArgs
8244
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
19
7246
c32a350d2414 Code Style Checker:
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
20
8207
d359172d11be Applied some more code simplifications suggested by the new Simplify checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8204
diff changeset
21 class AnnotationsChecker:
7246
c32a350d2414 Code Style Checker:
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
22 """
c32a350d2414 Code Style Checker:
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
23 Class implementing a checker for function type annotations.
c32a350d2414 Code Style Checker:
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
24 """
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
25
7246
c32a350d2414 Code Style Checker:
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
26 Codes = [
c32a350d2414 Code Style Checker:
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
27 ## Function Annotations
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
28 "A001",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
29 "A002",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
30 "A003",
7246
c32a350d2414 Code Style Checker:
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
31 ## Method Annotations
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
32 "A101",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
33 "A102",
7246
c32a350d2414 Code Style Checker:
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
34 ## Return Annotations
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
35 "A201",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
36 "A202",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
37 "A203",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
38 "A204",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
39 "A205",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
40 "A206",
8244
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
41 ## Mixed kind of annotations
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
42 "A301",
8773
3dd81b827455 Extended the annotations checker to check for missing 'from __future__ import annotations'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8312
diff changeset
43 ## Annotations Future
3dd81b827455 Extended the annotations checker to check for missing 'from __future__ import annotations'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8312
diff changeset
44 "A871",
7247
bf9379f964f3 Code Style Checker:
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7246
diff changeset
45 ## Annotation Coverage
bf9379f964f3 Code Style Checker:
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7246
diff changeset
46 "A881",
bf9379f964f3 Code Style Checker:
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7246
diff changeset
47 ## Annotation Complexity
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
48 "A891",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
49 "A892",
7246
c32a350d2414 Code Style Checker:
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
50 ]
c32a350d2414 Code Style Checker:
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
51
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
52 def __init__(self, source, filename, tree, select, ignore, expected, repeat, args):
7246
c32a350d2414 Code Style Checker:
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
53 """
c32a350d2414 Code Style Checker:
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
54 Constructor
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
55
7246
c32a350d2414 Code Style Checker:
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
56 @param source source code to be checked
c32a350d2414 Code Style Checker:
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
57 @type list of str
c32a350d2414 Code Style Checker:
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
58 @param filename name of the source file
c32a350d2414 Code Style Checker:
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
59 @type str
8198
1c765dc90c21 Code Style Checker: changed code such, that the AST tree is built only once and passed to each checker module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8166
diff changeset
60 @param tree AST tree of the source code
1c765dc90c21 Code Style Checker: changed code such, that the AST tree is built only once and passed to each checker module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8166
diff changeset
61 @type ast.Module
7246
c32a350d2414 Code Style Checker:
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
62 @param select list of selected codes
c32a350d2414 Code Style Checker:
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
63 @type list of str
c32a350d2414 Code Style Checker:
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
64 @param ignore list of codes to be ignored
c32a350d2414 Code Style Checker:
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
65 @type list of str
c32a350d2414 Code Style Checker:
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
66 @param expected list of expected codes
c32a350d2414 Code Style Checker:
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
67 @type list of str
c32a350d2414 Code Style Checker:
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
68 @param repeat flag indicating to report each occurrence of a code
c32a350d2414 Code Style Checker:
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
69 @type bool
7247
bf9379f964f3 Code Style Checker:
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7246
diff changeset
70 @param args dictionary of arguments for the annotation checks
bf9379f964f3 Code Style Checker:
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7246
diff changeset
71 @type dict
7246
c32a350d2414 Code Style Checker:
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
72 """
c32a350d2414 Code Style Checker:
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
73 self.__select = tuple(select)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
74 self.__ignore = ("",) if select else tuple(ignore)
7246
c32a350d2414 Code Style Checker:
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
75 self.__expected = expected[:]
c32a350d2414 Code Style Checker:
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
76 self.__repeat = repeat
c32a350d2414 Code Style Checker:
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
77 self.__filename = filename
c32a350d2414 Code Style Checker:
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
78 self.__source = source[:]
8198
1c765dc90c21 Code Style Checker: changed code such, that the AST tree is built only once and passed to each checker module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8166
diff changeset
79 self.__tree = copy.deepcopy(tree)
7247
bf9379f964f3 Code Style Checker:
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7246
diff changeset
80 self.__args = args
7246
c32a350d2414 Code Style Checker:
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
81
c32a350d2414 Code Style Checker:
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
82 # statistics counters
c32a350d2414 Code Style Checker:
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
83 self.counters = {}
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
84
7246
c32a350d2414 Code Style Checker:
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
85 # collection of detected errors
c32a350d2414 Code Style Checker:
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
86 self.errors = []
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
87
7246
c32a350d2414 Code Style Checker:
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
88 checkersWithCodes = [
c32a350d2414 Code Style Checker:
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
89 (
c32a350d2414 Code Style Checker:
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
90 self.__checkFunctionAnnotations,
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
91 (
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
92 "A001",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
93 "A002",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
94 "A003",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
95 "A101",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
96 "A102",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
97 "A201",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
98 "A202",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
99 "A203",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
100 "A204",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
101 "A205",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
102 "A206",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
103 "A301",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
104 ),
7246
c32a350d2414 Code Style Checker:
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
105 ),
8773
3dd81b827455 Extended the annotations checker to check for missing 'from __future__ import annotations'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8312
diff changeset
106 (self.__checkAnnotationsFuture, ("A871",)),
7247
bf9379f964f3 Code Style Checker:
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7246
diff changeset
107 (self.__checkAnnotationsCoverage, ("A881",)),
8244
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
108 (self.__checkAnnotationComplexity, ("A891", "A892")),
7246
c32a350d2414 Code Style Checker:
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
109 ]
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
110
7246
c32a350d2414 Code Style Checker:
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
111 self.__checkers = []
c32a350d2414 Code Style Checker:
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
112 for checker, codes in checkersWithCodes:
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
113 if any(not (code and self.__ignoreCode(code)) for code in codes):
7246
c32a350d2414 Code Style Checker:
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
114 self.__checkers.append(checker)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
115
7246
c32a350d2414 Code Style Checker:
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
116 def __ignoreCode(self, code):
c32a350d2414 Code Style Checker:
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
117 """
c32a350d2414 Code Style Checker:
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
118 Private method to check if the message code should be ignored.
c32a350d2414 Code Style Checker:
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
119
c32a350d2414 Code Style Checker:
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
120 @param code message code to check for
c32a350d2414 Code Style Checker:
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
121 @type str
c32a350d2414 Code Style Checker:
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
122 @return flag indicating to ignore the given code
c32a350d2414 Code Style Checker:
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
123 @rtype bool
c32a350d2414 Code Style Checker:
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
124 """
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
125 return code.startswith(self.__ignore) and not code.startswith(self.__select)
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
126
7246
c32a350d2414 Code Style Checker:
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
127 def __error(self, lineNumber, offset, code, *args):
c32a350d2414 Code Style Checker:
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
128 """
c32a350d2414 Code Style Checker:
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
129 Private method to record an issue.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
130
7246
c32a350d2414 Code Style Checker:
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
131 @param lineNumber line number of the issue
c32a350d2414 Code Style Checker:
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
132 @type int
c32a350d2414 Code Style Checker:
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
133 @param offset position within line of the issue
c32a350d2414 Code Style Checker:
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
134 @type int
c32a350d2414 Code Style Checker:
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
135 @param code message code
c32a350d2414 Code Style Checker:
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
136 @type str
c32a350d2414 Code Style Checker:
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
137 @param args arguments for the message
c32a350d2414 Code Style Checker:
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
138 @type list
c32a350d2414 Code Style Checker:
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
139 """
c32a350d2414 Code Style Checker:
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
140 if self.__ignoreCode(code):
c32a350d2414 Code Style Checker:
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
141 return
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
142
7246
c32a350d2414 Code Style Checker:
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
143 if code in self.counters:
c32a350d2414 Code Style Checker:
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
144 self.counters[code] += 1
c32a350d2414 Code Style Checker:
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
145 else:
c32a350d2414 Code Style Checker:
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
146 self.counters[code] = 1
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
147
7246
c32a350d2414 Code Style Checker:
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
148 # Don't care about expected codes
c32a350d2414 Code Style Checker:
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
149 if code in self.__expected:
c32a350d2414 Code Style Checker:
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
150 return
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
151
7246
c32a350d2414 Code Style Checker:
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
152 if code and (self.counters[code] == 1 or self.__repeat):
c32a350d2414 Code Style Checker:
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
153 # record the issue with one based line number
c32a350d2414 Code Style Checker:
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
154 self.errors.append(
7610
df7025fe26a3 Code Style Checker: reworked the API between frontend and backend to get some more flexibility for the future.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
155 {
df7025fe26a3 Code Style Checker: reworked the API between frontend and backend to get some more flexibility for the future.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
156 "file": self.__filename,
df7025fe26a3 Code Style Checker: reworked the API between frontend and backend to get some more flexibility for the future.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
157 "line": lineNumber + 1,
df7025fe26a3 Code Style Checker: reworked the API between frontend and backend to get some more flexibility for the future.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
158 "offset": offset,
df7025fe26a3 Code Style Checker: reworked the API between frontend and backend to get some more flexibility for the future.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
159 "code": code,
df7025fe26a3 Code Style Checker: reworked the API between frontend and backend to get some more flexibility for the future.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
160 "args": args,
df7025fe26a3 Code Style Checker: reworked the API between frontend and backend to get some more flexibility for the future.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
161 }
df7025fe26a3 Code Style Checker: reworked the API between frontend and backend to get some more flexibility for the future.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
162 )
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
163
7246
c32a350d2414 Code Style Checker:
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
164 def run(self):
c32a350d2414 Code Style Checker:
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
165 """
c32a350d2414 Code Style Checker:
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
166 Public method to check the given source against annotation issues.
c32a350d2414 Code Style Checker:
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
167 """
c32a350d2414 Code Style Checker:
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
168 if not self.__filename:
c32a350d2414 Code Style Checker:
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
169 # don't do anything, if essential data is missing
c32a350d2414 Code Style Checker:
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
170 return
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
171
7246
c32a350d2414 Code Style Checker:
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
172 if not self.__checkers:
c32a350d2414 Code Style Checker:
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
173 # don't do anything, if no codes were selected
c32a350d2414 Code Style Checker:
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
174 return
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
175
7246
c32a350d2414 Code Style Checker:
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
176 for check in self.__checkers:
c32a350d2414 Code Style Checker:
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
177 check()
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
178
8244
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
179 #######################################################################
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
180 ## Annotations
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
181 ##
8773
3dd81b827455 Extended the annotations checker to check for missing 'from __future__ import annotations'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8312
diff changeset
182 ## adapted from: flake8-annotations v2.7.0
8244
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
183 #######################################################################
9274
86fab0c74430 Added some TODO markers to update some checker code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
184 # TODO: update to v2.9.0
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
185
7246
c32a350d2414 Code Style Checker:
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
186 def __checkFunctionAnnotations(self):
c32a350d2414 Code Style Checker:
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
187 """
c32a350d2414 Code Style Checker:
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
188 Private method to check for function annotation issues.
c32a350d2414 Code Style Checker:
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
189 """
8244
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
190 suppressNoneReturning = self.__args.get(
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
191 "SuppressNoneReturning",
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
192 AnnotationsCheckerDefaultArgs["SuppressNoneReturning"],
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
193 )
8244
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
194 suppressDummyArgs = self.__args.get(
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
195 "SuppressDummyArgs", AnnotationsCheckerDefaultArgs["SuppressDummyArgs"]
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
196 )
8244
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
197 allowUntypedDefs = self.__args.get(
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
198 "AllowUntypedDefs", AnnotationsCheckerDefaultArgs["AllowUntypedDefs"]
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
199 )
8244
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
200 allowUntypedNested = self.__args.get(
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
201 "AllowUntypedNested", AnnotationsCheckerDefaultArgs["AllowUntypedNested"]
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
202 )
8244
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
203 mypyInitReturn = self.__args.get(
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
204 "MypyInitReturn", AnnotationsCheckerDefaultArgs["MypyInitReturn"]
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
205 )
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
206
8244
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
207 # Store decorator lists as sets for easier lookup
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
208 dispatchDecorators = set(
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
209 self.__args.get(
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
210 "DispatchDecorators",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
211 AnnotationsCheckerDefaultArgs["DispatchDecorators"],
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
212 )
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
213 )
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
214 overloadDecorators = set(
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
215 self.__args.get(
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
216 "OverloadDecorators",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
217 AnnotationsCheckerDefaultArgs["OverloadDecorators"],
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
218 )
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
219 )
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
220
8244
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
221 from .AnnotationsFunctionVisitor import FunctionVisitor
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
222
7246
c32a350d2414 Code Style Checker:
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
223 visitor = FunctionVisitor(self.__source)
c32a350d2414 Code Style Checker:
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
224 visitor.visit(self.__tree)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
225
8244
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
226 # Keep track of the last encountered function decorated by
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
227 # `typing.overload`, if any. Per the `typing` module documentation,
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
228 # a series of overload-decorated definitions must be followed by
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
229 # exactly one non-overload-decorated definition of the same function.
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
230 lastOverloadDecoratedFunctionName = None
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
231
8244
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
232 # Iterate over the arguments with missing type hints, by function.
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
233 for function in visitor.functionDefinitions:
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
234 if function.isDynamicallyTyped() and (
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
235 allowUntypedDefs or (function.isNested and allowUntypedNested)
8244
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
236 ):
8246
e4b95b0ebd31 Code Style Checker: added configuration options for the reworked the type annotations checker to the code style checker dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8244
diff changeset
237 # Skip recording errors from dynamically typed functions
8244
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
238 # or nested functions
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
239 continue
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
240
8246
e4b95b0ebd31 Code Style Checker: added configuration options for the reworked the type annotations checker to the code style checker dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8244
diff changeset
241 # Skip recording errors for configured dispatch functions, such as
8244
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
242 # (by default) `functools.singledispatch` and
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
243 # `functools.singledispatchmethod`
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
244 if function.hasDecorator(dispatchDecorators):
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
245 continue
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
246
8244
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
247 # Create sentinels to check for mixed hint styles
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
248 hasTypeComment = function.hasTypeComment
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
249
8244
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
250 has3107Annotation = False
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
251 # PEP 3107 annotations are captured by the return arg
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
252
8244
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
253 # Iterate over annotated args to detect mixing of type annotations
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
254 # and type comments. Emit this only once per function definition
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
255 for arg in function.getAnnotatedArguments():
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
256 if arg.hasTypeComment:
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
257 hasTypeComment = True
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
258
8244
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
259 if arg.has3107Annotation:
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
260 has3107Annotation = True
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
261
8244
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
262 if hasTypeComment and has3107Annotation:
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
263 # Short-circuit check for mixing of type comments &
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
264 # 3107-style annotations
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
265 self.__error(function.lineno - 1, function.col_offset, "A301")
8244
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
266 break
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
267
8244
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
268 # Before we iterate over the function's missing annotations, check
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
269 # to see if it's the closing function def in a series of
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
270 # `typing.overload` decorated functions.
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
271 if lastOverloadDecoratedFunctionName == function.name:
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
272 continue
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
273
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
274 # If it's not, and it is overload decorated, store it for the next
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
275 # iteration
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
276 if function.hasDecorator(overloadDecorators):
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
277 lastOverloadDecoratedFunctionName = function.name
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
278
8244
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
279 # Record explicit errors for arguments that are missing annotations
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
280 for arg in function.getMissedAnnotations():
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
281 if arg.argname == "return":
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
282 # return annotations have multiple possible short-circuit
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
283 # paths
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
284 if (
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
285 suppressNoneReturning
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
286 and not arg.hasTypeAnnotation
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
287 and function.hasOnlyNoneReturns
8244
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
288 ):
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
289 # Skip recording return errors if the function has only
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
290 # `None` returns. This includes the case of no returns.
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
291 continue
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
292
8244
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
293 if (
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
294 mypyInitReturn
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
295 and function.isClassMethod
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
296 and function.name == "__init__"
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
297 and function.getAnnotatedArguments()
8244
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
298 ):
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
299 # Skip recording return errors for `__init__` if at
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
300 # least one argument is annotated
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
301 continue
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
302
8244
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
303 # If the `suppressDummyArgs` flag is `True`, skip recording
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
304 # errors for any arguments named `_`
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
305 if arg.argname == "_" and suppressDummyArgs:
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
306 continue
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
307
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
308 self.__classifyError(function, arg)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
309
8244
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
310 def __classifyError(self, function, arg):
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
311 """
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
312 Private method to classify the missing type annotation based on the
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
313 Function & Argument metadata.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
314
8244
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
315 For the currently defined rules & program flow, the assumption can be
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
316 made that an argument passed to this method will match a linting error,
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
317 and will only match a single linting error
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
318
8244
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
319 This function provides an initial classificaton, then passes relevant
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
320 attributes to cached helper function(s).
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
321
8244
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
322 @param function reference to the Function object
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
323 @type Function
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
324 @param arg reference to the Argument object
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
325 @type Argument
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
326 """
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
327 # Check for return type
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
328 # All return "arguments" have an explicitly defined name "return"
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
329 if arg.argname == "return":
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
330 errorCode = self.__returnErrorClassifier(
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
331 function.isClassMethod,
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
332 function.classDecoratorType,
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
333 function.functionType,
8244
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
334 )
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
335 else:
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
336 # Otherwise, classify function argument error
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
337 isFirstArg = arg == function.args[0]
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
338 errorCode = self.__argumentErrorClassifier(
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
339 function.isClassMethod,
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
340 isFirstArg,
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
341 function.classDecoratorType,
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
342 arg.annotationType,
8244
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
343 )
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
344
8244
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
345 if errorCode in ("A001", "A002", "A003"):
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
346 self.__error(arg.lineno - 1, arg.col_offset, errorCode, arg.argname)
8244
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
347 else:
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
348 self.__error(arg.lineno - 1, arg.col_offset, errorCode)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
349
8244
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
350 @lru_cache()
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
351 def __returnErrorClassifier(self, isClassMethod, classDecoratorType, functionType):
8244
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
352 """
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
353 Private method to classify a return type annotation issue.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
354
8244
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
355 @param isClassMethod flag indicating a classmethod type function
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
356 @type bool
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
357 @param classDecoratorType type of class decorator
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
358 @type ClassDecoratorType
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
359 @param functionType type of function
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
360 @type FunctionType
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
361 @return error code
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
362 @rtype str
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
363 """
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
364 # Decorated class methods (@classmethod, @staticmethod) have a higher
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
365 # priority than the rest
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
366 if isClassMethod:
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
367 if classDecoratorType == ClassDecoratorType.CLASSMETHOD:
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
368 return "A206"
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
369 elif classDecoratorType == ClassDecoratorType.STATICMETHOD:
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
370 return "A205"
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
371
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
372 if functionType == FunctionType.SPECIAL:
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
373 return "A204"
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
374 elif functionType == FunctionType.PRIVATE:
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
375 return "A203"
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
376 elif functionType == FunctionType.PROTECTED:
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
377 return "A202"
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
378 else:
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
379 return "A201"
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
380
8244
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
381 @lru_cache()
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
382 def __argumentErrorClassifier(
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
383 self, isClassMethod, isFirstArg, classDecoratorType, annotationType
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
384 ):
8244
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
385 """
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
386 Private method to classify an argument type annotation issue.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
387
8244
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
388 @param isClassMethod flag indicating a classmethod type function
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
389 @type bool
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
390 @param isFirstArg flag indicating the first argument
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
391 @type bool
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
392 @param classDecoratorType type of class decorator
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
393 @type enums.ClassDecoratorType
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
394 @param annotationType type of annotation
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
395 @type AnnotationType
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
396 @return error code
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
397 @rtype str
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
398 """
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
399 # Check for regular class methods and @classmethod, @staticmethod is
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
400 # deferred to final check
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
401 if isClassMethod and isFirstArg:
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
402 # The first function argument here would be an instance of self or
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
403 # class
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
404 if classDecoratorType == ClassDecoratorType.CLASSMETHOD:
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
405 return "A102"
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
406 elif classDecoratorType != ClassDecoratorType.STATICMETHOD:
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
407 # Regular class method
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
408 return "A101"
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
409
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
410 # Check for remaining codes
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
411 if annotationType == AnnotationType.KWARG:
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
412 return "A003"
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
413 elif annotationType == AnnotationType.VARARG:
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
414 return "A002"
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
415 else:
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
416 # Combine PosOnlyArgs, Args, and KwOnlyArgs
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
417 return "A001"
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
418
8244
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
419 #######################################################################
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
420 ## Annotations Coverage
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
421 ##
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
422 ## adapted from: flake8-annotations-coverage v0.0.5
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
423 #######################################################################
9274
86fab0c74430 Added some TODO markers to update some checker code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
424 # TODO: update to v0.0.6
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
425
7247
bf9379f964f3 Code Style Checker:
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7246
diff changeset
426 def __checkAnnotationsCoverage(self):
bf9379f964f3 Code Style Checker:
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7246
diff changeset
427 """
bf9379f964f3 Code Style Checker:
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7246
diff changeset
428 Private method to check for function annotation coverage.
bf9379f964f3 Code Style Checker:
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7246
diff changeset
429 """
bf9379f964f3 Code Style Checker:
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7246
diff changeset
430 minAnnotationsCoverage = self.__args.get(
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
431 "MinimumCoverage", AnnotationsCheckerDefaultArgs["MinimumCoverage"]
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
432 )
7247
bf9379f964f3 Code Style Checker:
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7246
diff changeset
433 if minAnnotationsCoverage == 0:
bf9379f964f3 Code Style Checker:
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7246
diff changeset
434 # 0 means it is switched off
bf9379f964f3 Code Style Checker:
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7246
diff changeset
435 return
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
436
7247
bf9379f964f3 Code Style Checker:
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7246
diff changeset
437 functionDefs = [
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
438 f
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
439 for f in ast.walk(self.__tree)
7247
bf9379f964f3 Code Style Checker:
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7246
diff changeset
440 if isinstance(f, (ast.AsyncFunctionDef, ast.FunctionDef))
bf9379f964f3 Code Style Checker:
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7246
diff changeset
441 ]
bf9379f964f3 Code Style Checker:
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7246
diff changeset
442 if not functionDefs:
bf9379f964f3 Code Style Checker:
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7246
diff changeset
443 # no functions/methods at all
bf9379f964f3 Code Style Checker:
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7246
diff changeset
444 return
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
445
7247
bf9379f964f3 Code Style Checker:
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7246
diff changeset
446 functionDefAnnotationsInfo = [
8244
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
447 self.__hasTypeAnnotations(f) for f in functionDefs
7247
bf9379f964f3 Code Style Checker:
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7246
diff changeset
448 ]
bf9379f964f3 Code Style Checker:
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7246
diff changeset
449 annotationsCoverage = int(
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
450 len(list(filter(None, functionDefAnnotationsInfo)))
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
451 / len(functionDefAnnotationsInfo)
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
452 * 100
7247
bf9379f964f3 Code Style Checker:
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7246
diff changeset
453 )
bf9379f964f3 Code Style Checker:
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7246
diff changeset
454 if annotationsCoverage < minAnnotationsCoverage:
bf9379f964f3 Code Style Checker:
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7246
diff changeset
455 self.__error(0, 0, "A881", annotationsCoverage)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
456
8244
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
457 def __hasTypeAnnotations(self, funcNode):
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
458 """
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
459 Private method to check for type annotations.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
460
8244
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
461 @param funcNode reference to the function definition node to be checked
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
462 @type ast.AsyncFunctionDef or ast.FunctionDef
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
463 @return flag indicating the presence of type annotations
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
464 @rtype bool
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
465 """
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
466 hasReturnAnnotation = funcNode.returns is not None
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
467 hasArgsAnnotations = any(
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
468 a for a in funcNode.args.args if a.annotation is not None
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
469 )
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
470 hasKwargsAnnotations = (
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
471 funcNode.args
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
472 and funcNode.args.kwarg
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
473 and funcNode.args.kwarg.annotation is not None
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
474 )
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
475 hasKwonlyargsAnnotations = any(
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
476 a for a in funcNode.args.kwonlyargs if a.annotation is not None
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
477 )
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
478
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
479 return any(
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
480 (
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
481 hasReturnAnnotation,
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
482 hasArgsAnnotations,
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
483 hasKwargsAnnotations,
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
484 hasKwonlyargsAnnotations,
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
485 )
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
486 )
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
487
8244
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
488 #######################################################################
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
489 ## Annotations Complexity
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
490 ##
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
491 ## adapted from: flake8-annotations-complexity v0.0.6
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
492 #######################################################################
9274
86fab0c74430 Added some TODO markers to update some checker code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
493 # TODO: update to v0.0.7
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
494
7247
bf9379f964f3 Code Style Checker:
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7246
diff changeset
495 def __checkAnnotationComplexity(self):
bf9379f964f3 Code Style Checker:
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7246
diff changeset
496 """
bf9379f964f3 Code Style Checker:
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7246
diff changeset
497 Private method to check the type annotation complexity.
bf9379f964f3 Code Style Checker:
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7246
diff changeset
498 """
bf9379f964f3 Code Style Checker:
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7246
diff changeset
499 maxAnnotationComplexity = self.__args.get(
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
500 "MaximumComplexity", AnnotationsCheckerDefaultArgs["MaximumComplexity"]
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
501 )
8244
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
502 maxAnnotationLength = self.__args.get(
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
503 "MaximumLength", AnnotationsCheckerDefaultArgs["MaximumLength"]
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
504 )
7247
bf9379f964f3 Code Style Checker:
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7246
diff changeset
505 typeAnnotations = []
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
506
7247
bf9379f964f3 Code Style Checker:
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7246
diff changeset
507 functionDefs = [
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
508 f
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
509 for f in ast.walk(self.__tree)
7247
bf9379f964f3 Code Style Checker:
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7246
diff changeset
510 if isinstance(f, (ast.AsyncFunctionDef, ast.FunctionDef))
bf9379f964f3 Code Style Checker:
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7246
diff changeset
511 ]
bf9379f964f3 Code Style Checker:
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7246
diff changeset
512 for functionDef in functionDefs:
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
513 typeAnnotations += list(
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
514 filter(None, [a.annotation for a in functionDef.args.args])
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
515 )
7247
bf9379f964f3 Code Style Checker:
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7246
diff changeset
516 if functionDef.returns:
bf9379f964f3 Code Style Checker:
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7246
diff changeset
517 typeAnnotations.append(functionDef.returns)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
518 typeAnnotations += [
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
519 a.annotation
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
520 for a in ast.walk(self.__tree)
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
521 if isinstance(a, ast.AnnAssign) and a.annotation
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
522 ]
7247
bf9379f964f3 Code Style Checker:
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7246
diff changeset
523 for annotation in typeAnnotations:
8244
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
524 complexity = self.__getAnnotationComplexity(annotation)
7247
bf9379f964f3 Code Style Checker:
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7246
diff changeset
525 if complexity > maxAnnotationComplexity:
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
526 self.__error(
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
527 annotation.lineno - 1,
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
528 annotation.col_offset,
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
529 "A891",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
530 complexity,
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
531 maxAnnotationComplexity,
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
532 )
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
533
8244
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
534 annotationLength = self.__getAnnotationLength(annotation)
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
535 if annotationLength > maxAnnotationLength:
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
536 self.__error(
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
537 annotation.lineno - 1,
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
538 annotation.col_offset,
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
539 "A892",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
540 annotationLength,
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
541 maxAnnotationLength,
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
542 )
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
543
8244
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
544 def __getAnnotationComplexity(self, annotationNode, defaultComplexity=1):
7246
c32a350d2414 Code Style Checker:
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
545 """
8244
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
546 Private method to determine the annotation complexity.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
547
8244
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
548 @param annotationNode reference to the node to determine the annotation
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
549 complexity for
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
550 @type ast.AST
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
551 @param defaultComplexity default complexity value
7246
c32a350d2414 Code Style Checker:
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
552 @type int
8244
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
553 @return annotation complexity
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
554 @rtype = int
7246
c32a350d2414 Code Style Checker:
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
555 """
8244
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
556 if AstUtilities.isString(annotationNode):
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
557 try:
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
558 annotationNode = ast.parse(annotationNode.s).body[0].value
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
559 except (SyntaxError, IndexError):
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
560 return defaultComplexity
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
561 if isinstance(annotationNode, ast.Subscript):
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
562 if sys.version_info >= (3, 9):
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
563 return defaultComplexity + self.__getAnnotationComplexity(
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
564 annotationNode.slice
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
565 )
8244
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
566 else:
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
567 return defaultComplexity + self.__getAnnotationComplexity(
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
568 annotationNode.slice.value
8244
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
569 )
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
570 if isinstance(annotationNode, ast.Tuple):
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
571 return max(
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
572 (self.__getAnnotationComplexity(n) for n in annotationNode.elts),
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
573 default=defaultComplexity,
8244
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
574 )
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
575 return defaultComplexity
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
576
8244
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
577 def __getAnnotationLength(self, annotationNode):
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
578 """
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
579 Private method to determine the annotation length.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
580
8244
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
581 @param annotationNode reference to the node to determine the annotation
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
582 length for
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
583 @type ast.AST
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
584 @return annotation length
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
585 @rtype = int
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
586 """
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
587 if AstUtilities.isString(annotationNode):
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
588 try:
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
589 annotationNode = ast.parse(annotationNode.s).body[0].value
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
590 except (SyntaxError, IndexError):
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
591 return 0
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
592 if isinstance(annotationNode, ast.Subscript):
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
593 try:
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
594 if sys.version_info >= (3, 9):
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
595 return len(annotationNode.slice.elts)
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
596 else:
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
597 return len(annotationNode.slice.value.elts)
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
598 except AttributeError:
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
599 return 0
ed8cb108b27b Code Style Checker: reworked the type annotations checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8236
diff changeset
600 return 0
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
601
8773
3dd81b827455 Extended the annotations checker to check for missing 'from __future__ import annotations'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8312
diff changeset
602 #######################################################################
3dd81b827455 Extended the annotations checker to check for missing 'from __future__ import annotations'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8312
diff changeset
603 ## 'from __future__ import annotations' checck
3dd81b827455 Extended the annotations checker to check for missing 'from __future__ import annotations'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8312
diff changeset
604 ##
3dd81b827455 Extended the annotations checker to check for missing 'from __future__ import annotations'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8312
diff changeset
605 ## adapted from: flake8-future-annotations v0.0.4
3dd81b827455 Extended the annotations checker to check for missing 'from __future__ import annotations'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8312
diff changeset
606 #######################################################################
9274
86fab0c74430 Added some TODO markers to update some checker code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
607 # TODO: update to v0.0.5
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
608
8773
3dd81b827455 Extended the annotations checker to check for missing 'from __future__ import annotations'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8312
diff changeset
609 def __checkAnnotationsFuture(self):
3dd81b827455 Extended the annotations checker to check for missing 'from __future__ import annotations'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8312
diff changeset
610 """
3dd81b827455 Extended the annotations checker to check for missing 'from __future__ import annotations'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8312
diff changeset
611 Private method to check the use of __future__ and typing imports.
3dd81b827455 Extended the annotations checker to check for missing 'from __future__ import annotations'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8312
diff changeset
612 """
3dd81b827455 Extended the annotations checker to check for missing 'from __future__ import annotations'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8312
diff changeset
613 from .AnnotationsFutureVisitor import AnnotationsFutureVisitor
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
614
8773
3dd81b827455 Extended the annotations checker to check for missing 'from __future__ import annotations'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8312
diff changeset
615 visitor = AnnotationsFutureVisitor()
3dd81b827455 Extended the annotations checker to check for missing 'from __future__ import annotations'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8312
diff changeset
616 visitor.visit(self.__tree)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
617
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
618 if visitor.importsFutureAnnotations() or not visitor.hasTypingImports():
8773
3dd81b827455 Extended the annotations checker to check for missing 'from __future__ import annotations'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8312
diff changeset
619 return
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
620
8773
3dd81b827455 Extended the annotations checker to check for missing 'from __future__ import annotations'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8312
diff changeset
621 imports = ", ".join(visitor.getTypingImports())
3dd81b827455 Extended the annotations checker to check for missing 'from __future__ import annotations'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8312
diff changeset
622 self.__error(0, 0, "A871", imports)

eric ide

mercurial