Updated copyright for 2024.
10087
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
1
|
# -*- coding: utf-8 -*- |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
2
|
|
10439
|
3
|
# Copyright (c) 2023 - 2024 Detlev Offenbach <detlev@die-offenbachs.de> |
10087
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
4
|
# |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
5
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
6
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
7
|
Module implementing a node visitor for checking the use of deprecated 'typing' symbols. |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
8
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
9
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
10
|
# |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
11
|
# The visitors are adapted and extended variants of the ones found in |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
12
|
# flake8-pep585 v0.1.7 |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
13
|
# |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
14
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
15
|
import ast |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
16
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
17
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
18
|
class AnnotationsDeprecationsVisitor(ast.NodeVisitor): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
19
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
20
|
Class implementing a node visitor for checking the use of deprecated 'typing' |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
21
|
symbols. |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
22
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
23
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
24
|
NameReplacements = { |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
25
|
"Tuple": "tuple", |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
26
|
"List": "list", |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
27
|
"Dict": "dict", |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
28
|
"Set": "set", |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
29
|
"FrozenSet": "frozenset", |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
30
|
"Type": "type", |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
31
|
"Deque": "collections.deque", |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
32
|
"DefaultDict": "collections.defaultdict", |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
33
|
"OrderedDict": "collections.OrderedDict", |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
34
|
"Counter": "collections.Counter", |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
35
|
"ChainMap": "collections.ChainMap", |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
36
|
"Awaitable": "collections.abc.Awaitable", |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
37
|
"Coroutine": "collections.abc.Coroutine", |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
38
|
"AsyncIterable": "collections.abc.AsyncIterable", |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
39
|
"AsyncIterator": "collections.abc.AsyncIterator", |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
40
|
"AsyncGenerator": "collections.abc.AsyncGenerator", |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
41
|
"Iterable": "collections.abc.Iterable", |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
42
|
"Iterator": "collections.abc.Iterator", |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
43
|
"Generator": "collections.abc.Generator", |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
44
|
"Reversible": "collections.abc.Reversible", |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
45
|
"Container": "collections.abc.Container", |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
46
|
"Collection": "collections.abc.Collection", |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
47
|
"Callable": "collections.abc.Callable", |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
48
|
"AbstractSet": "collections.abc.Set", |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
49
|
"MutableSet": "collections.abc.MutableSet", |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
50
|
"Mapping": "collections.abc.Mapping", |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
51
|
"MutableMapping": "collections.abc.MutableMapping", |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
52
|
"Sequence": "collections.abc.Sequence", |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
53
|
"MutableSequence": "collections.abc.MutableSequence", |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
54
|
"ByteString": "collections.abc.ByteString", |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
55
|
"MappingView": "collections.abc.MappingView", |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
56
|
"KeysView": "collections.abc.KeysView", |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
57
|
"ItemsView": "collections.abc.ItemsView", |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
58
|
"ValuesView": "collections.abc.ValuesView", |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
59
|
"ContextManager": "contextlib.AbstractContextManager", |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
60
|
"AsyncContextManager": "contextlib.AbstractAsyncContextManager", |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
61
|
"Pattern": "re.Pattern", |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
62
|
"Match": "re.Match", |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
63
|
} |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
64
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
65
|
def __init__(self, exemptedList): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
66
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
67
|
Constructor |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
68
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
69
|
@param exemptedList list of typing symbols exempted from checking |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
70
|
@type list of str |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
71
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
72
|
self.__exemptedList = exemptedList[:] |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
73
|
self.__typingAliases = set() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
74
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
75
|
self.__issues = [] |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
76
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
77
|
def getIssues(self): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
78
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
79
|
Public method to get the list of detected issues. |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
80
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
81
|
@return list of detected issues consisting of a tuple of a reference to the node |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
82
|
and a tuple containing the used name and the suggested replacement |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
83
|
@rtype list of tuples of (ast.AST, (str, str)) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
84
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
85
|
return self.__issues |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
86
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
87
|
def __checkDeprecation(self, node, name): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
88
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
89
|
Private method to check, if the given name is deprecated. |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
90
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
91
|
@param node reference to the node |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
92
|
@type ast.ImportFrom, ast.Attribute |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
93
|
@param name name to be checked |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
94
|
@type str |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
95
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
96
|
if name not in self.__exemptedList: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
97
|
replacement = self.NameReplacements.get(name) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
98
|
if replacement is not None: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
99
|
self.__issues.append((node, (name, replacement))) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
100
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
101
|
def visit_ImportFrom(self, node): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
102
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
103
|
Public method to handle an ast.ImportFrom node. |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
104
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
105
|
@param node reference to the node to be handled |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
106
|
@type ast.ImportFrom |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
107
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
108
|
if node.module == "typing": |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
109
|
for alias in node.names: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
110
|
self.__checkDeprecation(node, alias.name) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
111
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
112
|
def visit_Import(self, node): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
113
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
114
|
Public method to handle an ast.Import node. |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
115
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
116
|
@param node reference to the node to be handled |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
117
|
@type ast.Import |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
118
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
119
|
for alias in node.names: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
120
|
if alias.name == "typing": |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
121
|
self.__typingAliases.add(alias.asname or "typing") |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
122
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
123
|
def visit_Attribute(self, node): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
124
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
125
|
Public method to handle an ast.Attribute node. |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
126
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
127
|
@param node reference to the node to be handled |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
128
|
@type ast.Attribute |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
129
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
130
|
if ( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
131
|
isinstance(node.value, ast.Name) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
132
|
and node.value.id in self.__typingAliases |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
133
|
and node.attr not in self.__exemptedList |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
134
|
): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
135
|
self.__checkDeprecation(node, node.attr) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
136
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
137
|
def visit_AnnAssign(self, node): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
138
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
139
|
Public method to handle an ast.AnnAssign node. |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
140
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
141
|
@param node reference to the node to be handled |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
142
|
@type ast.AnnAssign |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
143
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
144
|
if isinstance(node.annotation, ast.Name): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
145
|
self.__checkDeprecation(node, node.annotation.id) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
146
|
elif isinstance(node.annotation, ast.Subscript) and isinstance( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
147
|
node.annotation.value, ast.Name |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
148
|
): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
149
|
self.__checkDeprecation(node, node.annotation.value.id) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
150
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
151
|
def visit_FunctionDef(self, node): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
152
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
153
|
Public method to handle an ast.FunctionDef or ast.AsyncFunctionDef node. |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
154
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
155
|
@param node reference to the node to be handled |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
156
|
@type ast.FunctionDef or ast.AsyncFunctionDef |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
157
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
158
|
for arg in node.args.args + node.args.posonlyargs + node.args.kwonlyargs: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
159
|
if isinstance(arg.annotation, ast.Name): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
160
|
self.__checkDeprecation(arg, arg.annotation.id) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
161
|
elif isinstance(arg.annotation, ast.Subscript) and isinstance( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
162
|
arg.annotation.value, ast.Name |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
163
|
): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
164
|
self.__checkDeprecation(arg, arg.annotation.value.id) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
165
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
166
|
visit_AsyncFunctionDef = visit_FunctionDef |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
167
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
168
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
169
|
class AnnotationsFutureImportVisitor(ast.NodeVisitor): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
170
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
171
|
Class implementing a node visitor to dtermine, if the annotations __future__ |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
172
|
import is present. |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
173
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
174
|
This class is used to determine usage of annotations for Python 3.8. |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
175
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
176
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
177
|
def __init__(self): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
178
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
179
|
Constructor |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
180
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
181
|
self.__futureImport = False |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
182
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
183
|
def futureImportPresent(self): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
184
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
185
|
Public method to check, if a 'from __future__ import annotations' statement |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
186
|
exists. |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
187
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
188
|
@return flag indicating the existence of the import statement |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
189
|
@rtype bool |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
190
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
191
|
return self.__futureImport |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
192
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
193
|
def visit_ImportFrom(self, node): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
194
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
195
|
Public method to handle an ast.ImportFrom node. |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
196
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
197
|
@param node reference to the node to be handled |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
198
|
@type ast.ImportFrom |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
199
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
200
|
if node.module == "__future__" and "annotations" in { |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
201
|
alias.name for alias in node.names |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
202
|
}: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
203
|
self.__futureImport = True |