leekscript_analysis/
scope_extents.rs1use sipha::red::SyntaxNode;
6
7use leekscript_core::syntax::Kind;
8
9use super::scope::ScopeId;
10
11#[must_use]
15pub fn build_scope_extents(
16 root: &SyntaxNode,
17 scope_id_sequence: &[ScopeId],
18 source_len: usize,
19) -> Vec<(ScopeId, (u32, u32))> {
20 sipha_analysis::build_scope_extents(
21 root,
22 ScopeId(0),
23 scope_id_sequence,
24 source_len,
25 is_scope_creating,
26 )
27}
28
29fn is_scope_creating(node: &SyntaxNode) -> bool {
30 matches!(
31 node.kind_as::<Kind>(),
32 Some(
33 Kind::NodeBlock
34 | Kind::NodeFunctionDecl
35 | Kind::NodeClassDecl
36 | Kind::NodeConstructorDecl
37 | Kind::NodeWhileStmt
38 | Kind::NodeForStmt
39 | Kind::NodeForInStmt
40 | Kind::NodeDoWhileStmt
41 )
42 )
43}
44
45#[must_use]
48pub fn scope_at_offset(extents: &[(ScopeId, (u32, u32))], offset: u32) -> ScopeId {
49 sipha_analysis::scope_at_offset(extents, offset, ScopeId(0))
50}