Coverage for /pythoncovmergedfiles/medio/medio/usr/local/lib/python3.8/site-packages/gast/ast3.py: 38%
209 statements
« prev ^ index » next coverage.py v7.3.0, created at 2023-09-06 06:04 +0000
« prev ^ index » next coverage.py v7.3.0, created at 2023-09-06 06:04 +0000
1from gast.astn import AstToGAst, GAstToAst
2import gast
3import ast
4import sys
7class Ast3ToGAst(AstToGAst):
8 if sys.version_info.minor < 10:
10 def visit_alias(self, node):
11 new_node = gast.alias(
12 self._visit(node.name),
13 self._visit(node.asname),
14 )
15 new_node.lineno = new_node.col_offset = None
16 new_node.end_lineno = new_node.end_col_offset = None
17 return new_node
19 if sys.version_info.minor < 9:
21 def visit_ExtSlice(self, node):
22 new_node = gast.Tuple(self._visit(node.dims), gast.Load())
23 return gast.copy_location(new_node, node)
25 def visit_Index(self, node):
26 return self._visit(node.value)
28 def visit_Assign(self, node):
29 new_node = gast.Assign(
30 self._visit(node.targets),
31 self._visit(node.value),
32 None, # type_comment
33 )
35 gast.copy_location(new_node, node)
36 new_node.end_lineno = new_node.end_col_offset = None
37 return new_node
39 if sys.version_info.minor < 8:
40 def visit_Module(self, node):
41 new_node = gast.Module(
42 self._visit(node.body),
43 [] # type_ignores
44 )
45 return new_node
47 def visit_Num(self, node):
48 new_node = gast.Constant(
49 node.n,
50 None,
51 )
52 return gast.copy_location(new_node, node)
54 def visit_Ellipsis(self, node):
55 new_node = gast.Constant(
56 Ellipsis,
57 None,
58 )
59 gast.copy_location(new_node, node)
60 new_node.end_lineno = new_node.end_col_offset = None
61 return new_node
63 def visit_Str(self, node):
64 new_node = gast.Constant(
65 node.s,
66 None,
67 )
68 return gast.copy_location(new_node, node)
70 def visit_Bytes(self, node):
71 new_node = gast.Constant(
72 node.s,
73 None,
74 )
75 return gast.copy_location(new_node, node)
77 def visit_FunctionDef(self, node):
78 new_node = gast.FunctionDef(
79 self._visit(node.name),
80 self._visit(node.args),
81 self._visit(node.body),
82 self._visit(node.decorator_list),
83 self._visit(node.returns),
84 None, # type_comment
85 )
86 return gast.copy_location(new_node, node)
88 def visit_AsyncFunctionDef(self, node):
89 new_node = gast.AsyncFunctionDef(
90 self._visit(node.name),
91 self._visit(node.args),
92 self._visit(node.body),
93 self._visit(node.decorator_list),
94 self._visit(node.returns),
95 None, # type_comment
96 )
97 return gast.copy_location(new_node, node)
99 def visit_For(self, node):
100 new_node = gast.For(
101 self._visit(node.target),
102 self._visit(node.iter),
103 self._visit(node.body),
104 self._visit(node.orelse),
105 None, # type_comment
106 )
107 return gast.copy_location(new_node, node)
109 def visit_AsyncFor(self, node):
110 new_node = gast.AsyncFor(
111 self._visit(node.target),
112 self._visit(node.iter),
113 self._visit(node.body),
114 self._visit(node.orelse),
115 None, # type_comment
116 )
117 return gast.copy_location(new_node, node)
119 def visit_With(self, node):
120 new_node = gast.With(
121 self._visit(node.items),
122 self._visit(node.body),
123 None, # type_comment
124 )
125 return gast.copy_location(new_node, node)
127 def visit_AsyncWith(self, node):
128 new_node = gast.AsyncWith(
129 self._visit(node.items),
130 self._visit(node.body),
131 None, # type_comment
132 )
133 return gast.copy_location(new_node, node)
135 def visit_Call(self, node):
136 if sys.version_info.minor < 5:
137 if node.starargs:
138 star = gast.Starred(self._visit(node.starargs),
139 gast.Load())
140 gast.copy_location(star, node)
141 starred = [star]
142 else:
143 starred = []
145 if node.kwargs:
146 kw = gast.keyword(None, self._visit(node.kwargs))
147 gast.copy_location(kw, node.kwargs)
148 kwargs = [kw]
149 else:
150 kwargs = []
151 else:
152 starred = kwargs = []
154 new_node = gast.Call(
155 self._visit(node.func),
156 self._visit(node.args) + starred,
157 self._visit(node.keywords) + kwargs,
158 )
159 return gast.copy_location(new_node, node)
161 def visit_NameConstant(self, node):
162 if node.value is None:
163 new_node = gast.Constant(None, None)
164 elif node.value is True:
165 new_node = gast.Constant(True, None)
166 elif node.value is False:
167 new_node = gast.Constant(False, None)
168 return gast.copy_location(new_node, node)
170 def visit_arguments(self, node):
171 new_node = gast.arguments(
172 self._visit(node.args),
173 [], # posonlyargs
174 self._visit(node.vararg),
175 self._visit(node.kwonlyargs),
176 self._visit(node.kw_defaults),
177 self._visit(node.kwarg),
178 self._visit(node.defaults),
179 )
180 return gast.copy_location(new_node, node)
182 def visit_Name(self, node):
183 new_node = gast.Name(
184 node.id, # micro-optimization here, don't call self._visit
185 self._visit(node.ctx),
186 None,
187 None,
188 )
189 return ast.copy_location(new_node, node)
191 def visit_arg(self, node):
192 if sys.version_info.minor < 8:
193 extra_arg = None
194 else:
195 extra_arg = self._visit(node.type_comment)
197 new_node = gast.Name(
198 node.arg, # micro-optimization here, don't call self._visit
199 gast.Param(),
200 self._visit(node.annotation),
201 extra_arg # type_comment
202 )
203 return ast.copy_location(new_node, node)
205 def visit_ExceptHandler(self, node):
206 if node.name:
207 new_node = gast.ExceptHandler(
208 self._visit(node.type),
209 gast.Name(node.name, gast.Store(), None, None),
210 self._visit(node.body))
211 return ast.copy_location(new_node, node)
212 else:
213 return self.generic_visit(node)
215 if sys.version_info.minor < 6:
217 def visit_comprehension(self, node):
218 new_node = gast.comprehension(
219 target=self._visit(node.target),
220 iter=self._visit(node.iter),
221 ifs=self._visit(node.ifs),
222 is_async=0,
223 )
224 return ast.copy_location(new_node, node)
227class GAstToAst3(GAstToAst):
228 if sys.version_info.minor < 10:
229 def visit_alias(self, node):
230 new_node = ast.alias(
231 self._visit(node.name),
232 self._visit(node.asname)
233 )
234 return new_node
236 if sys.version_info.minor < 9:
237 def visit_Subscript(self, node):
238 def adjust_slice(s):
239 if isinstance(s, ast.Slice):
240 return s
241 else:
242 return ast.Index(s)
243 if isinstance(node.slice, gast.Tuple):
244 if any(isinstance(elt, gast.slice) for elt in node.slice.elts):
245 new_slice = ast.ExtSlice(
246 [adjust_slice(x) for x in
247 self._visit(node.slice.elts)])
248 else:
249 value = ast.Tuple(self._visit(node.slice.elts), ast.Load())
250 ast.copy_location(value, node.slice)
251 new_slice = ast.Index(value)
252 else:
253 new_slice = adjust_slice(self._visit(node.slice))
254 ast.copy_location(new_slice, node.slice)
256 new_node = ast.Subscript(
257 self._visit(node.value),
258 new_slice,
259 self._visit(node.ctx),
260 )
261 return ast.copy_location(new_node, node)
263 def visit_Assign(self, node):
264 new_node = ast.Assign(
265 self._visit(node.targets),
266 self._visit(node.value),
267 )
269 return ast.copy_location(new_node, node)
271 if sys.version_info.minor < 8:
273 def visit_Module(self, node):
274 new_node = ast.Module(self._visit(node.body))
275 return new_node
277 def visit_Constant(self, node):
278 if node.value is None:
279 new_node = ast.NameConstant(node.value)
280 elif node.value is Ellipsis:
281 new_node = ast.Ellipsis()
282 elif isinstance(node.value, bool):
283 new_node = ast.NameConstant(node.value)
284 elif isinstance(node.value, (int, float, complex)):
285 new_node = ast.Num(node.value)
286 elif isinstance(node.value, str):
287 new_node = ast.Str(node.value)
288 else:
289 new_node = ast.Bytes(node.value)
290 return ast.copy_location(new_node, node)
292 def _make_arg(self, node):
293 if node is None:
294 return None
296 if sys.version_info.minor < 8:
297 extra_args = tuple()
298 else:
299 extra_args = self._visit(node.type_comment),
301 new_node = ast.arg(
302 self._visit(node.id),
303 self._visit(node.annotation),
304 *extra_args
305 )
306 return ast.copy_location(new_node, node)
308 def visit_Name(self, node):
309 new_node = ast.Name(
310 self._visit(node.id),
311 self._visit(node.ctx),
312 )
313 return ast.copy_location(new_node, node)
315 def visit_ExceptHandler(self, node):
316 if node.name:
317 new_node = ast.ExceptHandler(
318 self._visit(node.type),
319 node.name.id,
320 self._visit(node.body))
321 return ast.copy_location(new_node, node)
322 else:
323 return self.generic_visit(node)
325 if sys.version_info.minor < 5:
327 def visit_Call(self, node):
328 if node.args and isinstance(node.args[-1], gast.Starred):
329 args = node.args[:-1]
330 starargs = node.args[-1].value
331 else:
332 args = node.args
333 starargs = None
335 if node.keywords and node.keywords[-1].arg is None:
336 keywords = node.keywords[:-1]
337 kwargs = node.keywords[-1].value
338 else:
339 keywords = node.keywords
340 kwargs = None
342 new_node = ast.Call(
343 self._visit(node.func),
344 self._visit(args),
345 self._visit(keywords),
346 self._visit(starargs),
347 self._visit(kwargs),
348 )
349 return ast.copy_location(new_node, node)
351 def visit_ClassDef(self, node):
352 self.generic_visit(node)
353 new_node = ast.ClassDef(
354 name=self._visit(node.name),
355 bases=self._visit(node.bases),
356 keywords=self._visit(node.keywords),
357 body=self._visit(node.body),
358 decorator_list=self._visit(node.decorator_list),
359 starargs=None,
360 kwargs=None,
361 )
362 return ast.copy_location(new_node, node)
364 elif sys.version_info.minor < 8:
366 def visit_FunctionDef(self, node):
367 new_node = ast.FunctionDef(
368 self._visit(node.name),
369 self._visit(node.args),
370 self._visit(node.body),
371 self._visit(node.decorator_list),
372 self._visit(node.returns),
373 )
374 return ast.copy_location(new_node, node)
376 def visit_AsyncFunctionDef(self, node):
377 new_node = ast.AsyncFunctionDef(
378 self._visit(node.name),
379 self._visit(node.args),
380 self._visit(node.body),
381 self._visit(node.decorator_list),
382 self._visit(node.returns),
383 )
384 return ast.copy_location(new_node, node)
386 def visit_For(self, node):
387 new_node = ast.For(
388 self._visit(node.target),
389 self._visit(node.iter),
390 self._visit(node.body),
391 self._visit(node.orelse),
392 )
393 return ast.copy_location(new_node, node)
395 def visit_AsyncFor(self, node):
396 new_node = ast.AsyncFor(
397 self._visit(node.target),
398 self._visit(node.iter),
399 self._visit(node.body),
400 self._visit(node.orelse),
401 None, # type_comment
402 )
403 return ast.copy_location(new_node, node)
405 def visit_With(self, node):
406 new_node = ast.With(
407 self._visit(node.items),
408 self._visit(node.body),
409 )
410 return ast.copy_location(new_node, node)
412 def visit_AsyncWith(self, node):
413 new_node = ast.AsyncWith(
414 self._visit(node.items),
415 self._visit(node.body),
416 )
417 return ast.copy_location(new_node, node)
419 def visit_Call(self, node):
420 new_node = ast.Call(
421 self._visit(node.func),
422 self._visit(node.args),
423 self._visit(node.keywords),
424 )
425 return ast.copy_location(new_node, node)
427 def visit_arguments(self, node):
428 extra_args = [self._make_arg(node.vararg),
429 [self._make_arg(n) for n in node.kwonlyargs],
430 self._visit(node.kw_defaults),
431 self._make_arg(node.kwarg),
432 self._visit(node.defaults), ]
433 if sys.version_info.minor >= 8:
434 new_node = ast.arguments(
435 [self._make_arg(arg) for arg in node.posonlyargs],
436 [self._make_arg(n) for n in node.args],
437 *extra_args
438 )
439 else:
440 new_node = ast.arguments(
441 [self._make_arg(n) for n in node.args],
442 *extra_args
443 )
444 return new_node
447def ast_to_gast(node):
448 return Ast3ToGAst().visit(node)
451def gast_to_ast(node):
452 return GAstToAst3().visit(node)