custom_render_buffer only requests the token array if it's being used for a feature the user actually requested since requesting the tokens needs to take the lock on the token array.

This commit is contained in:
Peter Slattery 2025-07-14 11:20:41 -07:00
parent 84b1b15fbb
commit ae7440aa0b
2 changed files with 20 additions and 19 deletions

View File

@ -281,20 +281,16 @@ function void custom_render_buffer(
f32 mark_thickness = (f32)def_get_config_u64(app, vars_save_string_lit("mark_thickness")); f32 mark_thickness = (f32)def_get_config_u64(app, vars_save_string_lit("mark_thickness"));
// NOTE(allen): Token colorizing // NOTE(allen): Token colorizing
Managed_Scope buffer_scope = buffer_get_managed_scope(app, buffer); Token_Array token_array;
Buffer_Tree_Sitter_Data* tree_data = scope_attachment(app, buffer_scope, buffer_tree_sitter_data_id, Buffer_Tree_Sitter_Data);
TSTree* tree = tree_sitter_buffer_get_tree_copy(tree_data);
Token_Array token_array = get_token_array_from_buffer(app, buffer);
paint_text_color_fcolor(app, text_layout_id, visible_range, fcolor_id(defcolor_text_default)); // will get overridden by lang-specific token coloring below paint_text_color_fcolor(app, text_layout_id, visible_range, fcolor_id(defcolor_text_default)); // will get overridden by lang-specific token coloring below
if (token_array.tokens != 0 && tree)
{
if (use_tree_sitter_token_coloring) if (use_tree_sitter_token_coloring)
{ {
draw_tree_sitter_node_colors(app, text_layout_id, buffer); draw_tree_sitter_node_colors(app, text_layout_id, buffer);
} }
else else
{ {
token_array = get_token_array_from_buffer(app, buffer);
if (token_array.tokens != 0) {
draw_cpp_token_colors(app, text_layout_id, &token_array); draw_cpp_token_colors(app, text_layout_id, &token_array);
} }
} }
@ -359,11 +355,15 @@ function void custom_render_buffer(
// NOTE(allen): Whitespace highlight // NOTE(allen): Whitespace highlight
b64 show_whitespace = false; b64 show_whitespace = false;
view_get_setting(app, view_id, ViewSetting_ShowWhitespace, &show_whitespace); view_get_setting(app, view_id, ViewSetting_ShowWhitespace, &show_whitespace);
if (show_whitespace){ if (show_whitespace)
if (token_array.tokens == 0){ {
if (token_array.tokens == 0) token_array = get_token_array_from_buffer(app, buffer);
if (token_array.tokens == 0)
{
draw_whitespace_highlight(app, buffer, text_layout_id, cursor_roundness); draw_whitespace_highlight(app, buffer, text_layout_id, cursor_roundness);
} }
else{ else
{
draw_whitespace_highlight(app, text_layout_id, &token_array, cursor_roundness); draw_whitespace_highlight(app, text_layout_id, &token_array, cursor_roundness);
} }
} }

View File

@ -577,6 +577,7 @@ function void
draw_tree_sitter_node_colors(Application_Links* app, Text_Layout_ID text_layout_id, Buffer_ID buffer_id) draw_tree_sitter_node_colors(Application_Links* app, Text_Layout_ID text_layout_id, Buffer_ID buffer_id)
{ {
Tree_Sitter_Language_Definition* lang = tree_sitter_language_for_buffer(app, buffer_id); Tree_Sitter_Language_Definition* lang = tree_sitter_language_for_buffer(app, buffer_id);
if (!lang) return;
TSQuery* query = lang->queries.ptr[Tree_Sitter_Language_Query_Highlights]; TSQuery* query = lang->queries.ptr[Tree_Sitter_Language_Query_Highlights];
Range_i64 visible_range = text_layout_get_visible_range(app, text_layout_id); Range_i64 visible_range = text_layout_get_visible_range(app, text_layout_id);