2025-07-10 14:08:27 +00:00
|
|
|
/* date = July 8th 2025 10:13 am */
|
|
|
|
|
|
|
|
#ifndef FCODER_TREE_SITTER_H
|
|
|
|
#define FCODER_TREE_SITTER_H
|
|
|
|
|
|
|
|
#include <tree_sitter/api.h>
|
|
|
|
|
2025-07-12 00:18:11 +00:00
|
|
|
enum Tree_Sitter_Language_Query_Kind
|
|
|
|
{
|
|
|
|
Tree_Sitter_Language_Query_Highlights,
|
|
|
|
Tree_Sitter_Language_Query_Functions,
|
|
|
|
Tree_Sitter_Language_Query_Types,
|
|
|
|
|
|
|
|
Tree_Sitter_Language_Query_Count,
|
|
|
|
};
|
|
|
|
|
|
|
|
struct Tree_Sitter_Language_Queries
|
|
|
|
{
|
|
|
|
TSQuery* ptr[Tree_Sitter_Language_Query_Count];
|
|
|
|
};
|
|
|
|
|
2025-07-10 15:53:54 +00:00
|
|
|
struct Tree_Sitter_Language_Definition
|
2025-07-10 14:08:27 +00:00
|
|
|
{
|
2025-07-10 15:53:54 +00:00
|
|
|
String_Const_u8 extension;
|
|
|
|
u64 extension_hash;
|
|
|
|
|
|
|
|
TSLanguage* language;
|
2025-07-12 00:18:11 +00:00
|
|
|
Tree_Sitter_Language_Queries queries;
|
2025-07-10 15:53:54 +00:00
|
|
|
|
|
|
|
Tree_Sitter_Language_Definition* next;
|
|
|
|
};
|
|
|
|
|
|
|
|
struct Tree_Sitter_Languages
|
|
|
|
{
|
|
|
|
Arena arena;
|
|
|
|
Tree_Sitter_Language_Definition* languages[4096];
|
2025-07-10 14:08:27 +00:00
|
|
|
};
|
|
|
|
|
2025-07-10 15:53:54 +00:00
|
|
|
global Tree_Sitter_Languages tree_sitter_languages;
|
|
|
|
|
2025-07-10 14:08:27 +00:00
|
|
|
extern "C" {
|
|
|
|
TSLanguage *tree_sitter_cpp();
|
2025-07-10 19:10:17 +00:00
|
|
|
TSLanguage *tree_sitter_jai();
|
2025-07-10 14:08:27 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
CUSTOM_ID(attachment, buffer_tree_sitter_data_id);
|
|
|
|
CUSTOM_ID(attachment, buffer_tree_sitter_parse_task_id);
|
|
|
|
|
|
|
|
struct Buffer_Tree_Sitter_Data
|
|
|
|
{
|
|
|
|
TSTree* tree;
|
|
|
|
System_Mutex tree_mutex;
|
|
|
|
};
|
|
|
|
|
2025-07-10 15:53:54 +00:00
|
|
|
struct Tree_Sitter_Code_Index_Nest_Node
|
|
|
|
{
|
|
|
|
Tree_Sitter_Code_Index_Nest_Node* next;
|
|
|
|
Tree_Sitter_Code_Index_Nest_Node* prev;
|
|
|
|
Tree_Sitter_Code_Index_Nest_Node* parent;
|
|
|
|
Tree_Sitter_Code_Index_Nest_Node* child_first;
|
|
|
|
Tree_Sitter_Code_Index_Nest_Node* child_last;
|
|
|
|
|
|
|
|
Code_Index_Nest* nest;
|
|
|
|
};
|
|
|
|
|
|
|
|
struct Tree_Sitter_Code_Index_Nest_List
|
|
|
|
{
|
|
|
|
Tree_Sitter_Code_Index_Nest_Node* first;
|
|
|
|
Tree_Sitter_Code_Index_Nest_Node* last;
|
|
|
|
};
|
|
|
|
|
2025-07-10 14:08:27 +00:00
|
|
|
b8 use_tree_sitter_code_indexing = true;
|
2025-07-10 15:53:54 +00:00
|
|
|
b8 use_tree_sitter_token_coloring = true;
|
2025-07-10 14:08:27 +00:00
|
|
|
function void tree_sitter_code_index_update_tick(Application_Links *app);
|
|
|
|
|
|
|
|
#endif //FCODER_TREE_SITTER_H
|