diff --git a/code/custom/4coder_code_index.cpp b/code/custom/4coder_code_index.cpp index f83b5d1e..d5ba09e0 100644 --- a/code/custom/4coder_code_index.cpp +++ b/code/custom/4coder_code_index.cpp @@ -1199,6 +1199,11 @@ layout_virt_indent_index(Application_Links *app, Arena *arena, Buffer_ID buffer, Layout_Item_List result = {}; b32 enable_virtual_whitespace = def_get_config_b32(vars_save_string_lit("enable_virtual_whitespace")); + Tree_Sitter_Language_Definition* language = tree_sitter_language_for_buffer(app, buffer); + enable_virtual_whitespace &= ( + language != 0 && HasFlag(language->flags, Tree_Sitter_Language_Can_Receive_Virtual_Indent) + ); + if (enable_virtual_whitespace){ code_index_lock(); Code_Index_File *file = code_index_get_file(buffer); diff --git a/code/custom/4coder_tree_sitter.cpp b/code/custom/4coder_tree_sitter.cpp index db182f8f..2c92e4ea 100644 --- a/code/custom/4coder_tree_sitter.cpp +++ b/code/custom/4coder_tree_sitter.cpp @@ -32,7 +32,7 @@ tree_sitter_query_new(Application_Links* app, TSLanguage* language, String_Const } function void -tree_sitter_register_language(String_Const_u8 ext, TSLanguage* language, Tree_Sitter_Language_Queries queries) +tree_sitter_register_language(String_Const_u8 ext, TSLanguage* language, Tree_Sitter_Language_Queries queries, Tree_Sitter_Language_Flags flags) { Tree_Sitter_Language_Definition* lang = 0; u64 hash = table_hash_u8(ext.str, ext.size); @@ -55,6 +55,7 @@ tree_sitter_register_language(String_Const_u8 ext, TSLanguage* language, Tree_Si lang->extension = push_string_copy(&tree_sitter_languages.arena, ext); lang->language = language; lang->queries = queries; + lang->flags = flags; } } diff --git a/code/custom/4coder_tree_sitter.h b/code/custom/4coder_tree_sitter.h index a0991777..e5a79581 100644 --- a/code/custom/4coder_tree_sitter.h +++ b/code/custom/4coder_tree_sitter.h @@ -17,6 +17,12 @@ struct Tree_Sitter_Language_Queries TSQuery* ptr[Tree_Sitter_Language_Query_Count]; }; +typedef u32 Tree_Sitter_Language_Flags; +enum +{ + Tree_Sitter_Language_Can_Receive_Virtual_Indent = 0x1 +}; + struct Tree_Sitter_Language_Definition { String_Const_u8 extension; @@ -24,6 +30,7 @@ struct Tree_Sitter_Language_Definition TSLanguage* language; Tree_Sitter_Language_Queries queries; + Tree_Sitter_Language_Flags flags; Tree_Sitter_Language_Definition* next; }; @@ -34,12 +41,6 @@ struct Tree_Sitter_Languages Tree_Sitter_Language_Definition* languages[4096]; }; -global Tree_Sitter_Languages tree_sitter_languages; - - -CUSTOM_ID(attachment, buffer_tree_sitter_data_id); -CUSTOM_ID(attachment, buffer_tree_sitter_parse_task_id); - struct Buffer_Tree_Sitter_Data { TSTree* tree; @@ -84,11 +85,24 @@ struct Tree_Sitter_Code_Index_Parse_State b8 ok; }; -function TSQuery* tree_sitter_query_new(Application_Links* app, TSLanguage* language, String_Const_u8 query_string); -function void tree_sitter_register_language(String_Const_u8 ext, TSLanguage* language, Tree_Sitter_Language_Queries queries); +/////////////////////////////////////////////////////// +// Globals + +global Tree_Sitter_Languages tree_sitter_languages; + +CUSTOM_ID(attachment, buffer_tree_sitter_data_id); +CUSTOM_ID(attachment, buffer_tree_sitter_parse_task_id); b8 use_tree_sitter_code_indexing = true; b8 use_tree_sitter_token_coloring = true; + +/////////////////////////////////////////////////////// +// API + +function TSQuery* tree_sitter_query_new(Application_Links* app, TSLanguage* language, String_Const_u8 query_string); +function void tree_sitter_register_language(String_Const_u8 ext, TSLanguage* language, Tree_Sitter_Language_Queries queries, Tree_Sitter_Language_Flags flags); +function Tree_Sitter_Language_Definition* tree_sitter_language_for_buffer(Application_Links* app, Buffer_ID buffer_id); + function Tree_Sitter_Code_Index_Parse_State tree_sitter_code_index_update_single_buffer(Application_Links *app, Buffer_ID buffer_id); function void tree_sitter_code_index_update_tick(Application_Links *app); diff --git a/code/custom/languages/tree_sitter_bash.h b/code/custom/languages/tree_sitter_bash.h index 22abd254..f0414be1 100644 --- a/code/custom/languages/tree_sitter_bash.h +++ b/code/custom/languages/tree_sitter_bash.h @@ -74,7 +74,7 @@ tree_sitter_register_bash(Application_Links* app) TSLanguage* language = tree_sitter_bash(); Tree_Sitter_Language_Queries queries = {}; queries.ptr[Tree_Sitter_Language_Query_Highlights] = tree_sitter_query_new(app, language, TS_BASH_HIGHLIGHT_QUERY); - tree_sitter_register_language(SCu8("sh"), language, queries); + tree_sitter_register_language(SCu8("sh"), language, queries, 0); } #endif //TREE_SITTER_BASH_H diff --git a/code/custom/languages/tree_sitter_cpp.h b/code/custom/languages/tree_sitter_cpp.h index d7692fec..080f0fc2 100644 --- a/code/custom/languages/tree_sitter_cpp.h +++ b/code/custom/languages/tree_sitter_cpp.h @@ -201,11 +201,14 @@ tree_sitter_register_cpp(Application_Links* app) Tree_Sitter_Language_Queries queries = {}; queries.ptr[Tree_Sitter_Language_Query_Highlights] = tree_sitter_query_new(app, language, TS_CPP_HIGHLIGHT_QUERY_SCM); queries.ptr[Tree_Sitter_Language_Query_Tags] = tree_sitter_query_new(app, language, TS_CPP_TAGS_QUERY_SCM); - tree_sitter_register_language(SCu8("c"), language, queries); - tree_sitter_register_language(SCu8("cpp"), language, queries); - tree_sitter_register_language(SCu8("h"), language, queries); - tree_sitter_register_language(SCu8("hpp"), language, queries); - tree_sitter_register_language(SCu8("cc"), language, queries); + Tree_Sitter_Language_Flags flags = ( + Tree_Sitter_Language_Can_Receive_Virtual_Indent + ); + tree_sitter_register_language(SCu8("c"), language, queries, flags); + tree_sitter_register_language(SCu8("cpp"), language, queries, flags); + tree_sitter_register_language(SCu8("h"), language, queries, flags); + tree_sitter_register_language(SCu8("hpp"), language, queries, flags); + tree_sitter_register_language(SCu8("cc"), language, queries, flags); } #endif //TREE_SITTER_CPP_H diff --git a/code/custom/languages/tree_sitter_jai.h b/code/custom/languages/tree_sitter_jai.h index 834b17a6..6de8af95 100644 --- a/code/custom/languages/tree_sitter_jai.h +++ b/code/custom/languages/tree_sitter_jai.h @@ -17,6 +17,10 @@ String_Const_u8 TS_JAI_TAGS_QUERY = string_u8_litexpr(R"DONE( name: (identifier) @definition.type ) +("{" @scope_begin "}" @scope_end ) +("(" @scope_begin ")" @scope_end ) +("[" @scope_begin "]" @scope_end ) + )DONE"); // NOTE(PS): source: https://github.com/St0wy/tree-sitter-jai/blob/main/queries/highlights.scm @@ -292,7 +296,10 @@ tree_sitter_register_jai (Application_Links* app) Tree_Sitter_Language_Queries queries = {}; queries.ptr[Tree_Sitter_Language_Query_Highlights] = tree_sitter_query_new(app, language, TS_JAI_HIGHLIGHT_QUERY); queries.ptr[Tree_Sitter_Language_Query_Tags] = tree_sitter_query_new(app, language, TS_JAI_TAGS_QUERY); - tree_sitter_register_language(SCu8("jai"), language, queries); + Tree_Sitter_Language_Flags flags = ( + Tree_Sitter_Language_Can_Receive_Virtual_Indent + ); + tree_sitter_register_language(SCu8("jai"), language, queries, flags); } #endif //TREE_SITTER_JAI_H