Mon, 22 Jan 2024 11:47:06 +0100
Fixed a few issues in the 'Syntax Checker' and 'Code Style Checker' dialogs.
8773
3dd81b827455
Extended the annotations checker to check for missing 'from __future__ import annotations'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
1 | # -*- coding: utf-8 -*- |
3dd81b827455
Extended the annotations checker to check for missing 'from __future__ import annotations'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
2 | |
10439
21c28b0f9e41
Updated copyright for 2024.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10043
diff
changeset
|
3 | # Copyright (c) 2021 - 2024 Detlev Offenbach <detlev@die-offenbachs.de> |
8773
3dd81b827455
Extended the annotations checker to check for missing 'from __future__ import annotations'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
4 | # |
3dd81b827455
Extended the annotations checker to check for missing 'from __future__ import annotations'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
5 | |
3dd81b827455
Extended the annotations checker to check for missing 'from __future__ import annotations'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
6 | """ |
3dd81b827455
Extended the annotations checker to check for missing 'from __future__ import annotations'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
7 | Module implementing a node visitor for function type annotations. |
3dd81b827455
Extended the annotations checker to check for missing 'from __future__ import annotations'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
8 | """ |
3dd81b827455
Extended the annotations checker to check for missing 'from __future__ import annotations'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
9 | |
3dd81b827455
Extended the annotations checker to check for missing 'from __future__ import annotations'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
10 | # |
10043
f1427d95cfde
Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9653
diff
changeset
|
11 | # The visitor and associated classes are adapted from flake8-future-annotations v1.1.0 |
8773
3dd81b827455
Extended the annotations checker to check for missing 'from __future__ import annotations'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
12 | # |
3dd81b827455
Extended the annotations checker to check for missing 'from __future__ import annotations'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
13 | |
3dd81b827455
Extended the annotations checker to check for missing 'from __future__ import annotations'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
14 | import ast |
3dd81b827455
Extended the annotations checker to check for missing 'from __future__ import annotations'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
15 | |
3dd81b827455
Extended the annotations checker to check for missing 'from __future__ import annotations'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
16 | |
3dd81b827455
Extended the annotations checker to check for missing 'from __future__ import annotations'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
17 | class AnnotationsFutureVisitor(ast.NodeVisitor): |
3dd81b827455
Extended the annotations checker to check for missing 'from __future__ import annotations'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
18 | """ |
3dd81b827455
Extended the annotations checker to check for missing 'from __future__ import annotations'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
19 | Class implementing a node visitor to check __future__ imports. |
3dd81b827455
Extended the annotations checker to check for missing 'from __future__ import annotations'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
20 | """ |
9221
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
21 | |
8773
3dd81b827455
Extended the annotations checker to check for missing 'from __future__ import annotations'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
22 | SimplifyableTypes = ( |
3dd81b827455
Extended the annotations checker to check for missing 'from __future__ import annotations'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
23 | "DefaultDict", |
3dd81b827455
Extended the annotations checker to check for missing 'from __future__ import annotations'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
24 | "Deque", |
3dd81b827455
Extended the annotations checker to check for missing 'from __future__ import annotations'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
25 | "Dict", |
3dd81b827455
Extended the annotations checker to check for missing 'from __future__ import annotations'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
26 | "FrozenSet", |
3dd81b827455
Extended the annotations checker to check for missing 'from __future__ import annotations'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
27 | "List", |
3dd81b827455
Extended the annotations checker to check for missing 'from __future__ import annotations'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
28 | "Optional", |
3dd81b827455
Extended the annotations checker to check for missing 'from __future__ import annotations'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
29 | "Set", |
3dd81b827455
Extended the annotations checker to check for missing 'from __future__ import annotations'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
30 | "Tuple", |
3dd81b827455
Extended the annotations checker to check for missing 'from __future__ import annotations'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
31 | "Union", |
3dd81b827455
Extended the annotations checker to check for missing 'from __future__ import annotations'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
32 | "Type", |
3dd81b827455
Extended the annotations checker to check for missing 'from __future__ import annotations'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
33 | ) |
10043
f1427d95cfde
Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9653
diff
changeset
|
34 | SimplifiedTypes = ( |
f1427d95cfde
Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9653
diff
changeset
|
35 | "defaultdict", |
f1427d95cfde
Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9653
diff
changeset
|
36 | "deque", |
f1427d95cfde
Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9653
diff
changeset
|
37 | "dict", |
f1427d95cfde
Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9653
diff
changeset
|
38 | "frozenset", |
f1427d95cfde
Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9653
diff
changeset
|
39 | "list", |
f1427d95cfde
Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9653
diff
changeset
|
40 | "set", |
f1427d95cfde
Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9653
diff
changeset
|
41 | "tuple", |
f1427d95cfde
Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9653
diff
changeset
|
42 | "type", |
f1427d95cfde
Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9653
diff
changeset
|
43 | ) |
9221
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
44 | |
8773
3dd81b827455
Extended the annotations checker to check for missing 'from __future__ import annotations'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
45 | def __init__(self): |
3dd81b827455
Extended the annotations checker to check for missing 'from __future__ import annotations'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
46 | """ |
3dd81b827455
Extended the annotations checker to check for missing 'from __future__ import annotations'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
47 | Constructor |
3dd81b827455
Extended the annotations checker to check for missing 'from __future__ import annotations'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
48 | """ |
3dd81b827455
Extended the annotations checker to check for missing 'from __future__ import annotations'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
49 | super().__init__() |
9221
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
50 | |
8773
3dd81b827455
Extended the annotations checker to check for missing 'from __future__ import annotations'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
51 | self.__typingAliases = [] |
3dd81b827455
Extended the annotations checker to check for missing 'from __future__ import annotations'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
52 | self.__importsFutureAnnotations = False |
9221
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
53 | |
8773
3dd81b827455
Extended the annotations checker to check for missing 'from __future__ import annotations'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
54 | # e.g. from typing import List, typing.List, t.List |
3dd81b827455
Extended the annotations checker to check for missing 'from __future__ import annotations'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
55 | self.__typingImports = [] |
10043
f1427d95cfde
Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9653
diff
changeset
|
56 | self.__simplifiedTypes = set() |
9221
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
57 | |
8773
3dd81b827455
Extended the annotations checker to check for missing 'from __future__ import annotations'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
58 | def visit_Import(self, node): |
3dd81b827455
Extended the annotations checker to check for missing 'from __future__ import annotations'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
59 | """ |
3dd81b827455
Extended the annotations checker to check for missing 'from __future__ import annotations'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
60 | Public method to check imports for typing related stuff. |
9221
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
61 | |
8773
3dd81b827455
Extended the annotations checker to check for missing 'from __future__ import annotations'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
62 | This looks like: |
3dd81b827455
Extended the annotations checker to check for missing 'from __future__ import annotations'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
63 | import typing |
3dd81b827455
Extended the annotations checker to check for missing 'from __future__ import annotations'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
64 | or |
3dd81b827455
Extended the annotations checker to check for missing 'from __future__ import annotations'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
65 | import typing as t |
9221
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
66 | |
8773
3dd81b827455
Extended the annotations checker to check for missing 'from __future__ import annotations'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
67 | typing or t will be added to the list of typing aliases. |
9221
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
68 | |
8773
3dd81b827455
Extended the annotations checker to check for missing 'from __future__ import annotations'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
69 | @param node reference to the AST Import node |
3dd81b827455
Extended the annotations checker to check for missing 'from __future__ import annotations'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
70 | @type ast.Import |
3dd81b827455
Extended the annotations checker to check for missing 'from __future__ import annotations'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
71 | """ |
3dd81b827455
Extended the annotations checker to check for missing 'from __future__ import annotations'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
72 | for alias in node.names: |
3dd81b827455
Extended the annotations checker to check for missing 'from __future__ import annotations'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
73 | if alias.name == "typing": |
3dd81b827455
Extended the annotations checker to check for missing 'from __future__ import annotations'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
74 | self.__typingAliases.append("typing") |
3dd81b827455
Extended the annotations checker to check for missing 'from __future__ import annotations'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
75 | if alias.asname is not None: |
3dd81b827455
Extended the annotations checker to check for missing 'from __future__ import annotations'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
76 | self.__typingAliases.append(alias.asname) |
9221
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
77 | |
8773
3dd81b827455
Extended the annotations checker to check for missing 'from __future__ import annotations'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
78 | self.generic_visit(node) |
9221
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
79 | |
8773
3dd81b827455
Extended the annotations checker to check for missing 'from __future__ import annotations'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
80 | def visit_ImportFrom(self, node): |
3dd81b827455
Extended the annotations checker to check for missing 'from __future__ import annotations'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
81 | """ |
3dd81b827455
Extended the annotations checker to check for missing 'from __future__ import annotations'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
82 | Public method to detect the 'from __future__ import annotations' |
3dd81b827455
Extended the annotations checker to check for missing 'from __future__ import annotations'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
83 | import if present. |
3dd81b827455
Extended the annotations checker to check for missing 'from __future__ import annotations'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
84 | |
3dd81b827455
Extended the annotations checker to check for missing 'from __future__ import annotations'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
85 | If 'from typing import ...' is used, add simplifiable names that were |
3dd81b827455
Extended the annotations checker to check for missing 'from __future__ import annotations'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
86 | imported. |
9221
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
87 | |
8773
3dd81b827455
Extended the annotations checker to check for missing 'from __future__ import annotations'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
88 | @param node reference to the AST ImportFrom node |
3dd81b827455
Extended the annotations checker to check for missing 'from __future__ import annotations'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
89 | @type ast.ImportFrom |
3dd81b827455
Extended the annotations checker to check for missing 'from __future__ import annotations'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
90 | """ |
3dd81b827455
Extended the annotations checker to check for missing 'from __future__ import annotations'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
91 | if node.module == "__future__": |
3dd81b827455
Extended the annotations checker to check for missing 'from __future__ import annotations'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
92 | for alias in node.names: |
3dd81b827455
Extended the annotations checker to check for missing 'from __future__ import annotations'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
93 | if alias.name == "annotations": |
3dd81b827455
Extended the annotations checker to check for missing 'from __future__ import annotations'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
94 | self.__importsFutureAnnotations = True |
3dd81b827455
Extended the annotations checker to check for missing 'from __future__ import annotations'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
95 | |
3dd81b827455
Extended the annotations checker to check for missing 'from __future__ import annotations'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
96 | if node.module == "typing": |
3dd81b827455
Extended the annotations checker to check for missing 'from __future__ import annotations'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
97 | for alias in node.names: |
3dd81b827455
Extended the annotations checker to check for missing 'from __future__ import annotations'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
98 | if alias.name in AnnotationsFutureVisitor.SimplifyableTypes: |
3dd81b827455
Extended the annotations checker to check for missing 'from __future__ import annotations'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
99 | self.__typingImports.append(alias.name) |
3dd81b827455
Extended the annotations checker to check for missing 'from __future__ import annotations'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
100 | |
3dd81b827455
Extended the annotations checker to check for missing 'from __future__ import annotations'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
101 | self.generic_visit(node) |
9221
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
102 | |
8773
3dd81b827455
Extended the annotations checker to check for missing 'from __future__ import annotations'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
103 | def visit_Attribute(self, node): |
3dd81b827455
Extended the annotations checker to check for missing 'from __future__ import annotations'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
104 | """ |
3dd81b827455
Extended the annotations checker to check for missing 'from __future__ import annotations'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
105 | Public method to record simplifiable names. |
9221
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
106 | |
8773
3dd81b827455
Extended the annotations checker to check for missing 'from __future__ import annotations'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
107 | If 'import typing' or 'import typing as t' is used, add simplifiable |
3dd81b827455
Extended the annotations checker to check for missing 'from __future__ import annotations'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
108 | names that were used later on in the code. |
9221
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
109 | |
8773
3dd81b827455
Extended the annotations checker to check for missing 'from __future__ import annotations'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
110 | @param node reference to the AST Attribute node |
3dd81b827455
Extended the annotations checker to check for missing 'from __future__ import annotations'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
111 | @type ast.Attribute |
3dd81b827455
Extended the annotations checker to check for missing 'from __future__ import annotations'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
112 | """ |
3dd81b827455
Extended the annotations checker to check for missing 'from __future__ import annotations'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
113 | if ( |
9221
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
114 | node.attr in AnnotationsFutureVisitor.SimplifyableTypes |
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
115 | and isinstance(node.value, ast.Name) |
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
116 | and node.value.id in self.__typingAliases |
8773
3dd81b827455
Extended the annotations checker to check for missing 'from __future__ import annotations'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
117 | ): |
3dd81b827455
Extended the annotations checker to check for missing 'from __future__ import annotations'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
118 | self.__typingImports.append(f"{node.value.id}.{node.attr}") |
9221
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
119 | |
8773
3dd81b827455
Extended the annotations checker to check for missing 'from __future__ import annotations'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
120 | self.generic_visit(node) |
9221
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
121 | |
10043
f1427d95cfde
Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9653
diff
changeset
|
122 | def visit_AnnAssign(self, node): |
f1427d95cfde
Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9653
diff
changeset
|
123 | """ |
f1427d95cfde
Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9653
diff
changeset
|
124 | Public method to check type annotations. |
f1427d95cfde
Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9653
diff
changeset
|
125 | |
f1427d95cfde
Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9653
diff
changeset
|
126 | @param node reference to the AST Assign node |
f1427d95cfde
Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9653
diff
changeset
|
127 | @type ast.AnnAssign |
f1427d95cfde
Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9653
diff
changeset
|
128 | """ |
f1427d95cfde
Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9653
diff
changeset
|
129 | if not self.__importsFutureAnnotations and node.annotation is not None: |
f1427d95cfde
Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9653
diff
changeset
|
130 | self.__processAnnotation(node.annotation) |
f1427d95cfde
Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9653
diff
changeset
|
131 | |
f1427d95cfde
Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9653
diff
changeset
|
132 | self.generic_visit(node) |
f1427d95cfde
Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9653
diff
changeset
|
133 | |
f1427d95cfde
Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9653
diff
changeset
|
134 | def visit_arg(self, node: ast.arg): |
f1427d95cfde
Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9653
diff
changeset
|
135 | """ |
f1427d95cfde
Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9653
diff
changeset
|
136 | Public method to check argument annotations. |
f1427d95cfde
Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9653
diff
changeset
|
137 | |
f1427d95cfde
Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9653
diff
changeset
|
138 | @param node reference to the AST argument node |
f1427d95cfde
Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9653
diff
changeset
|
139 | @type ast.arg |
f1427d95cfde
Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9653
diff
changeset
|
140 | """ |
f1427d95cfde
Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9653
diff
changeset
|
141 | if not self.__importsFutureAnnotations and node.annotation is not None: |
f1427d95cfde
Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9653
diff
changeset
|
142 | self.__processAnnotation(node.annotation) |
f1427d95cfde
Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9653
diff
changeset
|
143 | |
f1427d95cfde
Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9653
diff
changeset
|
144 | self.generic_visit(node) |
f1427d95cfde
Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9653
diff
changeset
|
145 | |
f1427d95cfde
Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9653
diff
changeset
|
146 | def __processAnnotation(self, node): |
f1427d95cfde
Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9653
diff
changeset
|
147 | """ |
f1427d95cfde
Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9653
diff
changeset
|
148 | Private method to process the given annotations. |
f1427d95cfde
Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9653
diff
changeset
|
149 | |
f1427d95cfde
Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9653
diff
changeset
|
150 | @param node reference to the AST node containing the annotations |
f1427d95cfde
Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9653
diff
changeset
|
151 | @type ast.expr |
f1427d95cfde
Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9653
diff
changeset
|
152 | """ |
f1427d95cfde
Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9653
diff
changeset
|
153 | if ( |
f1427d95cfde
Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9653
diff
changeset
|
154 | isinstance(node, ast.Name) |
f1427d95cfde
Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9653
diff
changeset
|
155 | and node.id in AnnotationsFutureVisitor.SimplifiedTypes |
f1427d95cfde
Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9653
diff
changeset
|
156 | ): |
f1427d95cfde
Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9653
diff
changeset
|
157 | self.__simplifiedTypes.add(node.id) |
f1427d95cfde
Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9653
diff
changeset
|
158 | elif isinstance(node, ast.Subscript): |
f1427d95cfde
Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9653
diff
changeset
|
159 | self.__processAnnotation(node.value) |
f1427d95cfde
Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9653
diff
changeset
|
160 | self.__processAnnotation(node.slice) |
f1427d95cfde
Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9653
diff
changeset
|
161 | elif isinstance(node, ast.Tuple): |
f1427d95cfde
Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9653
diff
changeset
|
162 | for subNode in node.elts: |
f1427d95cfde
Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9653
diff
changeset
|
163 | self.__processAnnotation(subNode) |
f1427d95cfde
Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9653
diff
changeset
|
164 | elif isinstance(node, ast.BinOp): |
f1427d95cfde
Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9653
diff
changeset
|
165 | if isinstance(node.op, ast.BitOr): |
f1427d95cfde
Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9653
diff
changeset
|
166 | self.__simplifiedTypes.add("union") |
f1427d95cfde
Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9653
diff
changeset
|
167 | self.__processAnnotation(node.left) |
f1427d95cfde
Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9653
diff
changeset
|
168 | self.__processAnnotation(node.right) |
f1427d95cfde
Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9653
diff
changeset
|
169 | elif isinstance(node, ast.Index): |
f1427d95cfde
Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9653
diff
changeset
|
170 | # Index is only used in Python 3.7 and 3.8, deprecated after. |
f1427d95cfde
Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9653
diff
changeset
|
171 | self.__processAnnotation(node.value) |
f1427d95cfde
Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9653
diff
changeset
|
172 | |
8773
3dd81b827455
Extended the annotations checker to check for missing 'from __future__ import annotations'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
173 | def importsFutureAnnotations(self): |
3dd81b827455
Extended the annotations checker to check for missing 'from __future__ import annotations'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
174 | """ |
3dd81b827455
Extended the annotations checker to check for missing 'from __future__ import annotations'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
175 | Public method to check, if the analyzed code uses future annotation. |
9221
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
176 | |
8773
3dd81b827455
Extended the annotations checker to check for missing 'from __future__ import annotations'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
177 | @return flag indicatung the use of future annotation |
3dd81b827455
Extended the annotations checker to check for missing 'from __future__ import annotations'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
178 | @rtype bool |
3dd81b827455
Extended the annotations checker to check for missing 'from __future__ import annotations'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
179 | """ |
3dd81b827455
Extended the annotations checker to check for missing 'from __future__ import annotations'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
180 | return self.__importsFutureAnnotations |
9221
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
181 | |
8773
3dd81b827455
Extended the annotations checker to check for missing 'from __future__ import annotations'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
182 | def hasTypingImports(self): |
3dd81b827455
Extended the annotations checker to check for missing 'from __future__ import annotations'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
183 | """ |
3dd81b827455
Extended the annotations checker to check for missing 'from __future__ import annotations'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
184 | Public method to check, if the analyzed code includes typing imports. |
9221
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
185 | |
8773
3dd81b827455
Extended the annotations checker to check for missing 'from __future__ import annotations'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
186 | @return flag indicating the use of typing imports |
3dd81b827455
Extended the annotations checker to check for missing 'from __future__ import annotations'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
187 | @rtype bool |
3dd81b827455
Extended the annotations checker to check for missing 'from __future__ import annotations'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
188 | """ |
3dd81b827455
Extended the annotations checker to check for missing 'from __future__ import annotations'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
189 | return bool(self.__typingImports) |
9221
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
190 | |
8773
3dd81b827455
Extended the annotations checker to check for missing 'from __future__ import annotations'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
191 | def getTypingImports(self): |
3dd81b827455
Extended the annotations checker to check for missing 'from __future__ import annotations'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
192 | """ |
3dd81b827455
Extended the annotations checker to check for missing 'from __future__ import annotations'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
193 | Public method to get the list of typing imports. |
9221
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
194 | |
8773
3dd81b827455
Extended the annotations checker to check for missing 'from __future__ import annotations'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
195 | @return list of typing imports |
3dd81b827455
Extended the annotations checker to check for missing 'from __future__ import annotations'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
196 | @rtype list of str |
3dd81b827455
Extended the annotations checker to check for missing 'from __future__ import annotations'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
197 | """ |
3dd81b827455
Extended the annotations checker to check for missing 'from __future__ import annotations'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
198 | return self.__typingImports[:] |
10043
f1427d95cfde
Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9653
diff
changeset
|
199 | |
f1427d95cfde
Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9653
diff
changeset
|
200 | def hasSimplifiedTypes(self): |
f1427d95cfde
Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9653
diff
changeset
|
201 | """ |
f1427d95cfde
Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9653
diff
changeset
|
202 | Public method to check, if the analyzed code includes annotations with |
f1427d95cfde
Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9653
diff
changeset
|
203 | simplified types. |
f1427d95cfde
Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9653
diff
changeset
|
204 | |
f1427d95cfde
Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9653
diff
changeset
|
205 | @return flag indicating the presence of simplified types |
f1427d95cfde
Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9653
diff
changeset
|
206 | @rtype bool |
f1427d95cfde
Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9653
diff
changeset
|
207 | """ |
f1427d95cfde
Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9653
diff
changeset
|
208 | return bool(self.__simplifiedTypes) |
f1427d95cfde
Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9653
diff
changeset
|
209 | |
f1427d95cfde
Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9653
diff
changeset
|
210 | def getSimplifiedTypes(self): |
f1427d95cfde
Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9653
diff
changeset
|
211 | """ |
f1427d95cfde
Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9653
diff
changeset
|
212 | Public method Public method to get the list of detected simplified types. |
f1427d95cfde
Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9653
diff
changeset
|
213 | |
f1427d95cfde
Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9653
diff
changeset
|
214 | @return list of simplified types |
f1427d95cfde
Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9653
diff
changeset
|
215 | @rtype list of str |
f1427d95cfde
Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9653
diff
changeset
|
216 | """ |
f1427d95cfde
Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9653
diff
changeset
|
217 | return list(self.__simplifiedTypes) |