Coverage for /pythoncovmergedfiles/medio/medio/usr/local/lib/python3.11/site-packages/gast/ast3.py: 27%
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 None, # type_comment
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 new_node = ast.Assign(
349 self._visit(node.targets),
350 self._visit(node.value),
351 )
353 return ast.copy_location(new_node, node)
355 if sys.version_info.minor < 8:
357 def visit_Module(self, node):
358 new_node = ast.Module(self._visit(node.body))
359 return new_node
361 def visit_Constant(self, node):
362 if node.value is None:
363 new_node = ast.NameConstant(node.value)
364 elif node.value is Ellipsis:
365 new_node = ast.Ellipsis()
366 elif isinstance(node.value, bool):
367 new_node = ast.NameConstant(node.value)
368 elif isinstance(node.value, (int, float, complex)):
369 new_node = ast.Num(node.value)
370 elif isinstance(node.value, str):
371 new_node = ast.Str(node.value)
372 else:
373 new_node = ast.Bytes(node.value)
374 return ast.copy_location(new_node, node)
376 def _make_arg(self, node):
377 if node is None:
378 return None
380 if sys.version_info.minor < 8:
381 extra_args = tuple()
382 else:
383 extra_args = self._visit(node.type_comment),
385 new_node = ast.arg(
386 self._visit(node.id),
387 self._visit(node.annotation),
388 *extra_args
389 )
390 return ast.copy_location(new_node, node)
392 def visit_Name(self, node):
393 new_node = ast.Name(
394 self._visit(node.id),
395 self._visit(node.ctx),
396 )
397 return ast.copy_location(new_node, node)
399 def visit_ExceptHandler(self, node):
400 if node.name:
401 new_node = ast.ExceptHandler(
402 self._visit(node.type),
403 node.name.id,
404 self._visit(node.body))
405 return ast.copy_location(new_node, node)
406 else:
407 return self.generic_visit(node)
409 if sys.version_info.minor < 5:
411 def visit_Call(self, node):
412 if node.args and isinstance(node.args[-1], gast.Starred):
413 args = node.args[:-1]
414 starargs = node.args[-1].value
415 else:
416 args = node.args
417 starargs = None
419 if node.keywords and node.keywords[-1].arg is None:
420 keywords = node.keywords[:-1]
421 kwargs = node.keywords[-1].value
422 else:
423 keywords = node.keywords
424 kwargs = None
426 new_node = ast.Call(
427 self._visit(node.func),
428 self._visit(args),
429 self._visit(keywords),
430 self._visit(starargs),
431 self._visit(kwargs),
432 )
433 return ast.copy_location(new_node, node)
435 def visit_ClassDef(self, node):
436 self.generic_visit(node)
437 new_node = ast.ClassDef(
438 name=self._visit(node.name),
439 bases=self._visit(node.bases),
440 keywords=self._visit(node.keywords),
441 body=self._visit(node.body),
442 decorator_list=self._visit(node.decorator_list),
443 starargs=None,
444 kwargs=None,
445 )
446 return ast.copy_location(new_node, node)
448 elif sys.version_info.minor < 8:
450 def visit_FunctionDef(self, node):
451 new_node = ast.FunctionDef(
452 self._visit(node.name),
453 self._visit(node.args),
454 self._visit(node.body),
455 self._visit(node.decorator_list),
456 self._visit(node.returns),
457 )
458 return ast.copy_location(new_node, node)
460 def visit_AsyncFunctionDef(self, node):
461 new_node = ast.AsyncFunctionDef(
462 self._visit(node.name),
463 self._visit(node.args),
464 self._visit(node.body),
465 self._visit(node.decorator_list),
466 self._visit(node.returns),
467 )
468 return ast.copy_location(new_node, node)
470 def visit_For(self, node):
471 new_node = ast.For(
472 self._visit(node.target),
473 self._visit(node.iter),
474 self._visit(node.body),
475 self._visit(node.orelse),
476 )
477 return ast.copy_location(new_node, node)
479 def visit_AsyncFor(self, node):
480 new_node = ast.AsyncFor(
481 self._visit(node.target),
482 self._visit(node.iter),
483 self._visit(node.body),
484 self._visit(node.orelse),
485 None, # type_comment
486 )
487 return ast.copy_location(new_node, node)
489 def visit_With(self, node):
490 new_node = ast.With(
491 self._visit(node.items),
492 self._visit(node.body),
493 )
494 return ast.copy_location(new_node, node)
496 def visit_AsyncWith(self, node):
497 new_node = ast.AsyncWith(
498 self._visit(node.items),
499 self._visit(node.body),
500 )
501 return ast.copy_location(new_node, node)
503 def visit_Call(self, node):
504 new_node = ast.Call(
505 self._visit(node.func),
506 self._visit(node.args),
507 self._visit(node.keywords),
508 )
509 return ast.copy_location(new_node, node)
510 if 5 <= sys.version_info.minor < 12:
511 def visit_ClassDef(self, node):
512 new_node = ast.ClassDef(
513 self._visit(node.name),
514 self._visit(node.bases),
515 self._visit(node.keywords),
516 self._visit(node.body),
517 self._visit(node.decorator_list),
518 )
519 return ast.copy_location(new_node, node)
521 if 8 <= sys.version_info.minor < 12:
522 def visit_FunctionDef(self, node):
523 new_node = ast.FunctionDef(
524 self._visit(node.name),
525 self._visit(node.args),
526 self._visit(node.body),
527 self._visit(node.decorator_list),
528 self._visit(node.returns),
529 self._visit(node.type_comment),
530 )
531 return ast.copy_location(new_node, node)
533 def visit_AsyncFunctionDef(self, node):
534 new_node = ast.AsyncFunctionDef(
535 self._visit(node.name),
536 self._visit(node.args),
537 self._visit(node.body),
538 self._visit(node.decorator_list),
539 self._visit(node.returns),
540 self._visit(node.type_comment),
541 )
542 return ast.copy_location(new_node, node)
546 def visit_arguments(self, node):
547 extra_args = [self._make_arg(node.vararg),
548 [self._make_arg(n) for n in node.kwonlyargs],
549 self._visit(node.kw_defaults),
550 self._make_arg(node.kwarg),
551 self._visit(node.defaults), ]
552 if sys.version_info.minor >= 8:
553 new_node = ast.arguments(
554 [self._make_arg(arg) for arg in node.posonlyargs],
555 [self._make_arg(n) for n in node.args],
556 *extra_args
557 )
558 else:
559 new_node = ast.arguments(
560 [self._make_arg(n) for n in node.args],
561 *extra_args
562 )
563 return new_node
566def ast_to_gast(node):
567 return Ast3ToGAst().visit(node)
570def gast_to_ast(node):
571 return GAstToAst3().visit(node)