MCPcopy Index your code
hub / github.com/datacamp/pythonwhat / ObjectAccessParser

Class ObjectAccessParser

pythonwhat/parsing.py:408–447  ·  view source on GitHub ↗

Find object accesses A parser which inherits from the FunctionParser to find object accesses.

Source from the content-addressed store, hash-verified

406
407
408class ObjectAccessParser(FunctionParser):
409 """Find object accesses
410
411 A parser which inherits from the FunctionParser to find object accesses.
412 """
413
414 def __init__(self):
415 super().__init__()
416 self.out = []
417
418 def visit_Call(self, node):
419 for arg in node.args:
420 self.visit(arg)
421
422 for key in node.keywords:
423 self.visit(key.value)
424
425 def visit_List(self, node):
426 for el in node.elts:
427 self.visit(el)
428
429 def visit_Tuple(self, node):
430 for el in node.elts:
431 self.visit(el)
432
433 def visit_Attribute(self, node):
434 # if already a chain, prepend, else initialize self.current
435 self.gen_name = node.attr + "." + self.gen_name if self.gen_name else node.attr
436 self.raw_name = node.attr + "." + self.raw_name if self.raw_name else node.attr
437 self.visit(node.value)
438
439 def visit_Name(self, node):
440 # if name refers to an import, replace
441 prefix = self.mappings.get(node.id) or node.id
442
443 self.gen_name = prefix + "." + self.gen_name if self.gen_name else prefix
444 self.raw_name = node.id + "." + self.raw_name if self.raw_name else node.id
445
446 self.out.append(self.gen_name)
447 self.gen_name = self.raw_name = ""
448
449
450class ObjectAssignmentParser(Parser):

Callers 1

Calls

no outgoing calls

Tested by 1