def build_class(name, basenames=(), doc=None): """create and initialize a astroid Class node""" node = Class(name, doc) for base in basenames: basenode = Name() basenode.name = base node.bases.append(basenode) basenode.parent = node return node
def build_class(name, basenames=(), doc=None): """create and initialize a astroid Class node""" node = Class(name, doc) for base in basenames: basenode = Name() basenode.name = base node.bases.append(basenode) basenode.parent = node return node
def _name_holds_generator( test: nodes.Name) -> tuple[bool, nodes.Call | None]: """Return whether `test` tests a name certain to hold a generator, or optionally a call that should be then tested to see if *it* returns only generators. """ assert isinstance(test, nodes.Name) emit = False maybe_generator_call = None lookup_result = test.frame(future=True).lookup(test.name) if not lookup_result: return emit, maybe_generator_call maybe_generator_assigned = ( isinstance(assign_name.parent.value, nodes.GeneratorExp) for assign_name in lookup_result[1] if isinstance(assign_name.parent, nodes.Assign)) first_item = next(maybe_generator_assigned, None) if first_item is not None: # Emit if this variable is certain to hold a generator if all(itertools.chain((first_item, ), maybe_generator_assigned)): emit = True # If this variable holds the result of a call, save it for next test elif (len(lookup_result[1]) == 1 and isinstance(lookup_result[1][0].parent, nodes.Assign) and isinstance(lookup_result[1][0].parent.value, nodes.Call)): maybe_generator_call = lookup_result[1][0].parent.value return emit, maybe_generator_call
def build_function(name, args=None, defaults=None, flag=0, doc=None): """create and initialize a astroid Function node""" args, defaults = args or [], defaults or [] # first argument is now a list of decorators func = Function(name, doc) func.args = argsnode = Arguments() argsnode.args = [] for arg in args: argsnode.args.append(Name()) argsnode.args[-1].name = arg argsnode.args[-1].parent = argsnode argsnode.defaults = [] for default in defaults: argsnode.defaults.append(const_factory(default)) argsnode.defaults[-1].parent = argsnode argsnode.kwarg = None argsnode.vararg = None argsnode.parent = func if args: register_arguments(func) return func