def make_abstract_dist(req):<EOL>
if req.editable:<EOL><INDENT>return IsSDist(req)<EOL><DEDENT>elif req.link and req.link.is_wheel:<EOL><INDENT>return IsWheel(req)<EOL><DEDENT>else:<EOL><INDENT>return IsSDist(req)<EOL><DEDENT>
Factory to make an abstract dist object.

    Preconditions: Either an editable req with a source_dir, or satisfied_by or
    a wheel link, or a non-editable req with a source_dir.

    :return: A concrete DistAbstraction.