use crate::db::parse;
use crate::file::InFile;
use rowan::TextSize;
use salsa::Database as Db;
use squawk_syntax::{SyntaxKind, SyntaxToken, ast::AstNode};
pub(crate) fn token_from_offset(db: &dyn Db, position: InFile<TextSize>) -> Option<SyntaxToken> {
let mut token = parse(db, position.file_id)
.tree()
.syntax()
.token_at_offset(position.value)
.right_biased()?;
if matches!(
token.kind(),
SyntaxKind::SEMICOLON
| SyntaxKind::COMMA
| SyntaxKind::DOT
| SyntaxKind::R_PAREN
| SyntaxKind::L_BRACK
| SyntaxKind::R_BRACK
| SyntaxKind::L_PAREN
) {
token = token.prev_token()?;
}
Some(token)
}