use crate::;
use Itertools;
/// Returns ancestors of the node at the offset, sorted by length. This should do the right thing at
/// an edge, e.g. when searching for expressions at `{ $0foo }` we will get the name reference
/// instead of the whole block, which we would get if we just did `find_token_at_offset(...).
/// flat_map(|t| t.parent().ancestors())`.
/// Finds a node of specific Ast type at offset. Note that this is slightly imprecise: if the cursor
/// is strictly between two nodes of the desired type, as in
///
/// ```mun
/// struct Foo {}|struct Bar;
/// ```
///
/// then the shorter node will be silently preferred.