From 2b28efa3bfee317eef9428adecb670d9116f17a5 Mon Sep 17 00:00:00 2001 From: Allen Webster Date: Sat, 3 Aug 2019 14:18:40 -0700 Subject: [PATCH] Immediate Mode error highlighting -- everything is now in I.M. --- 4coder_default_framework.cpp | 2 ++ 4coder_default_framework_variables.cpp | 2 ++ 4coder_default_hooks.cpp | 25 +++++++++++++++++++++++++ 4coder_generated/command_metadata.h | 20 ++++++++++---------- 4coder_jump_sticky.cpp | 18 ++---------------- 5 files changed, 41 insertions(+), 26 deletions(-) diff --git a/4coder_default_framework.cpp b/4coder_default_framework.cpp index d2717c7d..0be5c521 100644 --- a/4coder_default_framework.cpp +++ b/4coder_default_framework.cpp @@ -387,6 +387,8 @@ default_4coder_initialize(Application_Links *app, char **command_line_files, i32 view_highlight_range = managed_variable_create_or_get_id(app, "DEFAULT.highlight" , 0); view_highlight_buffer = managed_variable_create_or_get_id(app, "DEFAULT.highlight_buf" , 0); + sticky_jump_marker_handle = managed_variable_create_or_get_id(app, "DEFAULT.sticky_jump_marker_handle", 0); + // open command line files Arena *scratch = context_get_arena(app); Temp_Memory temp = begin_temp(scratch); diff --git a/4coder_default_framework_variables.cpp b/4coder_default_framework_variables.cpp index 36208515..5dc24dd5 100644 --- a/4coder_default_framework_variables.cpp +++ b/4coder_default_framework_variables.cpp @@ -43,6 +43,8 @@ static Managed_Variable_ID view_ui_data = 0; static Managed_Variable_ID view_highlight_range = 0; static Managed_Variable_ID view_highlight_buffer = 0; +static Managed_Variable_ID sticky_jump_marker_handle = 0; + static u8 out_buffer_space[1024]; static u8 command_space[1024]; static char hot_directory_space[1024]; diff --git a/4coder_default_hooks.cpp b/4coder_default_hooks.cpp index 3d863b6a..902aede2 100644 --- a/4coder_default_hooks.cpp +++ b/4coder_default_hooks.cpp @@ -567,6 +567,31 @@ default_buffer_render_caller(Application_Links *app, Frame_Info frame_info, View colors, 0, color_count); } + // NOTE(allen): Error highlight + { + String_Const_u8 name = string_u8_litexpr("*compilation*"); + Buffer_ID compilation_buffer = get_buffer_by_name(app, name, AccessAll); + if (compilation_buffer != 0){ + Managed_Scope scopes[2]; + scopes[0] = buffer_get_managed_scope(app, compilation_buffer); + scopes[1] = buffer_get_managed_scope(app, buffer); + Managed_Scope scope = get_managed_scope_with_multiple_dependencies(app, scopes, ArrayCount(scopes)); + Managed_Object markers_object = 0; + if (managed_variable_get(app, scope, sticky_jump_marker_handle, &markers_object)){ + Temp_Memory temp = begin_temp(scratch); + i32 count = managed_object_get_item_count(app, markers_object); + Marker *markers = push_array(scratch, Marker, count); + managed_object_load_data(app, markers_object, 0, count, markers); + for (i32 i = 0; i < count; i += 1){ + i64 line_number = get_line_number_from_pos(app, buffer, markers[i].pos); + draw_line_highlight(app, text_layout_id, line_number, + Stag_Highlight_Junk); + } + end_temp(temp); + } + } + } + // NOTE(allen): Color parens if (do_matching_paren_highlight){ i64 pos = cursor_pos; diff --git a/4coder_generated/command_metadata.h b/4coder_generated/command_metadata.h index af59d5e7..dfbcec63 100644 --- a/4coder_generated/command_metadata.h +++ b/4coder_generated/command_metadata.h @@ -425,16 +425,16 @@ static Command_Metadata fcoder_metacmd_table[237] = { { PROC_LINKS(goto_first_jump_direct, 0), "goto_first_jump_direct", 22, "If a buffer containing jump locations has been locked in, goes to the first jump in the buffer.", 95, "w:\\4ed\\code\\4coder_jump_direct.cpp", 34, 88 }, { PROC_LINKS(newline_or_goto_position_direct, 0), "newline_or_goto_position_direct", 31, "If the buffer in the active view is writable, inserts a character, otherwise performs goto_jump_at_cursor.", 106, "w:\\4ed\\code\\4coder_jump_direct.cpp", 34, 103 }, { PROC_LINKS(newline_or_goto_position_same_panel_direct, 0), "newline_or_goto_position_same_panel_direct", 42, "If the buffer in the active view is writable, inserts a character, otherwise performs goto_jump_at_cursor_same_panel.", 117, "w:\\4ed\\code\\4coder_jump_direct.cpp", 34, 120 }, -{ PROC_LINKS(goto_jump_at_cursor_sticky, 0), "goto_jump_at_cursor_sticky", 26, "If the cursor is found to be on a jump location, parses the jump location and brings up the file and position in another view and changes the active panel to the view containing the jump.", 187, "w:\\4ed\\code\\4coder_jump_sticky.cpp", 34, 368 }, -{ PROC_LINKS(goto_jump_at_cursor_same_panel_sticky, 0), "goto_jump_at_cursor_same_panel_sticky", 37, "If the cursor is found to be on a jump location, parses the jump location and brings up the file and position in this view, losing the compilation output or jump list.", 167, "w:\\4ed\\code\\4coder_jump_sticky.cpp", 34, 395 }, -{ PROC_LINKS(goto_next_jump_sticky, 0), "goto_next_jump_sticky", 21, "If a buffer containing jump locations has been locked in, goes to the next jump in the buffer, skipping sub jump locations.", 123, "w:\\4ed\\code\\4coder_jump_sticky.cpp", 34, 494 }, -{ PROC_LINKS(goto_prev_jump_sticky, 0), "goto_prev_jump_sticky", 21, "If a buffer containing jump locations has been locked in, goes to the previous jump in the buffer, skipping sub jump locations.", 127, "w:\\4ed\\code\\4coder_jump_sticky.cpp", 34, 511 }, -{ PROC_LINKS(goto_next_jump_no_skips_sticky, 0), "goto_next_jump_no_skips_sticky", 30, "If a buffer containing jump locations has been locked in, goes to the next jump in the buffer, and does not skip sub jump locations.", 132, "w:\\4ed\\code\\4coder_jump_sticky.cpp", 34, 524 }, -{ PROC_LINKS(goto_prev_jump_no_skips_sticky, 0), "goto_prev_jump_no_skips_sticky", 30, "If a buffer containing jump locations has been locked in, goes to the previous jump in the buffer, and does not skip sub jump locations.", 136, "w:\\4ed\\code\\4coder_jump_sticky.cpp", 34, 541 }, -{ PROC_LINKS(goto_first_jump_sticky, 0), "goto_first_jump_sticky", 22, "If a buffer containing jump locations has been locked in, goes to the first jump in the buffer.", 95, "w:\\4ed\\code\\4coder_jump_sticky.cpp", 34, 555 }, -{ PROC_LINKS(goto_first_jump_same_panel_sticky, 0), "goto_first_jump_same_panel_sticky", 33, "If a buffer containing jump locations has been locked in, goes to the first jump in the buffer and views the buffer in the panel where the jump list was.", 153, "w:\\4ed\\code\\4coder_jump_sticky.cpp", 34, 572 }, -{ PROC_LINKS(newline_or_goto_position_sticky, 0), "newline_or_goto_position_sticky", 31, "If the buffer in the active view is writable, inserts a character, otherwise performs goto_jump_at_cursor.", 106, "w:\\4ed\\code\\4coder_jump_sticky.cpp", 34, 594 }, -{ PROC_LINKS(newline_or_goto_position_same_panel_sticky, 0), "newline_or_goto_position_same_panel_sticky", 42, "If the buffer in the active view is writable, inserts a character, otherwise performs goto_jump_at_cursor_same_panel.", 117, "w:\\4ed\\code\\4coder_jump_sticky.cpp", 34, 611 }, +{ PROC_LINKS(goto_jump_at_cursor_sticky, 0), "goto_jump_at_cursor_sticky", 26, "If the cursor is found to be on a jump location, parses the jump location and brings up the file and position in another view and changes the active panel to the view containing the jump.", 187, "w:\\4ed\\code\\4coder_jump_sticky.cpp", 34, 354 }, +{ PROC_LINKS(goto_jump_at_cursor_same_panel_sticky, 0), "goto_jump_at_cursor_same_panel_sticky", 37, "If the cursor is found to be on a jump location, parses the jump location and brings up the file and position in this view, losing the compilation output or jump list.", 167, "w:\\4ed\\code\\4coder_jump_sticky.cpp", 34, 381 }, +{ PROC_LINKS(goto_next_jump_sticky, 0), "goto_next_jump_sticky", 21, "If a buffer containing jump locations has been locked in, goes to the next jump in the buffer, skipping sub jump locations.", 123, "w:\\4ed\\code\\4coder_jump_sticky.cpp", 34, 480 }, +{ PROC_LINKS(goto_prev_jump_sticky, 0), "goto_prev_jump_sticky", 21, "If a buffer containing jump locations has been locked in, goes to the previous jump in the buffer, skipping sub jump locations.", 127, "w:\\4ed\\code\\4coder_jump_sticky.cpp", 34, 497 }, +{ PROC_LINKS(goto_next_jump_no_skips_sticky, 0), "goto_next_jump_no_skips_sticky", 30, "If a buffer containing jump locations has been locked in, goes to the next jump in the buffer, and does not skip sub jump locations.", 132, "w:\\4ed\\code\\4coder_jump_sticky.cpp", 34, 510 }, +{ PROC_LINKS(goto_prev_jump_no_skips_sticky, 0), "goto_prev_jump_no_skips_sticky", 30, "If a buffer containing jump locations has been locked in, goes to the previous jump in the buffer, and does not skip sub jump locations.", 136, "w:\\4ed\\code\\4coder_jump_sticky.cpp", 34, 527 }, +{ PROC_LINKS(goto_first_jump_sticky, 0), "goto_first_jump_sticky", 22, "If a buffer containing jump locations has been locked in, goes to the first jump in the buffer.", 95, "w:\\4ed\\code\\4coder_jump_sticky.cpp", 34, 541 }, +{ PROC_LINKS(goto_first_jump_same_panel_sticky, 0), "goto_first_jump_same_panel_sticky", 33, "If a buffer containing jump locations has been locked in, goes to the first jump in the buffer and views the buffer in the panel where the jump list was.", 153, "w:\\4ed\\code\\4coder_jump_sticky.cpp", 34, 558 }, +{ PROC_LINKS(newline_or_goto_position_sticky, 0), "newline_or_goto_position_sticky", 31, "If the buffer in the active view is writable, inserts a character, otherwise performs goto_jump_at_cursor.", 106, "w:\\4ed\\code\\4coder_jump_sticky.cpp", 34, 580 }, +{ PROC_LINKS(newline_or_goto_position_same_panel_sticky, 0), "newline_or_goto_position_same_panel_sticky", 42, "If the buffer in the active view is writable, inserts a character, otherwise performs goto_jump_at_cursor_same_panel.", 117, "w:\\4ed\\code\\4coder_jump_sticky.cpp", 34, 597 }, { PROC_LINKS(view_jump_list_with_lister, 0), "view_jump_list_with_lister", 26, "When executed on a buffer with jumps, creates a persistent lister for all the jumps", 83, "w:\\4ed\\code\\4coder_jump_lister.cpp", 34, 104 }, { PROC_LINKS(copy, 0), "copy", 4, "Copy the text in the range from the cursor to the mark onto the clipboard.", 74, "w:\\4ed\\code\\4coder_clipboard.cpp", 32, 19 }, { PROC_LINKS(cut, 0), "cut", 3, "Cut the text in the range from the cursor to the mark onto the clipboard.", 73, "w:\\4ed\\code\\4coder_clipboard.cpp", 32, 28 }, diff --git a/4coder_jump_sticky.cpp b/4coder_jump_sticky.cpp index 1a0062f6..02ae0bff 100644 --- a/4coder_jump_sticky.cpp +++ b/4coder_jump_sticky.cpp @@ -101,16 +101,12 @@ parse_buffer_to_jump_array(Application_Links *app, Arena *arena, Buffer_ID buffe return(result); } -static char sticky_jump_marker_handle_var[] = "DEFAULT.sticky_jump_marker_handle"; -static i32 sticky_jump_marker_handle_loc; - static void init_marker_list(Application_Links *app, Heap *heap, Buffer_ID buffer, Marker_List *list){ Arena *scratch = context_get_arena(app); Temp_Memory temp = begin_temp(scratch); String_Const_u8 buffer_name = push_buffer_base_name(app, scratch, buffer); - b32 is_compilation_buffer = string_match(buffer_name, string_u8_litexpr("*compilation*")); Sticky_Jump_Array jumps = parse_buffer_to_jump_array(app, scratch, buffer); Range_Array buffer_ranges = get_ranges_of_duplicate_keys(scratch, &jumps.jumps->jump_buffer_id, sizeof(*jumps.jumps), jumps.count); @@ -171,22 +167,13 @@ init_marker_list(Application_Links *app, Heap *heap, Buffer_ID buffer, Marker_Li Managed_Object marker_handle = alloc_buffer_markers_on_buffer(app, target_buffer_id, total_jump_count, &scope); managed_object_store_data(app, marker_handle, 0, total_jump_count, markers); - if (is_compilation_buffer){ - // TODO(allen): replace -#if 0 - Marker_Visual visual = create_marker_visual(app, marker_handle); - marker_visual_set_effect(app, visual, VisualType_LineHighlights, Stag_Highlight_Junk, 0, 0); -#endif - } - end_temp(marker_temp); Assert(managed_object_get_item_size(app, marker_handle) == sizeof(Marker)); Assert(managed_object_get_item_count(app, marker_handle) == total_jump_count); Assert(managed_object_get_type(app, marker_handle) == ManagedObjectType_Markers); - sticky_jump_marker_handle_loc = managed_variable_create_or_get_id(app, sticky_jump_marker_handle_var, 0); - managed_variable_set(app, scope, sticky_jump_marker_handle_loc, marker_handle); + managed_variable_set(app, scope, sticky_jump_marker_handle, marker_handle); } Managed_Object stored_jump_array = alloc_managed_memory_in_scope(app, scope_array[0], sizeof(Sticky_Jump_Stored), jumps.count); @@ -295,9 +282,8 @@ get_jump_from_list(Application_Links *app, Marker_List *list, i32 index, ID_Pos_ scope_array[1] = buffer_get_managed_scope(app, target_buffer_id); Managed_Scope scope = get_managed_scope_with_multiple_dependencies(app, scope_array, ArrayCount(scope_array)); - sticky_jump_marker_handle_loc = managed_variable_create_or_get_id(app, sticky_jump_marker_handle_var, 0); Managed_Object marker_array = 0; - if (managed_variable_get(app, scope, sticky_jump_marker_handle_loc, &marker_array)){ + if (managed_variable_get(app, scope, sticky_jump_marker_handle, &marker_array)){ Marker marker = {}; managed_object_load_data(app, marker_array, stored.index_into_marker_array, 1, &marker); location->buffer_id = target_buffer_id;