def METHOD_NAME(self, context: RuleContext) -> EvalResultType:
    """Get References and Aliases and allow linting.
    This rule covers a lot of potential cases of odd usages of
    references, see the code for each of the potential cases.
    Subclasses of this rule should override the
    `_lint_references_and_aliases` method.
    """
    assert context.segment.is_type("select_statement")
    select_info = get_select_statement_info(context.segment, context.dialect)
    if not select_info:
        return None
    # Work out if we have a parent select function
    parent_select = None
    for seg in reversed(context.parent_stack):
        if seg.is_type("select_statement"):
            parent_select = seg
            break
    # Pass them all to the function that does all the work.
    # NB: Subclasses of this rules should override the function below
    return self._lint_references_and_aliases(
        select_info.table_aliases,
        select_info.standalone_aliases,
        select_info.reference_buffer,
        select_info.col_aliases,
        select_info.using_cols,
        parent_select,
    )