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

Mon, 22 Jan 2024 11:47:06 +0100

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Mon, 22 Jan 2024 11:47:06 +0100
branch
eric7
changeset 10520
dd95c3cbb35e
parent 10439
21c28b0f9e41
child 11090
f5f5f5803935
permissions
-rw-r--r--

Fixed a few issues in the 'Syntax Checker' and 'Code Style Checker' dialogs.

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

eric ide

mercurial