use sipha::red::SyntaxNode;
use leekscript_core::syntax::Kind;
use super::scope::ScopeId;
#[must_use]
pub fn build_scope_extents(
root: &SyntaxNode,
scope_id_sequence: &[ScopeId],
source_len: usize,
) -> Vec<(ScopeId, (u32, u32))> {
sipha_analysis::build_scope_extents(
root,
ScopeId(0),
scope_id_sequence,
source_len,
is_scope_creating,
)
}
fn is_scope_creating(node: &SyntaxNode) -> bool {
matches!(
node.kind_as::<Kind>(),
Some(
Kind::NodeBlock
| Kind::NodeFunctionDecl
| Kind::NodeClassDecl
| Kind::NodeConstructorDecl
| Kind::NodeWhileStmt
| Kind::NodeForStmt
| Kind::NodeForInStmt
| Kind::NodeDoWhileStmt
)
)
}
#[must_use]
pub fn scope_at_offset(extents: &[(ScopeId, (u32, u32))], offset: u32) -> ScopeId {
sipha_analysis::scope_at_offset(extents, offset, ScopeId(0))
}