Set a per-language flag for enabling virtual indentation
This commit is contained in:
parent
5ed8767819
commit
a5f13529c3
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue