Coverage for /pythoncovmergedfiles/medio/medio/usr/local/lib/python3.11/site-packages/gast/ast3.py: 28%
Shortcuts on this page
r m x toggle line displays
j k next/prev highlighted chunk
0 (zero) top of page
1 (one) first highlighted chunk
Shortcuts on this page
r m x toggle line displays
j k next/prev highlighted chunk
0 (zero) top of page
1 (one) first highlighted chunk
1from gast.astn import AstToGAst, GAstToAst
2import gast
3import ast
4import sys
7class Ast3ToGAst(AstToGAst):
8 if sys.version_info.minor == 12:
10 def visit_TypeVar(self, node):
11 new_node = gast.TypeVar(
12 self._visit(node.name),
13 self._visit(node.bound),
14 None
15 )
16 return gast.copy_location(new_node, node)
18 def visit_TypeVarTuple(self, node):
19 new_node = gast.TypeVarTuple(
20 self._visit(node.name),
21 None
22 )
23 return gast.copy_location(new_node, node)
25 def visit_ParamSpec(self, node):
26 new_node = gast.ParamSpec(
27 self._visit(node.name),
28 None
29 )
30 return gast.copy_location(new_node, node)
32 if sys.version_info.minor < 10:
34 def visit_alias(self, node):
35 new_node = gast.alias(
36 self._visit(node.name),
37 self._visit(node.asname),
38 )
39 new_node.lineno = new_node.col_offset = None
40 new_node.end_lineno = new_node.end_col_offset = None
41 return new_node
43 if sys.version_info.minor < 9:
45 def visit_ExtSlice(self, node):
46 new_node = gast.Tuple(self._visit(node.dims), gast.Load())
47 return gast.copy_location(new_node, node)
49 def visit_Index(self, node):
50 return self._visit(node.value)
52 def visit_Assign(self, node):
53 new_node = gast.Assign(
54 self._visit(node.targets),
55 self._visit(node.value),
56 self._visit(getattr(node, 'type_comment', None)),
57 )
59 gast.copy_location(new_node, node)
60 new_node.end_lineno = new_node.end_col_offset = None
61 return new_node
63 if sys.version_info.minor < 8:
64 def visit_Module(self, node):
65 new_node = gast.Module(
66 self._visit(node.body),
67 [] # type_ignores
68 )
69 return new_node
71 def visit_Num(self, node):
72 new_node = gast.Constant(
73 node.n,
74 None,
75 )
76 return gast.copy_location(new_node, node)
78 def visit_Ellipsis(self, node):
79 new_node = gast.Constant(
80 Ellipsis,
81 None,
82 )
83 gast.copy_location(new_node, node)
84 new_node.end_lineno = new_node.end_col_offset = None
85 return new_node
87 def visit_Str(self, node):
88 new_node = gast.Constant(
89 node.s,
90 None,
91 )
92 return gast.copy_location(new_node, node)
94 def visit_Bytes(self, node):
95 new_node = gast.Constant(
96 node.s,
97 None,
98 )
99 return gast.copy_location(new_node, node)
101 def visit_FunctionDef(self, node):
102 new_node = gast.FunctionDef(
103 self._visit(node.name),
104 self._visit(node.args),
105 self._visit(node.body),
106 self._visit(node.decorator_list),
107 self._visit(node.returns),
108 None, # type_comment
109 [], # type_params
110 )
111 return gast.copy_location(new_node, node)
113 def visit_AsyncFunctionDef(self, node):
114 new_node = gast.AsyncFunctionDef(
115 self._visit(node.name),
116 self._visit(node.args),
117 self._visit(node.body),
118 self._visit(node.decorator_list),
119 self._visit(node.returns),
120 None, # type_comment
121 [], # type_params
122 )
123 return gast.copy_location(new_node, node)
125 def visit_For(self, node):
126 new_node = gast.For(
127 self._visit(node.target),
128 self._visit(node.iter),
129 self._visit(node.body),
130 self._visit(node.orelse),
131 None, # type_comment
132 )
133 return gast.copy_location(new_node, node)
135 def visit_AsyncFor(self, node):
136 new_node = gast.AsyncFor(
137 self._visit(node.target),
138 self._visit(node.iter),
139 self._visit(node.body),
140 self._visit(node.orelse),
141 None, # type_comment
142 )
143 return gast.copy_location(new_node, node)
145 def visit_With(self, node):
146 new_node = gast.With(
147 self._visit(node.items),
148 self._visit(node.body),
149 None, # type_comment
150 )
151 return gast.copy_location(new_node, node)
153 def visit_AsyncWith(self, node):
154 new_node = gast.AsyncWith(
155 self._visit(node.items),
156 self._visit(node.body),
157 None, # type_comment
158 )
159 return gast.copy_location(new_node, node)
161 def visit_Call(self, node):
162 if sys.version_info.minor < 5:
163 if node.starargs:
164 star = gast.Starred(self._visit(node.starargs),
165 gast.Load())
166 gast.copy_location(star, node)
167 starred = [star]
168 else:
169 starred = []
171 if node.kwargs:
172 kw = gast.keyword(None, self._visit(node.kwargs))
173 gast.copy_location(kw, node.kwargs)
174 kwargs = [kw]
175 else:
176 kwargs = []
177 else:
178 starred = kwargs = []
180 new_node = gast.Call(
181 self._visit(node.func),
182 self._visit(node.args) + starred,
183 self._visit(node.keywords) + kwargs,
184 )
185 return gast.copy_location(new_node, node)
187 def visit_NameConstant(self, node):
188 if node.value is None:
189 new_node = gast.Constant(None, None)
190 elif node.value is True:
191 new_node = gast.Constant(True, None)
192 elif node.value is False:
193 new_node = gast.Constant(False, None)
194 return gast.copy_location(new_node, node)
196 def visit_arguments(self, node):
197 new_node = gast.arguments(
198 self._visit(node.args),
199 [], # posonlyargs
200 self._visit(node.vararg),
201 self._visit(node.kwonlyargs),
202 self._visit(node.kw_defaults),
203 self._visit(node.kwarg),
204 self._visit(node.defaults),
205 )
206 return gast.copy_location(new_node, node)
208 def visit_Name(self, node):
209 new_node = gast.Name(
210 node.id, # micro-optimization here, don't call self._visit
211 self._visit(node.ctx),
212 None,
213 None,
214 )
215 return ast.copy_location(new_node, node)
217 def visit_arg(self, node):
218 if sys.version_info.minor < 8:
219 extra_arg = None
220 else:
221 extra_arg = self._visit(node.type_comment)
223 new_node = gast.Name(
224 node.arg, # micro-optimization here, don't call self._visit
225 gast.Param(),
226 self._visit(node.annotation),
227 extra_arg # type_comment
228 )
229 return ast.copy_location(new_node, node)
231 def visit_ExceptHandler(self, node):
232 if node.name:
233 new_node = gast.ExceptHandler(
234 self._visit(node.type),
235 gast.Name(node.name, gast.Store(), None, None),
236 self._visit(node.body))
237 return ast.copy_location(new_node, node)
238 else:
239 return self.generic_visit(node)
241 if sys.version_info.minor < 6:
243 def visit_comprehension(self, node):
244 new_node = gast.comprehension(
245 target=self._visit(node.target),
246 iter=self._visit(node.iter),
247 ifs=self._visit(node.ifs),
248 is_async=0,
249 )
250 return ast.copy_location(new_node, node)
252 if 8 <= sys.version_info.minor < 12:
253 def visit_FunctionDef(self, node):
254 new_node = gast.FunctionDef(
255 self._visit(node.name),
256 self._visit(node.args),
257 self._visit(node.body),
258 self._visit(node.decorator_list),
259 self._visit(node.returns),
260 self._visit(node.type_comment),
261 [], # type_params
262 )
263 return gast.copy_location(new_node, node)
265 def visit_AsyncFunctionDef(self, node):
266 new_node = gast.AsyncFunctionDef(
267 self._visit(node.name),
268 self._visit(node.args),
269 self._visit(node.body),
270 self._visit(node.decorator_list),
271 self._visit(node.returns),
272 self._visit(node.type_comment),
273 [], # type_params
274 )
275 return gast.copy_location(new_node, node)
277 if sys.version_info.minor < 12:
279 def visit_ClassDef(self, node):
280 new_node = gast.ClassDef(
281 self._visit(node.name),
282 self._visit(node.bases),
283 self._visit(node.keywords),
284 self._visit(node.body),
285 self._visit(node.decorator_list),
286 [], # type_params
287 )
288 return gast.copy_location(new_node, node)
291class GAstToAst3(GAstToAst):
292 if sys.version_info.minor == 12:
293 def visit_TypeVar(self, node):
294 new_node = ast.TypeVar(
295 self._visit(node.name),
296 self._visit(node.bound)
297 )
298 return ast.copy_location(new_node, node)
300 def visit_TypeVarTuple(self, node):
301 new_node = ast.TypeVarTuple(
302 self._visit(node.name),
303 )
304 return ast.copy_location(new_node, node)
306 def visit_ParamSpec(self, node):
307 new_node = ast.ParamSpec(
308 self._visit(node.name),
309 )
310 return ast.copy_location(new_node, node)
312 if sys.version_info.minor < 10:
313 def visit_alias(self, node):
314 new_node = ast.alias(
315 self._visit(node.name),
316 self._visit(node.asname)
317 )
318 return new_node
320 if sys.version_info.minor < 9:
321 def visit_Subscript(self, node):
322 def adjust_slice(s):
323 if isinstance(s, ast.Slice):
324 return s
325 else:
326 return ast.Index(s)
327 if isinstance(node.slice, gast.Tuple):
328 if any(isinstance(elt, gast.slice) for elt in node.slice.elts):
329 new_slice = ast.ExtSlice(
330 [adjust_slice(x) for x in
331 self._visit(node.slice.elts)])
332 else:
333 value = ast.Tuple(self._visit(node.slice.elts), ast.Load())
334 ast.copy_location(value, node.slice)
335 new_slice = ast.Index(value)
336 else:
337 new_slice = adjust_slice(self._visit(node.slice))
338 ast.copy_location(new_slice, node.slice)
340 new_node = ast.Subscript(
341 self._visit(node.value),
342 new_slice,
343 self._visit(node.ctx),
344 )
345 return ast.copy_location(new_node, node)
347 def visit_Assign(self, node):
348 if sys.version_info >= (3, 8):
349 new_node = ast.Assign(
350 self._visit(node.targets),
351 self._visit(node.value),
352 type_comment=self._visit(node.type_comment),
353 )
354 else:
355 new_node = ast.Assign(
356 self._visit(node.targets),
357 self._visit(node.value),
358 )
360 return ast.copy_location(new_node, node)
362 if sys.version_info.minor < 8:
364 def visit_Module(self, node):
365 new_node = ast.Module(self._visit(node.body))
366 return new_node
368 def visit_Constant(self, node):
369 if node.value is None:
370 new_node = ast.NameConstant(node.value)
371 elif node.value is Ellipsis:
372 new_node = ast.Ellipsis()
373 elif isinstance(node.value, bool):
374 new_node = ast.NameConstant(node.value)
375 elif isinstance(node.value, (int, float, complex)):
376 new_node = ast.Num(node.value)
377 elif isinstance(node.value, str):
378 new_node = ast.Str(node.value)
379 else:
380 new_node = ast.Bytes(node.value)
381 return ast.copy_location(new_node, node)
383 def _make_arg(self, node):
384 if node is None:
385 return None
387 if sys.version_info.minor < 8:
388 extra_args = tuple()
389 else:
390 extra_args = self._visit(node.type_comment),
392 new_node = ast.arg(
393 self._visit(node.id),
394 self._visit(node.annotation),
395 *extra_args
396 )
397 return ast.copy_location(new_node, node)
399 def visit_Name(self, node):
400 new_node = ast.Name(
401 self._visit(node.id),
402 self._visit(node.ctx),
403 )
404 return ast.copy_location(new_node, node)
406 def visit_ExceptHandler(self, node):
407 if node.name:
408 new_node = ast.ExceptHandler(
409 self._visit(node.type),
410 node.name.id,
411 self._visit(node.body))
412 return ast.copy_location(new_node, node)
413 else:
414 return self.generic_visit(node)
416 if sys.version_info.minor < 5:
418 def visit_Call(self, node):
419 if node.args and isinstance(node.args[-1], gast.Starred):
420 args = node.args[:-1]
421 starargs = node.args[-1].value
422 else:
423 args = node.args
424 starargs = None
426 if node.keywords and node.keywords[-1].arg is None:
427 keywords = node.keywords[:-1]
428 kwargs = node.keywords[-1].value
429 else:
430 keywords = node.keywords
431 kwargs = None
433 new_node = ast.Call(
434 self._visit(node.func),
435 self._visit(args),
436 self._visit(keywords),
437 self._visit(starargs),
438 self._visit(kwargs),
439 )
440 return ast.copy_location(new_node, node)
442 def visit_ClassDef(self, node):
443 self.generic_visit(node)
444 new_node = ast.ClassDef(
445 name=self._visit(node.name),
446 bases=self._visit(node.bases),
447 keywords=self._visit(node.keywords),
448 body=self._visit(node.body),
449 decorator_list=self._visit(node.decorator_list),
450 starargs=None,
451 kwargs=None,
452 )
453 return ast.copy_location(new_node, node)
455 elif sys.version_info.minor < 8:
457 def visit_FunctionDef(self, node):
458 new_node = ast.FunctionDef(
459 self._visit(node.name),
460 self._visit(node.args),
461 self._visit(node.body),
462 self._visit(node.decorator_list),
463 self._visit(node.returns),
464 )
465 return ast.copy_location(new_node, node)
467 def visit_AsyncFunctionDef(self, node):
468 new_node = ast.AsyncFunctionDef(
469 self._visit(node.name),
470 self._visit(node.args),
471 self._visit(node.body),
472 self._visit(node.decorator_list),
473 self._visit(node.returns),
474 )
475 return ast.copy_location(new_node, node)
477 def visit_For(self, node):
478 new_node = ast.For(
479 self._visit(node.target),
480 self._visit(node.iter),
481 self._visit(node.body),
482 self._visit(node.orelse),
483 )
484 return ast.copy_location(new_node, node)
486 def visit_AsyncFor(self, node):
487 new_node = ast.AsyncFor(
488 self._visit(node.target),
489 self._visit(node.iter),
490 self._visit(node.body),
491 self._visit(node.orelse),
492 None, # type_comment
493 )
494 return ast.copy_location(new_node, node)
496 def visit_With(self, node):
497 new_node = ast.With(
498 self._visit(node.items),
499 self._visit(node.body),
500 )
501 return ast.copy_location(new_node, node)
503 def visit_AsyncWith(self, node):
504 new_node = ast.AsyncWith(
505 self._visit(node.items),
506 self._visit(node.body),
507 )
508 return ast.copy_location(new_node, node)
510 def visit_Call(self, node):
511 new_node = ast.Call(
512 self._visit(node.func),
513 self._visit(node.args),
514 self._visit(node.keywords),
515 )
516 return ast.copy_location(new_node, node)
517 if 5 <= sys.version_info.minor < 12:
518 def visit_ClassDef(self, node):
519 new_node = ast.ClassDef(
520 self._visit(node.name),
521 self._visit(node.bases),
522 self._visit(node.keywords),
523 self._visit(node.body),
524 self._visit(node.decorator_list),
525 )
526 return ast.copy_location(new_node, node)
528 if 8 <= sys.version_info.minor < 12:
529 def visit_FunctionDef(self, node):
530 new_node = ast.FunctionDef(
531 self._visit(node.name),
532 self._visit(node.args),
533 self._visit(node.body),
534 self._visit(node.decorator_list),
535 self._visit(node.returns),
536 self._visit(node.type_comment),
537 )
538 return ast.copy_location(new_node, node)
540 def visit_AsyncFunctionDef(self, node):
541 new_node = ast.AsyncFunctionDef(
542 self._visit(node.name),
543 self._visit(node.args),
544 self._visit(node.body),
545 self._visit(node.decorator_list),
546 self._visit(node.returns),
547 self._visit(node.type_comment),
548 )
549 return ast.copy_location(new_node, node)
553 def visit_arguments(self, node):
554 extra_args = [self._make_arg(node.vararg),
555 [self._make_arg(n) for n in node.kwonlyargs],
556 self._visit(node.kw_defaults),
557 self._make_arg(node.kwarg),
558 self._visit(node.defaults), ]
559 if sys.version_info.minor >= 8:
560 new_node = ast.arguments(
561 [self._make_arg(arg) for arg in node.posonlyargs],
562 [self._make_arg(n) for n in node.args],
563 *extra_args
564 )
565 else:
566 new_node = ast.arguments(
567 [self._make_arg(n) for n in node.args],
568 *extra_args
569 )
570 return new_node
573def ast_to_gast(node):
574 return Ast3ToGAst().visit(node)
577def gast_to_ast(node):
578 return GAstToAst3().visit(node)