Clean up re-parse range identification logic

This commit is contained in:
Peter Slattery 2025-08-03 15:36:18 -07:00
parent 6d77862b78
commit a92e364e37
1 changed files with 30 additions and 51 deletions

View File

@ -802,13 +802,10 @@ tree_sitter_code_index_update_tick(Application_Links* app)
int query_count = 0; int query_count = 0;
Tree_Sitter_Query_Cursor queries[2]; Tree_Sitter_Query_Cursor queries[2];
Range_i64 edit_range;
if (would_reparse_entire_file) if (would_reparse_entire_file)
{ {
TSNode prev_sibling = {0}; TSNode prev_sibling = {0};
TSNode next_sibling = {0}; TSNode next_sibling = {0};
u32 child_count = ts_node_child_count(root); u32 child_count = ts_node_child_count(root);
for (u32 i = 0; i < child_count; i++) for (u32 i = 0; i < child_count; i++)
{ {
@ -826,57 +823,36 @@ tree_sitter_code_index_update_tick(Application_Links* app)
} }
} }
if (!ts_node_is_null(prev_sibling) && !ts_node_is_null(next_sibling)) if (ts_node_is_null(prev_sibling) && ts_node_is_null(next_sibling))
{ {
edit_range.min = (i64)ts_node_start_byte(prev_sibling); queries[query_count++] = tree_sitter_query_init(
edit_range.max = (i64)ts_node_end_byte(next_sibling);
query_count = 2;
queries[0] = tree_sitter_query_init(
app,
state.buffer_id,
state.language->queries.ptr[Tree_Sitter_Language_Query_Tags],
prev_sibling
);
queries[1] = tree_sitter_query_init(
app,
state.buffer_id,
state.language->queries.ptr[Tree_Sitter_Language_Query_Tags],
next_sibling
);
}
else if (!ts_node_is_null(prev_sibling))
{
edit_range.min = (i64)ts_node_start_byte(prev_sibling);
edit_range.max = (i64)ts_node_end_byte(prev_sibling);
queries[0] = tree_sitter_query_init(
app,
state.buffer_id,
state.language->queries.ptr[Tree_Sitter_Language_Query_Tags],
prev_sibling
);
}
else if (!ts_node_is_null(next_sibling))
{
edit_range.min = (i64)ts_node_start_byte(next_sibling);
edit_range.max = (i64)ts_node_end_byte(next_sibling);
queries[0] = tree_sitter_query_init(
app,
state.buffer_id,
state.language->queries.ptr[Tree_Sitter_Language_Query_Tags],
next_sibling
);
}
else
{
edit_range.min = (i64)ts_node_start_byte(root);
edit_range.max = (i64)ts_node_end_byte(root);
queries[0] = tree_sitter_query_init(
app, app,
state.buffer_id, state.buffer_id,
state.language->queries.ptr[Tree_Sitter_Language_Query_Tags], state.language->queries.ptr[Tree_Sitter_Language_Query_Tags],
root root
); );
} }
else
{
if (!ts_node_is_null(prev_sibling))
{
queries[query_count++] = tree_sitter_query_init(
app,
state.buffer_id,
state.language->queries.ptr[Tree_Sitter_Language_Query_Tags],
prev_sibling
);
}
if (!ts_node_is_null(next_sibling))
{
queries[query_count++] = tree_sitter_query_init(
app,
state.buffer_id,
state.language->queries.ptr[Tree_Sitter_Language_Query_Tags],
next_sibling
);
}
}
} }
else else
{ {
@ -887,18 +863,20 @@ tree_sitter_code_index_update_tick(Application_Links* app)
node_at = parent; node_at = parent;
parent = ts_node_parent(node_at); parent = ts_node_parent(node_at);
} }
edit_range.min = (i64)ts_node_start_byte(node_at); queries[query_count++] = tree_sitter_query_init(
edit_range.max = (i64)ts_node_end_byte(node_at);
queries[0] = tree_sitter_query_init(
app, app,
state.buffer_id, state.buffer_id,
state.language->queries.ptr[Tree_Sitter_Language_Query_Tags], state.language->queries.ptr[Tree_Sitter_Language_Query_Tags],
node_at node_at
); );
} }
Range_i64 edit_range;
edit_range.min = (i64)ts_node_start_byte(queries[0].first_node);
edit_range.max = (i64)ts_node_end_byte(queries[query_count-1].first_node);
tree_data->last_update_node_range = edit_range; // TODO(PS): TEMP - remove me once debugging is done tree_data->last_update_node_range = edit_range; // TODO(PS): TEMP - remove me once debugging is done
// Free Scope Delimiters & Notes that fall within old_range // Free Scope Delimiters that fall within old_range
Code_Index_Scope_Delim* delim = state.index->scope_delim_list.first; Code_Index_Scope_Delim* delim = state.index->scope_delim_list.first;
Code_Index_Scope_Delim* delim_before_range = 0; Code_Index_Scope_Delim* delim_before_range = 0;
Code_Index_Scope_Delim* after_range = 0; Code_Index_Scope_Delim* after_range = 0;
@ -924,6 +902,7 @@ tree_sitter_code_index_update_tick(Application_Links* app)
} }
state.last_delim = delim_before_range; state.last_delim = delim_before_range;
// Free Scope Notes that fall within old_range
Code_Index_Note* note = state.index->note_list.first; Code_Index_Note* note = state.index->note_list.first;
Code_Index_Note* prev = 0; Code_Index_Note* prev = 0;
Code_Index_Note* note_before_range = 0; Code_Index_Note* note_before_range = 0;