pub fn completion<'a, 'ast, T>(
    extract: T,
    source_span: Span<BytePos>,
    expr: &'a SpannedExpr<'ast, Symbol>,
    pos: BytePos
) -> Result<T::Output, ()>
where T: Extract<'a>,