From b1a5644d6d500e2c0d5b4b5329d0dc0c47697674 Mon Sep 17 00:00:00 2001 From: Christopher Wells Date: Sun, 5 Nov 2023 00:26:28 -0700 Subject: [PATCH] Implement folding for for loops --- src/server/state.rs | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/src/server/state.rs b/src/server/state.rs index 81cdc8a..794c0c1 100644 --- a/src/server/state.rs +++ b/src/server/state.rs @@ -326,6 +326,33 @@ impl ServerState { } } + // Find for loops + let query = Query::new(get_quickbms_language(), r#"(for_statement) @for_statement"#).unwrap(); + + let mut query_cursor = QueryCursor::new(); + let text_callback = |node: tree_sitter::Node| format!("{:?}", node); // TODO: placeholder + + let matches = query_cursor.captures(&query, tree.root_node(), text_callback); + for (m, _) in matches { + let for_statement = m.captures[0].node; + let location = for_statement.range().to_location(&url); + + let for_body = for_statement.child_by_field_name("body"); + if let Some(for_body) = for_body { + let for_body_location = for_body.range().to_location(&url); + + // If statement body + folding_ranges.push(FoldingRange { + start_line: location.range.start.line, + start_character: None, + end_line: for_body_location.range.end.line, + end_character: None, + kind: Some(FoldingRangeKind::Region), + }); + } + } + + Some(folding_ranges) } }