plug in text scope tree to code slice visualization

This commit is contained in:
Ryan Fleury
2025-08-05 16:36:59 -07:00
parent 230f452edb
commit 01f60834e9
5 changed files with 30 additions and 6 deletions
+1
View File
@@ -207,6 +207,7 @@ rd_code_view_build(Arena *arena, RD_CodeViewState *cv, RD_CodeViewBuildFlags fla
code_slice_params.line_pins = push_array(scratch.arena, RD_CfgList, visible_line_count);
code_slice_params.line_vaddrs = push_array(scratch.arena, U64, visible_line_count);
code_slice_params.line_infos = push_array(scratch.arena, D_LineList, visible_line_count);
code_slice_params.text_info = text_info;
code_slice_params.font = code_font;
code_slice_params.font_size = code_font_size;
code_slice_params.tab_size = code_tab_size;
+22
View File
@@ -2113,6 +2113,15 @@ rd_code_slice(RD_CodeSliceParams *params, TxtPt *cursor, TxtPt *mark, S64 *prefe
result.base = text_container_sig;
}
//////////////////////////////
//- rjf: cursor -> scope info
//
TXT_ScopeNode *cursor_scope_node = &txt_scope_node_nil;
if(params->text_info != 0)
{
cursor_scope_node = txt_scope_node_from_info_pt(params->text_info, rd_regs()->cursor);
}
//////////////////////////////
//- rjf: produce fancy strings for each line
//
@@ -2170,6 +2179,19 @@ rd_code_slice(RD_CodeSliceParams *params, TxtPt *cursor, TxtPt *mark, S64 *prefe
token_color = mix_4f32(token_color, lookup_color, lookup_color_mix_t);
}
// rjf: scope endpoints enclosing cursor -> highlight
for(TXT_ScopeNode *scope_n = cursor_scope_node;
scope_n != &txt_scope_node_nil;
scope_n = txt_scope_node_from_info_num(params->text_info, scope_n->parent_num))
{
if(params->text_info->tokens.v[scope_n->token_idx_range.min].range.min == token->range.min ||
params->text_info->tokens.v[scope_n->token_idx_range.max].range.min == token->range.min)
{
token_color = pop_color;
break;
}
}
// rjf: push fancy string
dr_fstrs_push_new(scratch.arena, &fstrs, &fstr_params, token_string, .color = token_color);
}
+1
View File
@@ -105,6 +105,7 @@ struct RD_CodeSliceParams
U64 *line_vaddrs;
D_LineList *line_infos;
DI_KeyList relevant_dbgi_keys;
TXT_TextInfo *text_info;
// rjf: visual parameters
FNT_Tag font;