docs: def names_from_exp(exp):
    "Return a list of AttrX and NameX from the expression."
    def match(exp):
      return isinstance(exp, (sqparse2.NameX, sqparse2.AttrX))
    paths = treepath.sub_slots(exp, match, match=True, recurse_into_matches=False)
    return [exp[path] for path in paths]