views autocompletion; view doc coverage

This commit is contained in:
Ryan Fleury committed 2026-04-22 19:57:08 -07:00
1 parent 05d76b416a
commit 3c214cfbb5
7 files changed
+216 -105

No files matched your search

+40 -40
View File
@@ -428,46 +428,46 @@ RD_VocabInfo rd_vocab_info_table[360] =
RD_NameSchemaInfo rd_name_schema_info_table[40] = RD_NameSchemaInfo rd_name_schema_info_table[40] =
{ {
{str8_lit_comp("user"), str8_lit_comp("@expand_commands(edit_user_theme) x:\n{\n //- rjf: animations\n @display_name('Animations') @description(\"Enables animations.\")\n @default(1) 'animations': bool,\n @display_name('Scrolling Animations') @description(\"Enables scrolling animations.\")\n @expand_if(\"$.animations\") @default(1) 'scrolling_animations': bool,\n @display_name('Tooltip Animations') @description(\"Enables tooltip animations.\")\n @expand_if(\"$.animations\") @default(1) 'tooltip_animations': bool,\n @display_name('Menu Animations') @description(\"Enables menu animations.\")\n @expand_if(\"$.animations\") @default(1) 'menu_animations': bool,\n\n //- rjf: fonts\n @display_name('UI Font') @description(\"The name of, or path to, the font used when displaying non-code UI elements.\")\n @default('') 'main_font': string,\n @display_name('Code Font') @description(\"The name of, or path to, the font used when displaying code.\")\n @default('') 'code_font': string,\n\n //- rjf: theme\n @default(\"Default (Dark)\") @display_name('User Theme')\n @description(\"The user's theme, which describes all colors used throughout the UI.\")\n 'theme': string,\n @no_expand @display_name('User Theme')\n 'theme_colors': set,\n\n //- rjf: autocompletion\n @display_name('Autocompletion Lister') @description(\"Enables the autocompletion lister while typing expressions.\") @default(1)\n 'autocompletion_lister': bool,\n @display_name('View Call Argument Helper') @description(\"Enables the view call argument helper, which shows view arguments and documentation, while typing expressions.\") @default(1)\n 'view_call_argument_helper': bool,\n\n //- rjf: scope decorations\n @default(1) @display_name('Cursor Scope Lines') @description(\"Controls whether or not scopes containing the cursor in text views are drawn.\")\n 'cursor_scope_lines': bool,\n\n //- rjf: cursor decorations\n @default(1) @display_name('Cursor Trail') @description(\"Controls whether or not a movement trail of the cursor is drawn.\")\n 'cursor_trail': bool,\n\n //- rjf: thread & breakpoint decorations\n @default(1) @display_name('Thread Lines') @description(\"Controls whether or not a long horizontal line is drawn before the next line or instruction that the selected thread will execute in source and disassembly views.\")\n 'thread_lines': bool,\n @default(1) @display_name('Thread Glow') @description(\"Controls whether or not a glowing effect is drawn on the selected thread in source and disassembly views.\")\n 'thread_glow': bool,\n @default(1) @display_name('Breakpoint Lines') @description(\"Controls whether or not a long horizontal line is drawn before the line or instruction at which a breakpoint is placed, in source and disassembly views.\")\n 'breakpoint_lines': bool,\n @default(1) @display_name('Breakpoint Glow') @description(\"Controls whether or not a glowing effect is drawn on breakpoints in source and disassembly views.\")\n 'breakpoint_glow': bool,\n\n //- rjf: occluding background settings\n @default(0) @display_name('Opaque Backgrounds') @description(\"Controls whether or not all floating background colors are forced to be fully opaque.\")\n 'opaque_backgrounds': bool,\n @default(1) @display_name('Background Blur') @description(\"Controls whether or not occluded regions behind floating elements are blurred.\")\n 'background_blur': bool,\n\n //- rjf: appearance settings\n @default(1) @display_name('Drop Shadows') @description(\"Controls whether or not drop shadows are drawn.\")\n 'drop_shadows': bool,\n @default(1.f) @display_name('Rounded Corner Amount') @description(\"Controls the degree to which UI corners are rounded.\")\n 'rounded_corner_amount': @range[0, 1] f32,\n\n //- rjf: code formatting settings\n @default(2) @display_name('User Tab Width') 'tab_width': @range[1, 32] u64,\n\n //- rjf: windows style menu bar\n @default(1) @display_name('Focus Menu Bar With Alt') @description(\"Mimics standard Windows behavior of focusing the menu bar using the Alt key.\")\n 'focus_menu_bar_with_alt': bool,\n\n //- rjf: native filesystem dialogues\n @default(0) @display_name('Use Native File System Dialog') @description(\"Uses the operating system's file system dialog box, rather than the debugger's built-in UI.\")\n 'use_native_file_system_dialog': bool,\n}\n")}, {str8_lit_comp("user"), 0, str8_lit_comp("@expand_commands(edit_user_theme) x:\n{\n //- rjf: animations\n @display_name('Animations') @description(\"Enables animations.\")\n @default(1) 'animations': bool,\n @display_name('Scrolling Animations') @description(\"Enables scrolling animations.\")\n @expand_if(\"$.animations\") @default(1) 'scrolling_animations': bool,\n @display_name('Tooltip Animations') @description(\"Enables tooltip animations.\")\n @expand_if(\"$.animations\") @default(1) 'tooltip_animations': bool,\n @display_name('Menu Animations') @description(\"Enables menu animations.\")\n @expand_if(\"$.animations\") @default(1) 'menu_animations': bool,\n\n //- rjf: fonts\n @display_name('UI Font') @description(\"The name of, or path to, the font used when displaying non-code UI elements.\")\n @default('') 'main_font': string,\n @display_name('Code Font') @description(\"The name of, or path to, the font used when displaying code.\")\n @default('') 'code_font': string,\n\n //- rjf: theme\n @default(\"Default (Dark)\") @display_name('User Theme')\n @description(\"The user's theme, which describes all colors used throughout the UI.\")\n 'theme': string,\n @no_expand @display_name('User Theme')\n 'theme_colors': set,\n\n //- rjf: autocompletion\n @display_name('Autocompletion Lister') @description(\"Enables the autocompletion lister while typing expressions.\") @default(1)\n 'autocompletion_lister': bool,\n @display_name('View Call Argument Helper') @description(\"Enables the view call argument helper, which shows view arguments and documentation, while typing expressions.\") @default(1)\n 'view_call_argument_helper': bool,\n\n //- rjf: scope decorations\n @default(1) @display_name('Cursor Scope Lines') @description(\"Controls whether or not scopes containing the cursor in text views are drawn.\")\n 'cursor_scope_lines': bool,\n\n //- rjf: cursor decorations\n @default(1) @display_name('Cursor Trail') @description(\"Controls whether or not a movement trail of the cursor is drawn.\")\n 'cursor_trail': bool,\n\n //- rjf: thread & breakpoint decorations\n @default(1) @display_name('Thread Lines') @description(\"Controls whether or not a long horizontal line is drawn before the next line or instruction that the selected thread will execute in source and disassembly views.\")\n 'thread_lines': bool,\n @default(1) @display_name('Thread Glow') @description(\"Controls whether or not a glowing effect is drawn on the selected thread in source and disassembly views.\")\n 'thread_glow': bool,\n @default(1) @display_name('Breakpoint Lines') @description(\"Controls whether or not a long horizontal line is drawn before the line or instruction at which a breakpoint is placed, in source and disassembly views.\")\n 'breakpoint_lines': bool,\n @default(1) @display_name('Breakpoint Glow') @description(\"Controls whether or not a glowing effect is drawn on breakpoints in source and disassembly views.\")\n 'breakpoint_glow': bool,\n\n //- rjf: occluding background settings\n @default(0) @display_name('Opaque Backgrounds') @description(\"Controls whether or not all floating background colors are forced to be fully opaque.\")\n 'opaque_backgrounds': bool,\n @default(1) @display_name('Background Blur') @description(\"Controls whether or not occluded regions behind floating elements are blurred.\")\n 'background_blur': bool,\n\n //- rjf: appearance settings\n @default(1) @display_name('Drop Shadows') @description(\"Controls whether or not drop shadows are drawn.\")\n 'drop_shadows': bool,\n @default(1.f) @display_name('Rounded Corner Amount') @description(\"Controls the degree to which UI corners are rounded.\")\n 'rounded_corner_amount': @range[0, 1] f32,\n\n //- rjf: code formatting settings\n @default(2) @display_name('User Tab Width') 'tab_width': @range[1, 32] u64,\n\n //- rjf: windows style menu bar\n @default(1) @display_name('Focus Menu Bar With Alt') @description(\"Mimics standard Windows behavior of focusing the menu bar using the Alt key.\")\n 'focus_menu_bar_with_alt': bool,\n\n //- rjf: native filesystem dialogues\n @default(0) @display_name('Use Native File System Dialog') @description(\"Uses the operating system's file system dialog box, rather than the debugger's built-in UI.\")\n 'use_native_file_system_dialog': bool,\n}\n")},
{str8_lit_comp("project"), str8_lit_comp("@expand_commands(edit_project_theme) x:\n{\n @display_name('Project Name') 'name': string,\n @default(2) @display_name('Project Tab Width') 'tab_width': @range[1, 32] u64,\n\n //- rjf: visualizers\n @display_name('Display Pointer Addresses Before Contents') @description(\"When visualizing pointers, always shows the address first, before showing contents at the pointer's address.\")\n @default(0) display_pointer_addresses_before_contents: bool,\n @display_name('Use Default C++ STL Type Visualizers') @description(\"Enables the built-in type views for C++ STL types.\")\n @default(1) use_default_stl_type_views: bool,\n @display_name('Use Default Unreal Engine Type Visualizers') @description(\"Enables the built-in type views for Unreal Engine types.\")\n @default(1) use_default_ue_type_views: bool,\n\n //- rjf: theme\n @default(\"None\") @display_name('Project Theme') @description(\"The project's theme, which describes all colors used throughout the UI, and can override the user's theme.\")\n 'theme': string,\n @no_expand @display_name('Project Theme') @description(\"The project's theme, which describes all colors used throughout the UI, and can override the user's theme.\")\n 'theme_colors': set,\n\n //- rjf: exception settings\n @default(1) @display_name(\"Break On Win32 Control-C Exceptions\") @description(\"Code: 0x40010005\")\n win32_ctrl_c: bool;\n @default(1) @display_name(\"Break On Win32 Control-Break Exceptions\") @description(\"Code: 0x40010008\")\n win32_ctrl_break: bool;\n @default(0) @display_name(\"Break On Win32 WinRT Originate Error Exceptions\") @description(\"Code: 0x40080201\")\n win32_win_rt_originate_error: bool;\n @default(0) @display_name(\"Break On Win32 WinRT Transform Error Exceptions\") @description(\"Code: 0x40080202\")\n win32_win_rt_transform_error: bool;\n @default(0) @display_name(\"Break On Win32 RPC Call Cancelled Exceptions\") @description(\"Code: 0x0000071a\")\n win32_rpc_call_cancelled: bool;\n @default(0) @display_name(\"Break On Win32 Data Type Misalignment Exceptions\") @description(\"Code: 0x80000002\")\n win32_datatype_misalignment: bool;\n @default(1) @display_name(\"Break On Win32 Access Violation Exceptions\") @description(\"Code: 0xc0000005\")\n win32_access_violation: bool;\n @default(0) @display_name(\"Break On Win32 In Page Error Exceptions\") @description(\"Code: 0xc0000006\")\n win32_in_page_error: bool;\n @default(1) @display_name(\"Break On Win32 Invalid Handle Specified Exceptions\") @description(\"Code: 0xc0000008\")\n win32_invalid_handle: bool;\n @default(0) @display_name(\"Break On Win32 Not Enough Quota Exceptions\") @description(\"Code: 0xc0000017\")\n win32_not_enough_quota: bool;\n @default(0) @display_name(\"Break On Win32 Illegal Instruction Exceptions\") @description(\"Code: 0xc000001d\")\n win32_illegal_instruction: bool;\n @default(0) @display_name(\"Break On Win32 Cannot Continue From Exception Exceptions\") @description(\"Code: 0xc0000025\")\n win32_cannot_continue_exception: bool;\n @default(0) @display_name(\"Break On Win32 Invalid Exception Disposition Returned By Handler Exceptions\") @description(\"Code: 0xc0000026\")\n win32_invalid_exception_disposition: bool;\n @default(0) @display_name(\"Break On Win32 Array Bounds Exceeded Exceptions\") @description(\"Code: 0xc000008c\")\n win32_array_bounds_exceeded: bool;\n @default(0) @display_name(\"Break On Win32 Floating-Point Denormal Operand Exceptions\") @description(\"Code: 0xc000008d\")\n win32_floating_point_denormal_operand: bool;\n @default(0) @display_name(\"Break On Win32 Floating-Point Division By Zero Exceptions\") @description(\"Code: 0xc000008e\")\n win32_floating_point_division_by_zero: bool;\n @default(0) @display_name(\"Break On Win32 Floating-Point Inexact Result Exceptions\") @description(\"Code: 0xc000008f\")\n win32_floating_point_inexact_result: bool;\n @default(0) @display_name(\"Break On Win32 Floating-Point Invalid Operation Exceptions\") @description(\"Code: 0xc0000090\")\n win32_floating_point_invalid_operation: bool;\n @default(0) @display_name(\"Break On Win32 Floating-Point Overflow Exceptions\") @description(\"Code: 0xc0000091\")\n win32_floating_point_overflow: bool;\n @default(0) @display_name(\"Break On Win32 Floating-Point Stack Check Exceptions\") @description(\"Code: 0xc0000092\")\n win32_floating_point_stack_check: bool;\n @default(0) @display_name(\"Break On Win32 Floating-Point Underflow Exceptions\") @description(\"Code: 0xc0000093\")\n win32_floating_point_underflow: bool;\n @default(0) @display_name(\"Break On Win32 Integer Division By Zero Exceptions\") @description(\"Code: 0xc0000094\")\n win32_integer_division_by_zero: bool;\n @default(0) @display_name(\"Break On Win32 Integer Overflow Exceptions\") @description(\"Code: 0xc0000095\")\n win32_integer_overflow: bool;\n @default(0) @display_name(\"Break On Win32 Privileged Instruction Exceptions\") Line truncated {str8_lit_comp("project"), 0, str8_lit_comp("@expand_commands(edit_project_theme) x:\n{\n @display_name('Project Name') 'name': string,\n @default(2) @display_name('Project Tab Width') 'tab_width': @range[1, 32] u64,\n\n //- rjf: visualizers\n @display_name('Display Pointer Addresses Before Contents') @description(\"When visualizing pointers, always shows the address first, before showing contents at the pointer's address.\")\n @default(0) display_pointer_addresses_before_contents: bool,\n @display_name('Use Default C++ STL Type Visualizers') @description(\"Enables the built-in type views for C++ STL types.\")\n @default(1) use_default_stl_type_views: bool,\n @display_name('Use Default Unreal Engine Type Visualizers') @description(\"Enables the built-in type views for Unreal Engine types.\")\n @default(1) use_default_ue_type_views: bool,\n\n //- rjf: theme\n @default(\"None\") @display_name('Project Theme') @description(\"The project's theme, which describes all colors used throughout the UI, and can override the user's theme.\")\n 'theme': string,\n @no_expand @display_name('Project Theme') @description(\"The project's theme, which describes all colors used throughout the UI, and can override the user's theme.\")\n 'theme_colors': set,\n\n //- rjf: exception settings\n @default(1) @display_name(\"Break On Win32 Control-C Exceptions\") @description(\"Code: 0x40010005\")\n win32_ctrl_c: bool;\n @default(1) @display_name(\"Break On Win32 Control-Break Exceptions\") @description(\"Code: 0x40010008\")\n win32_ctrl_break: bool;\n @default(0) @display_name(\"Break On Win32 WinRT Originate Error Exceptions\") @description(\"Code: 0x40080201\")\n win32_win_rt_originate_error: bool;\n @default(0) @display_name(\"Break On Win32 WinRT Transform Error Exceptions\") @description(\"Code: 0x40080202\")\n win32_win_rt_transform_error: bool;\n @default(0) @display_name(\"Break On Win32 RPC Call Cancelled Exceptions\") @description(\"Code: 0x0000071a\")\n win32_rpc_call_cancelled: bool;\n @default(0) @display_name(\"Break On Win32 Data Type Misalignment Exceptions\") @description(\"Code: 0x80000002\")\n win32_datatype_misalignment: bool;\n @default(1) @display_name(\"Break On Win32 Access Violation Exceptions\") @description(\"Code: 0xc0000005\")\n win32_access_violation: bool;\n @default(0) @display_name(\"Break On Win32 In Page Error Exceptions\") @description(\"Code: 0xc0000006\")\n win32_in_page_error: bool;\n @default(1) @display_name(\"Break On Win32 Invalid Handle Specified Exceptions\") @description(\"Code: 0xc0000008\")\n win32_invalid_handle: bool;\n @default(0) @display_name(\"Break On Win32 Not Enough Quota Exceptions\") @description(\"Code: 0xc0000017\")\n win32_not_enough_quota: bool;\n @default(0) @display_name(\"Break On Win32 Illegal Instruction Exceptions\") @description(\"Code: 0xc000001d\")\n win32_illegal_instruction: bool;\n @default(0) @display_name(\"Break On Win32 Cannot Continue From Exception Exceptions\") @description(\"Code: 0xc0000025\")\n win32_cannot_continue_exception: bool;\n @default(0) @display_name(\"Break On Win32 Invalid Exception Disposition Returned By Handler Exceptions\") @description(\"Code: 0xc0000026\")\n win32_invalid_exception_disposition: bool;\n @default(0) @display_name(\"Break On Win32 Array Bounds Exceeded Exceptions\") @description(\"Code: 0xc000008c\")\n win32_array_bounds_exceeded: bool;\n @default(0) @display_name(\"Break On Win32 Floating-Point Denormal Operand Exceptions\") @description(\"Code: 0xc000008d\")\n win32_floating_point_denormal_operand: bool;\n @default(0) @display_name(\"Break On Win32 Floating-Point Division By Zero Exceptions\") @description(\"Code: 0xc000008e\")\n win32_floating_point_division_by_zero: bool;\n @default(0) @display_name(\"Break On Win32 Floating-Point Inexact Result Exceptions\") @description(\"Code: 0xc000008f\")\n win32_floating_point_inexact_result: bool;\n @default(0) @display_name(\"Break On Win32 Floating-Point Invalid Operation Exceptions\") @description(\"Code: 0xc0000090\")\n win32_floating_point_invalid_operation: bool;\n @default(0) @display_name(\"Break On Win32 Floating-Point Overflow Exceptions\") @description(\"Code: 0xc0000091\")\n win32_floating_point_overflow: bool;\n @default(0) @display_name(\"Break On Win32 Floating-Point Stack Check Exceptions\") @description(\"Code: 0xc0000092\")\n win32_floating_point_stack_check: bool;\n @default(0) @display_name(\"Break On Win32 Floating-Point Underflow Exceptions\") @description(\"Code: 0xc0000093\")\n win32_floating_point_underflow: bool;\n @default(0) @display_name(\"Break On Win32 Integer Division By Zero Exceptions\") @description(\"Code: 0xc0000094\")\n win32_integer_division_by_zero: bool;\n @default(0) @display_name(\"Break On Win32 Integer Overflow Exceptions\") @description(\"Code: 0xc0000095\")\n win32_integer_overflow: bool;\n @default(0) @display_name(\"Break On Win32 Privileged Instruction Exceptions\ Line truncated
{str8_lit_comp("theme_color"), str8_lit_comp("@collection_commands(add_theme_color, fork_theme, save_theme, save_and_set_theme)\n@row_commands(duplicate_cfg, remove_cfg)\nx:\n{\n @display_name('Tags') tags: string,\n @display_name('Value') value: @color @hex u32,\n}\n")}, {str8_lit_comp("theme_color"), 0, str8_lit_comp("@collection_commands(add_theme_color, fork_theme, save_theme, save_and_set_theme)\n@row_commands(duplicate_cfg, remove_cfg)\nx:\n{\n @display_name('Tags') tags: string,\n @display_name('Value') value: @color @hex u32,\n}\n")},
{str8_lit_comp("window"), str8_lit_comp("x:\n{\n //- rjf: text rasterization settings\n @default(1) @display_name('Smooth UI Text') @description(\"Controls whether or not UI text is fully anti-aliased, for a smoother appearance.\")\n 'smooth_ui_text': bool,\n @default(1) @display_name('Hint UI Text') @description(\"Controls whether or not UI text is hinted, for better text readability at small sizes.\")\n 'hint_ui_text': bool,\n @default(0) @display_name('Smooth Code Text') @description(\"Controls whether or not code text is fully anti-aliased, for a smoother appearance.\")\n 'smooth_code_text': bool,\n @default(1) @display_name('Hint Code Text') @description(\"Controls whether or not code text is hinted, for better text readability at small sizes.\")\n 'hint_code_text': bool,\n @default(11) @display_name('Window Font Size') @description(\"Controls the window's default font size. Does not apply to tabs with their own font size set.\")\n 'font_size': @range[6, 72] u64,\n\n //- rjf: size settings\n @default(3.f) @display_name('Window Row Height') @description(\"Controls the window's default row height, in multiples of the font size. Does not apply to tabs with their own row height set.\")\n 'row_height': @range[1.75f, 5.f] f32,\n @default(3.f) @description(\"Controls the height of tabs, in multiples of the font size.\")\n 'tab_height': @range[1.75f, 5.f] f32,\n\n //- rjf: theme settings\n @default(1) @display_name('Use Project Theme') @description(\"Prefer using the project theme for this window, if any. If off, only the user's theme settings will be used.\")\n 'use_project_theme': bool,\n}\n")}, {str8_lit_comp("window"), 0, str8_lit_comp("x:\n{\n //- rjf: text rasterization settings\n @default(1) @display_name('Smooth UI Text') @description(\"Controls whether or not UI text is fully anti-aliased, for a smoother appearance.\")\n 'smooth_ui_text': bool,\n @default(1) @display_name('Hint UI Text') @description(\"Controls whether or not UI text is hinted, for better text readability at small sizes.\")\n 'hint_ui_text': bool,\n @default(0) @display_name('Smooth Code Text') @description(\"Controls whether or not code text is fully anti-aliased, for a smoother appearance.\")\n 'smooth_code_text': bool,\n @default(1) @display_name('Hint Code Text') @description(\"Controls whether or not code text is hinted, for better text readability at small sizes.\")\n 'hint_code_text': bool,\n @default(11) @display_name('Window Font Size') @description(\"Controls the window's default font size. Does not apply to tabs with their own font size set.\")\n 'font_size': @range[6, 72] u64,\n\n //- rjf: size settings\n @default(3.f) @display_name('Window Row Height') @description(\"Controls the window's default row height, in multiples of the font size. Does not apply to tabs with their own row height set.\")\n 'row_height': @range[1.75f, 5.f] f32,\n @default(3.f) @description(\"Controls the height of tabs, in multiples of the font size.\")\n 'tab_height': @range[1.75f, 5.f] f32,\n\n //- rjf: theme settings\n @default(1) @display_name('Use Project Theme') @description(\"Prefer using the project theme for this window, if any. If off, only the user's theme settings will be used.\")\n 'use_project_theme': bool,\n}\n")},
{str8_lit_comp("tab"), str8_lit_comp("@row_commands(@file copy_tab_full_path, @file show_file_in_explorer, duplicate_tab, close_tab)\nx:\n{\n @override @display_name('Tab Font Size') @description(\"Controls the tab's font size.\") @no_callee_helper\n 'font_size': @range[6, 72] u64,\n}\n")}, {str8_lit_comp("tab"), 0, str8_lit_comp("@row_commands(@file copy_tab_full_path, @file show_file_in_explorer, duplicate_tab, close_tab)\nx:\n{\n @override @display_name('Tab Font Size') @description(\"Controls the tab's font size.\") @no_callee_helper\n 'font_size': @range[6, 72] u64,\n}\n")},
{str8_lit_comp("bin"), str8_lit_comp("x:{ @description('An expression to which the 2-radix display should apply.') 'expression': expr_string }")}, {str8_lit_comp("bin"), 1, str8_lit_comp("x:{ @description('An expression to which the 2-radix display should apply.') 'expression': expr_string }")},
{str8_lit_comp("oct"), str8_lit_comp("x:{ @description('An expression to which the 8-radix display should apply.') 'expression': expr_string }")}, {str8_lit_comp("oct"), 1, str8_lit_comp("x:{ @description('An expression to which the 8-radix display should apply.') 'expression': expr_string }")},
{str8_lit_comp("hex"), str8_lit_comp("x:{ @description('An expression to which the 16-radix display should apply.') 'expression': expr_string }")}, {str8_lit_comp("hex"), 1, str8_lit_comp("x:{ @description('An expression to which the 16-radix display should apply.') 'expression': expr_string }")},
{str8_lit_comp("digits"), str8_lit_comp("x:{ @description('An expression to which the digit display should apply.') 'expression': expr_string, @description('The minimum number of digits to display.') 'digit_count': u64 }")}, {str8_lit_comp("digits"), 1, str8_lit_comp("x:{ @description('An expression to which the digit display should apply.') 'expression': expr_string, @description('The minimum number of digits to display.') 'digit_count': u64 }")},
{str8_lit_comp("no_string"), str8_lit_comp("x:{ @description('The expression for which string visualization should be disabled.') 'expression': expr_string}")}, {str8_lit_comp("no_string"), 1, str8_lit_comp("x:{ @description('The expression for which string visualization should be disabled.') 'expression': expr_string}")},
{str8_lit_comp("no_char"), str8_lit_comp("x:{ @description('The expression for which character visualization should be disabled.') 'expression': expr_string}")}, {str8_lit_comp("no_char"), 1, str8_lit_comp("x:{ @description('The expression for which character visualization should be disabled.') 'expression': expr_string}")},
{str8_lit_comp("no_addr"), str8_lit_comp("x:{ @description('The expression for which address visualization should be disabled.') 'expression': expr_string}")}, {str8_lit_comp("no_addr"), 1, str8_lit_comp("x:{ @description('The expression for which address visualization should be disabled.') 'expression': expr_string}")},
{str8_lit_comp("sequence"), str8_lit_comp("x:{ @description('The number of expansions to generate.') 'count': expr_string}")}, {str8_lit_comp("sequence"), 1, str8_lit_comp("x:{ @description('The number of expansions to generate.') 'count': expr_string}")},
{str8_lit_comp("rows"), str8_lit_comp("x:{ @description('The expression for which rows should be generated.') 'expression': expr_string, @description('A list of expressions which will be used to generate rows.') '...'}")}, {str8_lit_comp("rows"), 1, str8_lit_comp("x:{ @description('The expression for which rows should be generated.') 'expression': expr_string, @description('A list of expressions which will be used to generate rows.') '...'}")},
{str8_lit_comp("columns"), str8_lit_comp("x:{ @description('The expression for whose expansions columns should be generated.') 'expression': expr_string, @description('A list of expressions which will be used to generate columns for each expansion from `expression`.') '...'}")}, {str8_lit_comp("columns"), 1, str8_lit_comp("x:{ @description('The expression for whose expansions columns should be generated.') 'expression': expr_string, @description('A list of expressions which will be used to generate columns for each expansion from `expression`.') '...'}")},
{str8_lit_comp("omit"), str8_lit_comp("x:{ @description('The expression for which certain members should be omitted.') 'expression': expr_string, @description('A list of member names to omit from the expansion.') '...'}")}, {str8_lit_comp("omit"), 1, str8_lit_comp("x:{ @description('The expression for which certain members should be omitted.') 'expression': expr_string, @description('A list of member names to omit from the expansion.') '...'}")},
{str8_lit_comp("range1"), str8_lit_comp("x:{ @description('The expression which should be bounded by `min` and `max`.') 'expression': expr_string, @description('The lower bound.') min, @description('The upper bound.') max}")}, {str8_lit_comp("range1"), 1, str8_lit_comp("x:{ @description('The expression which should be bounded by `min` and `max`.') 'expression': expr_string, @description('The lower bound.') min, @description('The upper bound.') max}")},
{str8_lit_comp("array"), str8_lit_comp("x:{ @description('An expression of the base address of the array.') 'base_address': expr_string, @description('The number of elements in the array.') count}")}, {str8_lit_comp("array"), 1, str8_lit_comp("x:{ @description('An expression of the base address of the array.') 'base_address': expr_string, @description('The number of elements in the array.') count}")},
{str8_lit_comp("slice"), str8_lit_comp("x:{ @description('An expression of a structure that is to be interpreted as a slice.') 'expression': expr_string}")}, {str8_lit_comp("slice"), 1, str8_lit_comp("x:{ @description('An expression of a structure that is to be interpreted as a slice.') 'expression': expr_string}")},
{str8_lit_comp("list"), str8_lit_comp("x:\n{\n @description(\"An expression describing the first node in the list.\")\n 'expression': expr_string,\n @order(0) @description(\"The name of the member which encodes the link to the next node.\")\n 'member_name': code_string,\n}\n")}, {str8_lit_comp("list"), 1, str8_lit_comp("x:\n{\n @description(\"An expression describing the first node in the list.\")\n 'expression': expr_string,\n @order(0) @description(\"The name of the member which encodes the link to the next node.\")\n 'member_name': code_string,\n}\n")},
{str8_lit_comp("watch"), str8_lit_comp("@inherit(tab) x:\n{\n @override @display_name('Tab Row Height') @description(\"Controls the tab's row height, in multiples of the font size.\")\n 'row_height': @range[1.75f, 5.f] f32,\n 'label': code_string,\n @description(\"The root expression which is evaluated to produce the watch window.\")\n 'expression': expr_string,\n @no_expand 'watches': set,\n}\n")}, {str8_lit_comp("watch"), 0, str8_lit_comp("@inherit(tab) x:\n{\n @override @display_name('Tab Row Height') @description(\"Controls the tab's row height, in multiples of the font size.\")\n 'row_height': @range[1.75f, 5.f] f32,\n 'label': code_string,\n @description(\"The root expression which is evaluated to produce the watch window.\")\n 'expression': expr_string,\n @no_expand 'watches': set,\n}\n")},
{str8_lit_comp("text"), str8_lit_comp("@inherit(tab) @expand_commands(@output clear_output) x:\n{\n @description(\"An expression to describe data which should be viewed as text or code.\")\n 'expression': expr_string,\n @description(\"The language that the text should be interpreted as being within. Used for syntax highlighting and other parsing features.\")\n 'lang': code_string,\n @default(1) @description(\"Controls whether or not line numbers are shown.\")\n 'show_line_numbers':bool,\n @no_callee_helper @default(1) @display_name('Line Wrapping') @description(\"Splits textual lines into multiple visual lines, so that all text is within the visible area.\")\n 'line_wrapping': bool,\n @no_callee_helper @default(0) @display_name('Scroll To Bottom On Change') @description(\"Scrolls to the bottom if the text is changed.\")\n 'scroll_to_bottom_on_change': bool,\n @no_callee_helper @no_revert @default(0) @display_name('Transient') @description(\"Controls whether or not this tab will be automatically replaced by the debugger when it snaps to new source code locations.\")\n 'auto': bool,\n}\n")}, {str8_lit_comp("text"), 1, str8_lit_comp("@inherit(tab) @expand_commands(@output clear_output) x:\n{\n @description(\"An expression to describe data which should be viewed as text or code.\")\n 'expression': expr_string,\n @optional @description(\"The language that the text should be interpreted as being within. Used for syntax highlighting and other parsing features.\")\n 'lang': code_string,\n @no_callee_helper @default(1) @description(\"Controls whether or not line numbers are shown.\")\n 'show_line_numbers':bool,\n @no_callee_helper @default(1) @display_name('Line Wrapping') @description(\"Splits textual lines into multiple visual lines, so that all text is within the visible area.\")\n 'line_wrapping': bool,\n @no_callee_helper @default(0) @display_name('Scroll To Bottom On Change') @description(\"Scrolls to the bottom if the text is changed.\")\n 'scroll_to_bottom_on_change': bool,\n @no_callee_helper @no_revert @default(0) @display_name('Transient') @description(\"Controls whether or not this tab will be automatically replaced by the debugger when it snaps to new source code locations.\")\n 'auto': bool,\n}\n")},
{str8_lit_comp("disasm"), str8_lit_comp("@inherit(tab) x:\n{\n @description(\"An expression to describe the base address or offset of the disassembly.\")\n 'expression': expr_string,\n 'arch': code_string,\n 'syntax': code_string,\n 'size': expr_string,\n @no_callee_helper @default(1) @description(\"Controls whether or not addresses are shown in the disassembly text.\")\n 'show_addresses': bool,\n @no_callee_helper @default(0) @description(\"Controls whether or not code bytes are shown in the disassembly text.\")\n 'show_code_bytes': bool,\n @no_callee_helper @default(1) @description(\"Controls whether or not source lines, corresponding to disassembly instruction ranges, are shown in the disassembly text.\")\n 'show_source_lines': bool,\n @no_callee_helper @default(1) @description(\"Controls whether or not disassembly text is decorated with symbol names.\")\n 'show_symbol_names': bool,\n @no_callee_helper @default(1) @description(\"Controls whether or not line numbers are shown.\")\n 'show_line_numbers': bool,\n}\n")}, {str8_lit_comp("disasm"), 1, str8_lit_comp("@inherit(tab) x:\n{\n @description(\"An expression to describe the base address or offset of the disassembly.\")\n 'expression': expr_string,\n @optional @description(\"The maximum number of bytes to disassemble.\")\n 'size': expr_string,\n @optional @description(\"The architecture to interpret the data as when disassembling.\")\n 'arch': code_string,\n @optional @description(\"The syntax style to use when displaying the disassembly textually.\")\n 'syntax': code_string,\n @no_callee_helper @default(1) @description(\"Controls whether or not addresses are shown in the disassembly text.\")\n 'show_addresses': bool,\n @no_callee_helper @default(0) @description(\"Controls whether or not code bytes are shown in the disassembly text.\")\n 'show_code_bytes': bool,\n @no_callee_helper @default(1) @description(\"Controls whether or not source lines, corresponding to disassembly instruction ranges, are shown in the disassembly text.\")\n 'show_source_lines': bool,\n @no_callee_helper @default(1) @description(\"Controls whether or not disassembly text is decorated with symbol names.\")\n 'show_symbol_names': bool,\n @no_callee_helper @default(1) @description(\"Controls whether or not line numbers are shown.\")\n 'show_line_numbers': bool,\n}\n")},
{str8_lit_comp("memory"), str8_lit_comp("@inherit(tab) x:\n{\n @display_name(\"Zoom\") @description(\"The zoom level for displaying bytes in the memory view.\")\n @default(1.0) 'zoom': @range[0.5, 2] f32,\n @display_name(\"Base Address\") @description(\"An expression which refers to the base address of data which should be viewed as memory.\")\n 'expression': expr_string,\n @display_name(\"Address Range Size\") @description(\"The number of bytes of the viewed memory range.\")\n 'size': expr_string,\n @display_name(\"Cursor Address\") @description(\"The address of the cursor.\")\n 'cursor': expr_string,\n @default(1) @display_name(\"Cursor Size\") @description(\"The size, in bytes, of the cursor.\")\n 'cursor_size': @range[1, 16] u64,\n @expand_if(\"!$.auto_columns\") @default(16) @description(\"The number of columns to build before building new rows.\")\n 'num_columns': @range[1, 64] u64,\n @default(16) @display_name(\"Default Radix\") @description(\"The default radix with which numeric values should be displayed, when peeking.\")\n @or(2, 8, 10, 16)\n 'default_radix': u64,\n @default(1) @display_name(\"Track Mark To Cursor\") @description(\"Ensures that the mark always follows the cursor, if the cursor value is updated.\")\n 'track_mark_to_cursor': bool,\n @default(1) @display_name(\"Allow Mutation\") @description(\"Allows operations which mutate memory.\")\n 'allow_mutation': bool,\n @default(0) @display_name(\"Automatically Size Columns\") @description(\"Determines the number of columns based on the available space.\")\n 'auto_columns': bool,\n @default(1) @display_name(\"Peek As Unsigned\") 'peek_as_unsigned': bool,\n @default(1) @display_name(\"Peek As Signed\") 'peek_as_signed': bool,\n @default(1) @display_name(\"Peek As Float\") 'peek_as_float': bool,\n @display_name(\"Extra Peek Types\") @description(\"A list of types as which to interpret selected memory.\")\n 'peek_types': set,\n}\n")}, {str8_lit_comp("memory"), 1, str8_lit_comp("@inherit(tab) x:\n{\n @display_name(\"Base Address\") @description(\"An expression which refers to the base address of data which should be viewed as memory.\")\n 'expression': expr_string,\n @no_callee_helper @display_name(\"Zoom\") @description(\"The zoom level for displaying bytes in the memory view.\")\n @default(1.0) 'zoom': @range[0.5, 2] f32,\n @optional @display_name(\"Address Range Size\") @description(\"The number of bytes of the viewed memory range.\")\n 'size': expr_string,\n @no_callee_helper @display_name(\"Cursor Address\") @description(\"The address of the cursor.\")\n 'cursor': expr_string,\n @no_callee_helper @default(1) @display_name(\"Cursor Size\") @description(\"The size, in bytes, of the cursor.\")\n 'cursor_size': @range[1, 16] u64,\n @optional @expand_if(\"!$.auto_columns\") @default(16) @description(\"The number of columns to build before building new rows.\")\n 'num_columns': @range[1, 64] u64,\n @optional @default(16) @display_name(\"Default Radix\") @description(\"The default radix with which numeric values should be displayed, when peeking.\")\n @or(2, 8, 10, 16)\n 'default_radix': u64,\n @no_callee_helper @default(1) @display_name(\"Track Mark To Cursor\") @description(\"Ensures that the mark always follows the cursor, if the cursor value is updated.\")\n 'track_mark_to_cursor': bool,\n @no_callee_helper @default(1) @display_name(\"Allow Mutation\") @description(\"Allows operations which mutate memory.\")\n 'allow_mutation': bool,\n @no_callee_helper @default(0) @display_name(\"Automatically Size Columns\") @description(\"Determines the number of columns based on the available space.\")\n 'auto_columns': bool,\n @no_callee_helper @default(1) @display_name(\"Peek As Unsigned\") 'peek_as_unsigned': bool,\n @no_callee_helper @default(1) @display_name(\"Peek As Signed\") 'peek_as_signed': bool,\n @no_callee_helper @default(1) @display_name(\"Peek As Float\") 'peek_as_float': bool,\n @no_callee_helper @display_name(\"Extra Peek Types\") @description(\"A list of types as which to interpret selected memory.\")\n 'peek_types': set,\n}\n")},
{str8_lit_comp("bitmap"), str8_lit_comp("@inherit(tab) x:\n{\n @description(\"An expression which refers to the base address of data which should be viewed as a bitmap.\")\n 'expression': expr_string,\n @description(\"An expression describing the width of the bitmap, in pixels.\") @order(0) 'w': u64,\n @description(\"An expression describing the height of the bitmap, in pixels.\") @order(1) 'h': u64,\n @display_name(\"Bitmap Format\") @description(\"The pixel format that the bitmap data should be interpreted as being within.\")\n 'fmt': code_string,\n}\n")}, {str8_lit_comp("bitmap"), 1, str8_lit_comp("@inherit(tab) x:\n{\n @description(\"An expression which refers to the base address of data which should be viewed as a bitmap.\")\n 'expression': expr_string,\n @description(\"An expression describing the width of the bitmap, in pixels.\") @order(0) 'w': u64,\n @description(\"An expression describing the height of the bitmap, in pixels.\") @order(1) 'h': u64,\n @display_name(\"Bitmap Format\") @description(\"The pixel format that the bitmap data should be interpreted as being within.\")\n 'fmt': code_string,\n}\n")},
{str8_lit_comp("color"), str8_lit_comp("@inherit(tab) x:\n{\n @display_name(\"Value\") @description(\"An expression to describe the value or location of the color.\")\n 'expression': expr_string,\n}\n")}, {str8_lit_comp("color"), 1, str8_lit_comp("@inherit(tab) x:\n{\n @display_name(\"Value\") @description(\"An expression to describe the value or location of the color.\")\n 'expression': expr_string,\n}\n")},
{str8_lit_comp("geo3d"), str8_lit_comp("@inherit(tab) x:\n{\n @display_name(\"Expression\") @description(\"An expression to describe the base address of the index buffer.\")\n 'expression': expr_string,\n 'count': expr_string,\n 'vtx': expr_string,\n 'vtx_size': expr_string,\n 'yaw': @range[0, 1] f32,\n 'pitch': @range[-0.5, 0] f32,\n 'zoom': @range[0, 100] f32,\n}\n")}, {str8_lit_comp("geo3d"), 1, str8_lit_comp("@inherit(tab) x:\n{\n @display_name(\"Expression\") @description(\"An expression to describe the base address of the index buffer.\")\n 'expression': expr_string,\n 'count': expr_string,\n 'vtx': expr_string,\n 'vtx_size': expr_string,\n 'yaw': @range[0, 1] f32,\n 'pitch': @range[-0.5, 0] f32,\n 'zoom': @range[0, 100] f32,\n}\n")},
{str8_lit_comp("getting_started"), str8_lit_comp("@inherit(tab) x:\n{\n}\n")}, {str8_lit_comp("getting_started"), 0, str8_lit_comp("@inherit(tab) x:\n{\n}\n")},
{str8_lit_comp("target"), str8_lit_comp("@row_commands(@cmd_line save_cfg_to_project, enable_cfg, launch_and_run, launch_and_step_into, duplicate_cfg, remove_cfg)\n@collection_commands(add_target)\nx:\n{\n 'label': code_string,\n 'executable': path,\n 'arguments': string,\n 'working_directory': path,\n 'entry_point': expr_string,\n 'stdout_path': @no_relativize path,\n 'stderr_path': @no_relativize path,\n 'stdin_path': @no_relativize path,\n 'environment': set,\n 'debug_subprocesses': bool,\n @no_revert @no_expand @default(0) 'enabled': bool,\n}\n")}, {str8_lit_comp("target"), 0, str8_lit_comp("@row_commands(@cmd_line save_cfg_to_project, enable_cfg, launch_and_run, launch_and_step_into, duplicate_cfg, remove_cfg)\n@collection_commands(add_target)\nx:\n{\n 'label': code_string,\n 'executable': path,\n 'arguments': string,\n 'working_directory': path,\n 'entry_point': expr_string,\n 'stdout_path': @no_relativize path,\n 'stderr_path': @no_relativize path,\n 'stdin_path': @no_relativize path,\n 'environment': set,\n 'debug_subprocesses': bool,\n @no_revert @no_expand @default(0) 'enabled': bool,\n}\n")},
{str8_lit_comp("breakpoint"), str8_lit_comp("@row_commands(enable_cfg, duplicate_cfg, remove_cfg)\n@collection_commands(toggle_breakpoint, add_breakpoint, add_address_breakpoint, add_function_breakpoint, clear_breakpoints)\nx:\n{\n 'label': code_string,\n 'condition': expr_string,\n 'source_location': path_pt,\n 'address_location': expr_string,\n 'hit_count': u64,\n 'address_range_size': @or(0, 1, 2, 4, 8) u64,\n 'break_on_write': bool,\n 'break_on_read': bool,\n 'break_on_execute': bool,\n @no_revert @no_expand @default(1) 'enabled': bool,\n}\n")}, {str8_lit_comp("breakpoint"), 0, str8_lit_comp("@row_commands(enable_cfg, duplicate_cfg, remove_cfg)\n@collection_commands(toggle_breakpoint, add_breakpoint, add_address_breakpoint, add_function_breakpoint, clear_breakpoints)\nx:\n{\n 'label': code_string,\n 'condition': expr_string,\n 'source_location': path_pt,\n 'address_location': expr_string,\n 'hit_count': u64,\n 'address_range_size': @or(0, 1, 2, 4, 8) u64,\n 'break_on_write': bool,\n 'break_on_read': bool,\n 'break_on_execute': bool,\n @no_revert @no_expand @default(1) 'enabled': bool,\n}\n")},
{str8_lit_comp("watch_pin"), str8_lit_comp("@row_commands(duplicate_cfg, remove_cfg)\n@collection_commands(add_watch_pin, toggle_watch_pin)\nx:\n{\n 'expression': expr_string,\n 'source_location': path_pt,\n 'address_location': expr_string,\n}\n")}, {str8_lit_comp("watch_pin"), 0, str8_lit_comp("@row_commands(duplicate_cfg, remove_cfg)\n@collection_commands(add_watch_pin, toggle_watch_pin)\nx:\n{\n 'expression': expr_string,\n 'source_location': path_pt,\n 'address_location': expr_string,\n}\n")},
{str8_lit_comp("debug_info"), str8_lit_comp("@row_commands(enable_cfg, duplicate_cfg, remove_cfg)\n@collection_commands(load_debug_info)\nx:\n{\n 'path': @no_relativize path,\n @query 'guid': string,\n @no_revert @no_expand @default(1) 'enabled': bool,\n}\n")}, {str8_lit_comp("debug_info"), 0, str8_lit_comp("@row_commands(enable_cfg, duplicate_cfg, remove_cfg)\n@collection_commands(load_debug_info)\nx:\n{\n 'path': @no_relativize path,\n @query 'guid': string,\n @no_revert @no_expand @default(1) 'enabled': bool,\n}\n")},
{str8_lit_comp("file_path_map"), str8_lit_comp("@collection_commands(add_file_path_map) @row_commands(remove_cfg) x:{'source': @no_relativize path, 'dest': @no_relativize path}")}, {str8_lit_comp("file_path_map"), 0, str8_lit_comp("@collection_commands(add_file_path_map) @row_commands(remove_cfg) x:{'source': @no_relativize path, 'dest': @no_relativize path}")},
{str8_lit_comp("type_view"), str8_lit_comp("@collection_commands(add_type_view) @row_commands(remove_cfg) x:{'type':expr_string, 'expr':expr_string}")}, {str8_lit_comp("type_view"), 0, str8_lit_comp("@collection_commands(add_type_view) @row_commands(remove_cfg) x:{'type':expr_string, 'expr':expr_string}")},
{str8_lit_comp("recent_project"), str8_lit_comp("x:{'path':path}")}, {str8_lit_comp("recent_project"), 0, str8_lit_comp("x:{'path':path}")},
{str8_lit_comp("recent_file"), str8_lit_comp("x:{'path':path}")}, {str8_lit_comp("recent_file"), 0, str8_lit_comp("x:{'path':path}")},
{str8_lit_comp("machine"), str8_lit_comp("x:{'label':code_string, @no_expand 'active':bool, 'unattached_processes':set, 'processes':set}")}, {str8_lit_comp("machine"), 0, str8_lit_comp("x:{'label':code_string, @no_expand 'active':bool, 'unattached_processes':set, 'processes':set}")},
{str8_lit_comp("process"), str8_lit_comp("x:{'label':code_string, 'id':u64, @no_expand 'active':bool, 'modules':set, 'threads':set}")}, {str8_lit_comp("process"), 0, str8_lit_comp("x:{'label':code_string, 'id':u64, @no_expand 'active':bool, 'modules':set, 'threads':set}")},
{str8_lit_comp("module"), str8_lit_comp("x:{'exe':path, 'dbg':path, 'vaddr_range':vaddr_range}")}, {str8_lit_comp("module"), 0, str8_lit_comp("x:{'exe':path, 'dbg':path, 'vaddr_range':vaddr_range}")},
{str8_lit_comp("thread"), str8_lit_comp("x:{'label':code_string, 'id':u64, @no_expand 'active':bool, 'call_stack':set}")}, {str8_lit_comp("thread"), 0, str8_lit_comp("x:{'label':code_string, 'id':u64, @no_expand 'active':bool, 'call_stack':set}")},
}; };
String8 rd_reg_slot_code_name_table[49] = String8 rd_reg_slot_code_name_table[49] =
+1
View File
@@ -444,6 +444,7 @@ typedef struct RD_NameSchemaInfo RD_NameSchemaInfo;
struct RD_NameSchemaInfo struct RD_NameSchemaInfo
{ {
String8 name; String8 name;
B32 is_view;
String8 schema; String8 schema;
}; };
+67 -63
View File
@@ -224,11 +224,11 @@ RD_VocabTable:
//////////////////////////////// ////////////////////////////////
//~ rjf: Schemas //~ rjf: Schemas
@table(name schema) RD_SchemaTable: @table(name is_view schema) RD_SchemaTable:
{ {
//- rjf: @schema users //- rjf: @schema user
{ {
user, user, 0,
``` ```
@expand_commands(edit_user_theme) x: @expand_commands(edit_user_theme) x:
{ {
@@ -312,8 +312,8 @@ RD_VocabTable:
// string and put it into a table cell... // string and put it into a table cell...
// //
{ {
project project, 0,
``` ```
@expand_commands(edit_project_theme) x: @expand_commands(edit_project_theme) x:
{ {
@display_name('Project Name') 'name': string, @display_name('Project Name') 'name': string,
@@ -414,7 +414,7 @@ RD_VocabTable:
//- rjf: @schema theme_color //- rjf: @schema theme_color
{ {
theme_color, theme_color, 0,
``` ```
@collection_commands(add_theme_color, fork_theme, save_theme, save_and_set_theme) @collection_commands(add_theme_color, fork_theme, save_theme, save_and_set_theme)
@row_commands(duplicate_cfg, remove_cfg) @row_commands(duplicate_cfg, remove_cfg)
@@ -428,7 +428,7 @@ RD_VocabTable:
//- rjf: @schema window //- rjf: @schema window
{ {
window, window, 0,
``` ```
x: x:
{ {
@@ -459,7 +459,7 @@ RD_VocabTable:
//- rjf: @schema tab //- rjf: @schema tab
{ {
tab, tab, 0,
``` ```
@row_commands(@file copy_tab_full_path, @file show_file_in_explorer, duplicate_tab, close_tab) @row_commands(@file copy_tab_full_path, @file show_file_in_explorer, duplicate_tab, close_tab)
x: x:
@@ -471,50 +471,50 @@ RD_VocabTable:
} }
//- rjf: @schema bin //- rjf: @schema bin
{bin ```x:{ @description('An expression to which the 2-radix display should apply.') 'expression': expr_string }```} {bin 1 ```x:{ @description('An expression to which the 2-radix display should apply.') 'expression': expr_string }```}
//- rjf: @schema oct //- rjf: @schema oct
{oct ```x:{ @description('An expression to which the 8-radix display should apply.') 'expression': expr_string }```} {oct 1 ```x:{ @description('An expression to which the 8-radix display should apply.') 'expression': expr_string }```}
//- rjf: @schema hex //- rjf: @schema hex
{hex ```x:{ @description('An expression to which the 16-radix display should apply.') 'expression': expr_string }```} {hex 1 ```x:{ @description('An expression to which the 16-radix display should apply.') 'expression': expr_string }```}
//- rjf: @schema digits //- rjf: @schema digits
{digits ```x:{ @description('An expression to which the digit display should apply.') 'expression': expr_string, @description('The minimum number of digits to display.') 'digit_count': u64 }```} {digits 1 ```x:{ @description('An expression to which the digit display should apply.') 'expression': expr_string, @description('The minimum number of digits to display.') 'digit_count': u64 }```}
//- rjf: @schema no_string //- rjf: @schema no_string
{no_string ```x:{ @description('The expression for which string visualization should be disabled.') 'expression': expr_string}```} {no_string 1 ```x:{ @description('The expression for which string visualization should be disabled.') 'expression': expr_string}```}
//- rjf: @schema no_char //- rjf: @schema no_char
{no_char ```x:{ @description('The expression for which character visualization should be disabled.') 'expression': expr_string}```} {no_char 1 ```x:{ @description('The expression for which character visualization should be disabled.') 'expression': expr_string}```}
//- rjf: @schema no_addr //- rjf: @schema no_addr
{no_addr ```x:{ @description('The expression for which address visualization should be disabled.') 'expression': expr_string}```} {no_addr 1 ```x:{ @description('The expression for which address visualization should be disabled.') 'expression': expr_string}```}
//- rjf: @schema sequence //- rjf: @schema sequence
{sequence ```x:{ @description('The number of expansions to generate.') 'count': expr_string}```} {sequence 1 ```x:{ @description('The number of expansions to generate.') 'count': expr_string}```}
//- rjf: @schema rows //- rjf: @schema rows
{rows ```x:{ @description('The expression for which rows should be generated.') 'expression': expr_string, @description('A list of expressions which will be used to generate rows.') '...'}```} {rows 1 ```x:{ @description('The expression for which rows should be generated.') 'expression': expr_string, @description('A list of expressions which will be used to generate rows.') '...'}```}
//- rjf: @schema columns //- rjf: @schema columns
{columns ```x:{ @description('The expression for whose expansions columns should be generated.') 'expression': expr_string, @description('A list of expressions which will be used to generate columns for each expansion from `expression`.') '...'}```} {columns 1 ```x:{ @description('The expression for whose expansions columns should be generated.') 'expression': expr_string, @description('A list of expressions which will be used to generate columns for each expansion from `expression`.') '...'}```}
//- rjf: @schema omit //- rjf: @schema omit
{omit ```x:{ @description('The expression for which certain members should be omitted.') 'expression': expr_string, @description('A list of member names to omit from the expansion.') '...'}```} {omit 1 ```x:{ @description('The expression for which certain members should be omitted.') 'expression': expr_string, @description('A list of member names to omit from the expansion.') '...'}```}
//- rjf: @schema range1 //- rjf: @schema range1
{range1 ```x:{ @description('The expression which should be bounded by `min` and `max`.') 'expression': expr_string, @description('The lower bound.') min, @description('The upper bound.') max}```} {range1 1 ```x:{ @description('The expression which should be bounded by `min` and `max`.') 'expression': expr_string, @description('The lower bound.') min, @description('The upper bound.') max}```}
//- rjf: @schema array //- rjf: @schema array
{array ```x:{ @description('An expression of the base address of the array.') 'base_address': expr_string, @description('The number of elements in the array.') count}```} {array 1 ```x:{ @description('An expression of the base address of the array.') 'base_address': expr_string, @description('The number of elements in the array.') count}```}
//- rjf: @schema slice //- rjf: @schema slice
{slice ```x:{ @description('An expression of a structure that is to be interpreted as a slice.') 'expression': expr_string}```} {slice 1 ```x:{ @description('An expression of a structure that is to be interpreted as a slice.') 'expression': expr_string}```}
//- rjf: @schema list //- rjf: @schema list
{ {
list, list, 1,
``` ```
x: x:
{ {
@@ -528,7 +528,7 @@ RD_VocabTable:
//- rjf: @schema watch //- rjf: @schema watch
{ {
watch, watch, 0,
``` ```
@inherit(tab) x: @inherit(tab) x:
{ {
@@ -544,15 +544,15 @@ RD_VocabTable:
//- rjf: @schema text //- rjf: @schema text
{ {
text, text, 1,
``` ```
@inherit(tab) @expand_commands(@output clear_output) x: @inherit(tab) @expand_commands(@output clear_output) x:
{ {
@description("An expression to describe data which should be viewed as text or code.") @description("An expression to describe data which should be viewed as text or code.")
'expression': expr_string, 'expression': expr_string,
@description("The language that the text should be interpreted as being within. Used for syntax highlighting and other parsing features.") @optional @description("The language that the text should be interpreted as being within. Used for syntax highlighting and other parsing features.")
'lang': code_string, 'lang': code_string,
@default(1) @description("Controls whether or not line numbers are shown.") @no_callee_helper @default(1) @description("Controls whether or not line numbers are shown.")
'show_line_numbers':bool, 'show_line_numbers':bool,
@no_callee_helper @default(1) @display_name('Line Wrapping') @description("Splits textual lines into multiple visual lines, so that all text is within the visible area.") @no_callee_helper @default(1) @display_name('Line Wrapping') @description("Splits textual lines into multiple visual lines, so that all text is within the visible area.")
'line_wrapping': bool, 'line_wrapping': bool,
@@ -566,15 +566,18 @@ RD_VocabTable:
//- rjf: @schema disasm //- rjf: @schema disasm
{ {
disasm, disasm, 1,
``` ```
@inherit(tab) x: @inherit(tab) x:
{ {
@description("An expression to describe the base address or offset of the disassembly.") @description("An expression to describe the base address or offset of the disassembly.")
'expression': expr_string, 'expression': expr_string,
'arch': code_string, @optional @description("The maximum number of bytes to disassemble.")
'syntax': code_string, 'size': expr_string,
'size': expr_string, @optional @description("The architecture to interpret the data as when disassembling.")
'arch': code_string,
@optional @description("The syntax style to use when displaying the disassembly textually.")
'syntax': code_string,
@no_callee_helper @default(1) @description("Controls whether or not addresses are shown in the disassembly text.") @no_callee_helper @default(1) @description("Controls whether or not addresses are shown in the disassembly text.")
'show_addresses': bool, 'show_addresses': bool,
@no_callee_helper @default(0) @description("Controls whether or not code bytes are shown in the disassembly text.") @no_callee_helper @default(0) @description("Controls whether or not code bytes are shown in the disassembly text.")
@@ -591,35 +594,35 @@ RD_VocabTable:
//- rjf: @schema memory //- rjf: @schema memory
{ {
memory, memory, 1,
``` ```
@inherit(tab) x: @inherit(tab) x:
{ {
@display_name("Zoom") @description("The zoom level for displaying bytes in the memory view.")
@default(1.0) 'zoom': @range[0.5, 2] f32,
@display_name("Base Address") @description("An expression which refers to the base address of data which should be viewed as memory.") @display_name("Base Address") @description("An expression which refers to the base address of data which should be viewed as memory.")
'expression': expr_string, 'expression': expr_string,
@display_name("Address Range Size") @description("The number of bytes of the viewed memory range.") @no_callee_helper @display_name("Zoom") @description("The zoom level for displaying bytes in the memory view.")
@default(1.0) 'zoom': @range[0.5, 2] f32,
@optional @display_name("Address Range Size") @description("The number of bytes of the viewed memory range.")
'size': expr_string, 'size': expr_string,
@display_name("Cursor Address") @description("The address of the cursor.") @no_callee_helper @display_name("Cursor Address") @description("The address of the cursor.")
'cursor': expr_string, 'cursor': expr_string,
@default(1) @display_name("Cursor Size") @description("The size, in bytes, of the cursor.") @no_callee_helper @default(1) @display_name("Cursor Size") @description("The size, in bytes, of the cursor.")
'cursor_size': @range[1, 16] u64, 'cursor_size': @range[1, 16] u64,
@expand_if("!$.auto_columns") @default(16) @description("The number of columns to build before building new rows.") @optional @expand_if("!$.auto_columns") @default(16) @description("The number of columns to build before building new rows.")
'num_columns': @range[1, 64] u64, 'num_columns': @range[1, 64] u64,
@default(16) @display_name("Default Radix") @description("The default radix with which numeric values should be displayed, when peeking.") @optional @default(16) @display_name("Default Radix") @description("The default radix with which numeric values should be displayed, when peeking.")
@or(2, 8, 10, 16) @or(2, 8, 10, 16)
'default_radix': u64, 'default_radix': u64,
@default(1) @display_name("Track Mark To Cursor") @description("Ensures that the mark always follows the cursor, if the cursor value is updated.") @no_callee_helper @default(1) @display_name("Track Mark To Cursor") @description("Ensures that the mark always follows the cursor, if the cursor value is updated.")
'track_mark_to_cursor': bool, 'track_mark_to_cursor': bool,
@default(1) @display_name("Allow Mutation") @description("Allows operations which mutate memory.") @no_callee_helper @default(1) @display_name("Allow Mutation") @description("Allows operations which mutate memory.")
'allow_mutation': bool, 'allow_mutation': bool,
@default(0) @display_name("Automatically Size Columns") @description("Determines the number of columns based on the available space.") @no_callee_helper @default(0) @display_name("Automatically Size Columns") @description("Determines the number of columns based on the available space.")
'auto_columns': bool, 'auto_columns': bool,
@default(1) @display_name("Peek As Unsigned") 'peek_as_unsigned': bool, @no_callee_helper @default(1) @display_name("Peek As Unsigned") 'peek_as_unsigned': bool,
@default(1) @display_name("Peek As Signed") 'peek_as_signed': bool, @no_callee_helper @default(1) @display_name("Peek As Signed") 'peek_as_signed': bool,
@default(1) @display_name("Peek As Float") 'peek_as_float': bool, @no_callee_helper @default(1) @display_name("Peek As Float") 'peek_as_float': bool,
@display_name("Extra Peek Types") @description("A list of types as which to interpret selected memory.") @no_callee_helper @display_name("Extra Peek Types") @description("A list of types as which to interpret selected memory.")
'peek_types': set, 'peek_types': set,
} }
``` ```
@@ -627,7 +630,7 @@ RD_VocabTable:
//- rjf: @schema bitmap //- rjf: @schema bitmap
{ {
bitmap, bitmap, 1,
``` ```
@inherit(tab) x: @inherit(tab) x:
{ {
@@ -643,7 +646,7 @@ RD_VocabTable:
//- rjf: @schema color //- rjf: @schema color
{ {
color, color, 1,
``` ```
@inherit(tab) x: @inherit(tab) x:
{ {
@@ -655,7 +658,7 @@ RD_VocabTable:
//- rjf: @schema geo3d //- rjf: @schema geo3d
{ {
geo3d, geo3d, 1,
``` ```
@inherit(tab) x: @inherit(tab) x:
{ {
@@ -673,7 +676,7 @@ RD_VocabTable:
//- rjf: @schema getting_started //- rjf: @schema getting_started
{ {
getting_started, getting_started, 0,
``` ```
@inherit(tab) x: @inherit(tab) x:
{ {
@@ -683,7 +686,7 @@ RD_VocabTable:
//- rjf: @schema target //- rjf: @schema target
{ {
target, target, 0,
``` ```
@row_commands(@cmd_line save_cfg_to_project, enable_cfg, launch_and_run, launch_and_step_into, duplicate_cfg, remove_cfg) @row_commands(@cmd_line save_cfg_to_project, enable_cfg, launch_and_run, launch_and_step_into, duplicate_cfg, remove_cfg)
@collection_commands(add_target) @collection_commands(add_target)
@@ -706,7 +709,7 @@ RD_VocabTable:
//- rjf: @schema breakpoint //- rjf: @schema breakpoint
{ {
breakpoint, breakpoint, 0,
``` ```
@row_commands(enable_cfg, duplicate_cfg, remove_cfg) @row_commands(enable_cfg, duplicate_cfg, remove_cfg)
@collection_commands(toggle_breakpoint, add_breakpoint, add_address_breakpoint, add_function_breakpoint, clear_breakpoints) @collection_commands(toggle_breakpoint, add_breakpoint, add_address_breakpoint, add_function_breakpoint, clear_breakpoints)
@@ -728,7 +731,7 @@ RD_VocabTable:
//- rjf: @schema watch_pin //- rjf: @schema watch_pin
{ {
watch_pin, watch_pin, 0,
``` ```
@row_commands(duplicate_cfg, remove_cfg) @row_commands(duplicate_cfg, remove_cfg)
@collection_commands(add_watch_pin, toggle_watch_pin) @collection_commands(add_watch_pin, toggle_watch_pin)
@@ -743,7 +746,7 @@ RD_VocabTable:
//- rjf: @schema debug_info //- rjf: @schema debug_info
{ {
debug_info, debug_info, 0,
``` ```
@row_commands(enable_cfg, duplicate_cfg, remove_cfg) @row_commands(enable_cfg, duplicate_cfg, remove_cfg)
@collection_commands(load_debug_info) @collection_commands(load_debug_info)
@@ -758,49 +761,49 @@ RD_VocabTable:
//- rjf: @schema file_path_map //- rjf: @schema file_path_map
{ {
file_path_map, file_path_map, 0,
```@collection_commands(add_file_path_map) @row_commands(remove_cfg) x:{'source': @no_relativize path, 'dest': @no_relativize path}```, ```@collection_commands(add_file_path_map) @row_commands(remove_cfg) x:{'source': @no_relativize path, 'dest': @no_relativize path}```,
} }
//- rjf: @schema type_view //- rjf: @schema type_view
{ {
type_view, type_view, 0,
```@collection_commands(add_type_view) @row_commands(remove_cfg) x:{'type':expr_string, 'expr':expr_string}```, ```@collection_commands(add_type_view) @row_commands(remove_cfg) x:{'type':expr_string, 'expr':expr_string}```,
} }
//- rjf: @schema recent_project //- rjf: @schema recent_project
{ {
recent_project, recent_project, 0,
```x:{'path':path}```, ```x:{'path':path}```,
} }
//- rjf: @schema recent_file //- rjf: @schema recent_file
{ {
recent_file, recent_file, 0,
```x:{'path':path}```, ```x:{'path':path}```,
} }
//- rjf: @schema machine //- rjf: @schema machine
{ {
machine, machine, 0,
```x:{'label':code_string, @no_expand 'active':bool, 'unattached_processes':set, 'processes':set}```, ```x:{'label':code_string, @no_expand 'active':bool, 'unattached_processes':set, 'processes':set}```,
} }
//- rjf: @schema process //- rjf: @schema process
{ {
process, process, 0,
```x:{'label':code_string, 'id':u64, @no_expand 'active':bool, 'modules':set, 'threads':set}```, ```x:{'label':code_string, 'id':u64, @no_expand 'active':bool, 'modules':set, 'threads':set}```,
} }
//- rjf: @schema module //- rjf: @schema module
{ {
module, module, 0,
```x:{'exe':path, 'dbg':path, 'vaddr_range':vaddr_range}```, ```x:{'exe':path, 'dbg':path, 'vaddr_range':vaddr_range}```,
} }
//- rjf: @schema thread //- rjf: @schema thread
{ {
thread, thread, 0,
```x:{'label':code_string, 'id':u64, @no_expand 'active':bool, 'call_stack':set}```, ```x:{'label':code_string, 'id':u64, @no_expand 'active':bool, 'call_stack':set}```,
} }
} }
@@ -808,12 +811,13 @@ RD_VocabTable:
@struct RD_NameSchemaInfo: @struct RD_NameSchemaInfo:
{ {
`String8 name`; `String8 name`;
`B32 is_view`;
`String8 schema`; `String8 schema`;
} }
@data(RD_NameSchemaInfo) rd_name_schema_info_table: @data(RD_NameSchemaInfo) rd_name_schema_info_table:
{ {
@expand(RD_SchemaTable a) `{str8_lit_comp("$(a.name)"), str8_lit_comp("$(a.schema)")}` @expand(RD_SchemaTable a) `{str8_lit_comp("$(a.name)"), $(a.is_view), str8_lit_comp("$(a.schema)")}`
} }
//////////////////////////////// ////////////////////////////////
+38 -2
View File
@@ -5988,7 +5988,13 @@ rd_window_frame(void)
} }
first = 0; first = 0;
UI_Key arg_key = ui_key_from_stringf(ui_active_seed_key(), "###arg_%p", child); UI_Key arg_key = ui_key_from_stringf(ui_active_seed_key(), "###arg_%p", child);
DR_FStrList arg_fstrs = rd_fstrs_from_code_string(scratch.arena, 1.f, 0, code_default, child->string); String8 arg_string = child->string;
B32 is_optional = md_node_has_tag(child, str8_lit("optional"), 0);
if(is_optional)
{
arg_string = str8f(scratch.arena, "[%S=...]", child->string);
}
DR_FStrList arg_fstrs = rd_fstrs_from_code_string(scratch.arena, 1.f, 0, code_default, arg_string);
if(child == ws->autocomp_cursor_info.arg_schema) if(child == ws->autocomp_cursor_info.arg_schema)
{ {
ui_set_next_flags(UI_BoxFlag_DrawSideBottom); ui_set_next_flags(UI_BoxFlag_DrawSideBottom);
@@ -6013,6 +6019,11 @@ rd_window_frame(void)
ui_spacer(ui_em(0.5f, 1.f)); ui_spacer(ui_em(0.5f, 1.f));
UI_TagF("weak") ui_label(display_name); UI_TagF("weak") ui_label(display_name);
} }
if(is_optional)
{
ui_spacer(ui_em(0.5f, 1.f));
UI_TagF("weak") ui_labelf("(Optional)");
}
} }
UI_TagF("weak") rd_label(desc); UI_TagF("weak") rd_label(desc);
} }
@@ -9205,7 +9216,7 @@ rd_set_autocomp_regs_(E_Eval dst_eval, RD_Regs *regs)
// rjf: calculate most general list expression, given the dst_eval space // rjf: calculate most general list expression, given the dst_eval space
B32 force_allow = 0; B32 force_allow = 0;
B32 expr_based_replace = 1; B32 expr_based_replace = 1;
String8 list_expr = str8_lit("query:locals, query:globals, query:thread_locals, query:procedures, query:types, query:constants"); String8 list_expr = str8_lit("query:locals, query:views, query:globals, query:thread_locals, query:procedures, query:types, query:constants");
{ {
E_TypeKey maybe_enum_type = e_type_key_unwrap(dst_eval.irtree.type_key, E_TypeUnwrapFlag_AllDecorative & ~E_TypeUnwrapFlag_Enums); E_TypeKey maybe_enum_type = e_type_key_unwrap(dst_eval.irtree.type_key, E_TypeUnwrapFlag_AllDecorative & ~E_TypeUnwrapFlag_Enums);
if(dst_eval.space.kind == RD_EvalSpaceKind_MetaCfg) if(dst_eval.space.kind == RD_EvalSpaceKind_MetaCfg)
@@ -11286,6 +11297,31 @@ rd_frame(void)
} }
} }
//- rjf: add macro for views
{
String8 names[] =
{
str8_lit("views"),
};
for EachElement(idx, names)
{
String8 name = names[idx];
E_TypeKey type_key = e_type_key_cons(.kind = E_TypeKind_Set,
.flags = E_TypeFlag_StubSingleLineExpansion,
.name = name,
.access = E_TYPE_ACCESS_FUNCTION_NAME(views),
.expand =
{
.info = E_TYPE_EXPAND_INFO_FUNCTION_NAME(views),
.range = E_TYPE_EXPAND_RANGE_FUNCTION_NAME(views),
});
E_Expr *expr = e_push_expr(scratch.arena, E_ExprKind_LeafOffset, r1u64(0, 0));
expr->type_key = type_key;
expr->space = e_space_make(RD_EvalSpaceKind_MetaQuery);
e_string2expr_map_insert(scratch.arena, macro_map, name, expr);
}
}
//- rjf: build schema types & cache (name -> type) mapping //- rjf: build schema types & cache (name -> type) mapping
for EachElement(idx, rd_name_schema_info_table) for EachElement(idx, rd_name_schema_info_table)
{ {
+1
View File
@@ -14,6 +14,7 @@ enum
RD_EvalSpaceKind_MetaCfg, RD_EvalSpaceKind_MetaCfg,
RD_EvalSpaceKind_MetaCmd, RD_EvalSpaceKind_MetaCmd,
RD_EvalSpaceKind_MetaTheme, RD_EvalSpaceKind_MetaTheme,
RD_EvalSpaceKind_MetaView,
RD_EvalSpaceKind_MetaCtrlEntity, RD_EvalSpaceKind_MetaCtrlEntity,
RD_EvalSpaceKind_MetaUnattachedProcess, RD_EvalSpaceKind_MetaUnattachedProcess,
RD_EvalSpaceKind_MetaCallStackTree, RD_EvalSpaceKind_MetaCallStackTree,
+62
View File
@@ -157,6 +157,68 @@ E_TYPE_EXPAND_RANGE_FUNCTION_DEF(themes)
} }
} }
////////////////////////////////
//~ rjf: `views` Type Hooks
E_TYPE_ACCESS_FUNCTION_DEF(views)
{
E_IRTreeAndType result = {&e_irnode_nil};
if(expr->kind == E_ExprKind_ArrayIndex &&
expr->first->next->kind == E_ExprKind_LeafStringLiteral)
{
Temp scratch = scratch_begin(&arena, 1);
String8 view_name = expr->first->next->string;
E_TypeKey view_type = e_type_key_cons(.kind = E_TypeKind_U64, .name = str8_lit("view"));
result.type_key = view_type;
result.mode = E_Mode_Null;
result.root = e_irtree_set_space(arena, e_space_make(RD_EvalSpaceKind_MetaView), e_irtree_const_u(arena, e_id_from_string(view_name)));
scratch_end(scratch);
}
return result;
}
E_TYPE_EXPAND_INFO_FUNCTION_DEF(views)
{
E_TypeExpandInfo result = {0};
{
Temp scratch = scratch_begin(&arena, 1);
//- rjf: gather cfgs
String8List names = {0};
for EachElement(idx, rd_name_schema_info_table)
{
if(rd_name_schema_info_table[idx].is_view)
{
String8 name = rd_name_schema_info_table[idx].name;
FuzzyMatchRangeList name_matches = fuzzy_match_find(scratch.arena, filter, name);
if(name_matches.count == name_matches.needle_part_count)
{
str8_list_push(scratch.arena, &names, name);
}
}
}
//- rjf: flatten & build accelerator
String8Array *accel = push_array(arena, String8Array, 1);
*accel = str8_array_from_list(arena, &names);
result.user_data = accel;
result.expr_count = accel->count;
scratch_end(scratch);
}
return result;
}
E_TYPE_EXPAND_RANGE_FUNCTION_DEF(views)
{
U64 out_idx = 0;
String8Array *accel = (String8Array *)user_data;
for(U64 idx = idx_range.min; idx < idx_range.max; idx += 1, out_idx += 1)
{
String8 name = accel->v[idx];
evals_out[out_idx] = e_eval_from_string(name);
}
}
//////////////////////////////// ////////////////////////////////
//~ rjf: `locals` Type Hooks //~ rjf: `locals` Type Hooks
+7
View File
@@ -18,6 +18,13 @@ E_TYPE_ACCESS_FUNCTION_DEF(themes);
E_TYPE_EXPAND_INFO_FUNCTION_DEF(themes); E_TYPE_EXPAND_INFO_FUNCTION_DEF(themes);
E_TYPE_EXPAND_RANGE_FUNCTION_DEF(themes); E_TYPE_EXPAND_RANGE_FUNCTION_DEF(themes);
////////////////////////////////
//~ rjf: `views` Type Hooks
E_TYPE_ACCESS_FUNCTION_DEF(views);
E_TYPE_EXPAND_INFO_FUNCTION_DEF(views);
E_TYPE_EXPAND_RANGE_FUNCTION_DEF(views);
//////////////////////////////// ////////////////////////////////
//~ rjf: `locals` Type Hooks //~ rjf: `locals` Type Hooks