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;
+4 -4
View File
@@ -2098,7 +2098,7 @@ txt_scope_node_from_info_num(TXT_TextInfo *info, U64 num)
}
internal TXT_ScopeNode *
txt_scope_node_from_info_data_off(TXT_TextInfo *info, U64 off)
txt_scope_node_from_info_off(TXT_TextInfo *info, U64 off)
{
TXT_ScopeNode *result = &txt_scope_node_nil;
{
@@ -2106,7 +2106,7 @@ txt_scope_node_from_info_data_off(TXT_TextInfo *info, U64 off)
U64 opl = info->scope_pts.count;
for(;;)
{
U64 mid = (opl - first) / 2;
U64 mid = first + (opl - first) / 2;
if(mid >= info->scope_pts.count) { break; }
U64 mid_off = info->tokens.v[info->scope_pts.v[mid].token_idx].range.min;
if(off == mid_off || (first == mid && opl == mid+1))
@@ -2128,10 +2128,10 @@ txt_scope_node_from_info_data_off(TXT_TextInfo *info, U64 off)
}
internal TXT_ScopeNode *
txt_scope_node_from_info_data_pt(TXT_TextInfo *info, TxtPt pt)
txt_scope_node_from_info_pt(TXT_TextInfo *info, TxtPt pt)
{
U64 off = txt_off_from_info_pt(info, pt);
TXT_ScopeNode *result = txt_scope_node_from_info_data_off(info, off);
TXT_ScopeNode *result = txt_scope_node_from_info_off(info, off);
return result;
}
+2 -2
View File
@@ -322,8 +322,8 @@ internal String8 txt_string_from_info_data_txt_rng(TXT_TextInfo *info, String8 d
internal String8 txt_string_from_info_data_line_num(TXT_TextInfo *info, String8 data, S64 line_num);
internal TXT_LineTokensSlice txt_line_tokens_slice_from_info_data_line_range(Arena *arena, TXT_TextInfo *info, String8 data, Rng1S64 line_range);
internal TXT_ScopeNode *txt_scope_node_from_info_num(TXT_TextInfo *info, U64 num);
internal TXT_ScopeNode *txt_scope_node_from_info_data_off(TXT_TextInfo *info, U64 off);
internal TXT_ScopeNode *txt_scope_node_from_info_data_pt(TXT_TextInfo *info, TxtPt pt);
internal TXT_ScopeNode *txt_scope_node_from_info_off(TXT_TextInfo *info, U64 off);
internal TXT_ScopeNode *txt_scope_node_from_info_pt(TXT_TextInfo *info, TxtPt pt);
////////////////////////////////
//~ rjf: Parse Threads