parameters: (name, node, package=None)
return_statement: return None
docstring: Returns the node which binds variable name, otherwise None.
          If optional argument package is supplied, only imports will
          be returned.
          See test cases for examples.
docstring_summary: Returns the node which binds variable name, otherwise None.
          If optional argument package is supplied, only imports will
          be returned.
          See test cases for examples.
docstring_tokens: Returns the node which binds variable name otherwise None . If optional argument package is supplied only imports will be returned . See test cases for examples .
function: def find_binding(name, node, package=None):
      """ Returns the node which binds variable name, otherwise None.
          If optional argument package is supplied, only imports will
          be returned.
          See test cases for examples."""
      for child in node.children:
          ret = None
          if child.type == syms.for_stmt:
              if _find(name, child.children[1]):
                  return child
              n = find_binding(name, make_suite(child.children[-1]), package)
              if n: ret = n
          elif child.type in (syms.if_stmt, syms.while_stmt):
              n = find_binding(name, make_suite(child.children[-1]), package)
              if n: ret = n
          elif child.type == syms.try_stmt:
              n = find_binding(name, make_suite(child.children[2]), package)
              if n:
                  ret = n
              else:
                  for i, kid in enumerate(child.children[3:]):
                      if kid.type == token.COLON and kid.value == ":":
                          # i+3 is the colon, i+4 is the suite
                          n = find_binding(name, make_suite(child.children[i+4]), package)
                          if n: ret = n
          elif child.type in _def_syms and child.children[1].value == name:
              ret = child
          elif _is_import_binding(child, name, package):
              ret = child
          elif child.type == syms.simple_stmt:
              ret = find_binding(name, child, package)
          elif child.type == syms.expr_stmt:
              if _find(name, child.children[0]):
                  ret = child
  
          if ret:
              if not package:
                  return ret
              if is_import(ret):
                  return ret
      return None
function_tokens: def find_binding ( name , node , package = None ) : for child in node . children : ret = None if child . type == syms . for_stmt : if _find ( name , child . children [ 1 ] ) : return child n = find_binding ( name , make_suite ( child . children [ - 1 ] ) , package ) if n : ret = n elif child . type in ( syms . if_stmt , syms . while_stmt ) : n = find_binding ( name , make_suite ( child . children [ - 1 ] ) , package ) if n : ret = n elif child . type == syms . try_stmt : n = find_binding ( name , make_suite ( child . children [ 2 ] ) , package ) if n : ret = n else : for i , kid in enumerate ( child . children [ 3 : ] ) : if kid . type == token . COLON and kid . value == ":" : # i+3 is the colon, i+4 is the suite n = find_binding ( name , make_suite ( child . children [ i + 4 ] ) , package ) if n : ret = n elif child . type in _def_syms and child . children [ 1 ] . value == name : ret = child elif _is_import_binding ( child , name , package ) : ret = child elif child . type == syms . simple_stmt : ret = find_binding ( name , child , package ) elif child . type == syms . expr_stmt : if _find ( name , child . children [ 0 ] ) : ret = child if ret : if not package : return ret if is_import ( ret ) : return ret return None