arity 0.2.0

An LSP, formatter, and linter for R
Documentation
use crate::parser::lexer::{TokKind, Token};

pub(crate) fn skip_ws(tokens: &[Token], mut i: usize) -> usize {
    while matches!(tokens.get(i).map(|t| &t.kind), Some(TokKind::Whitespace)) {
        i += 1;
    }
    i
}

pub(crate) fn skip_ws_and_newlines(tokens: &[Token], mut i: usize) -> usize {
    while matches!(
        tokens.get(i).map(|t| &t.kind),
        Some(TokKind::Whitespace | TokKind::Newline)
    ) {
        i += 1;
    }
    i
}

pub(crate) fn consume_to_line_end(tokens: &[Token], mut i: usize) -> usize {
    while i < tokens.len() && !matches!(tokens[i].kind, TokKind::Newline) {
        i += 1;
    }
    if i < tokens.len() && matches!(tokens[i].kind, TokKind::Newline) {
        i += 1;
    }
    i
}

pub(crate) fn find_function_body_recovery(tokens: &[Token], start: usize) -> usize {
    for (i, tok) in tokens.iter().enumerate().skip(start) {
        if matches!(tok.kind, TokKind::Newline) {
            return i;
        }
    }
    tokens.len()
}