4coder/code/custom/languages/tree_sitter_language_base.h

74 lines
2.3 KiB
C

/*
tree_sitter_language_base.h
This file is a template from which you can set up new languages for syntax highlighting,
go-to-definition, and virtual whitespace in 4coder.
BEFORE YOU START: go read the Adding a Language instructions in README.md
1. find and replace "NEWLANG" with <your language identifier>
Example: "NEWLANG" -> "RUST" and "newlang" -> "rust"
2. Go through each TODO in this file and complete it
3. Include this file from "code/custom/4coder_tree_sitter.cpp"
4. Add "tree_sitter_register_newlang(app);" to 4coder_tree_sitter.cpp::register_all_languages()
5. Compile and run
If you are confused about what to do, go look at tree_sitter_cpp.h as a working example.
*/
#ifndef TREE_SITTER_LANGUAGE_BASE_H
#define TREE_SITTER_LANGUAGE_BASE_H
String_Const_u8 TS_NEWLANG_EXTENSIONS[] = [
// TODO(PS): fill out this array with the extensions you want to be treated
// as this language.
SCu8("ext1"),
SCu8("ext2"),
];
String_Const_u8 TS_NEWLANG_TAGS_QUERY_SCM = string_u8_litexpr(R"DONE(
; TODO - paste your grammars tags query here
; Important - if you want virtual indentation, leave these tag queries here
(_ "{" @scope_begin "}" @scope_end )
(_ "(" @scope_begin ")" @scope_end )
(_ "[" @scope_begin "]" @scope_end )
)DONE");
String_Const_u8 TS_NEWLANG_HIGHLIGHT_QUERY_SCM = string_u8_litexpr(R"DONE(
; TODO - paste your grammars highlights query here
)DONE");
// NOTE(PS): depending on how you built your scanner, it might not need to be inside an extern "C" block
extern "C" {
TSLanguage* tree_sitter_newlang;
}
void
tree_sitter_register_newlang(Application_Links* app)
{
TSLanguage* language = tree_sitter_newlang();
Tree_Sitter_Language_Queries queries = {};
queries.ptr[Tree_Sitter_Language_Query_Highlights] = tree_sitter_query_new(app, language, TS_NEWLANG_HIGHLIGHT_QUERY_SCM);
queries.ptr[Tree_Sitter_Language_Query_Tags] = tree_sitter_query_new(app, language, TS_NEWLANG_TAGS_QUERY_SCM);
// TODO(PS): set this to zero if your language can not make use of virtual indentation (like python)
Tree_Sitter_Language_Flags flags = (
Tree_Sitter_Language_Can_Receive_Virtual_Indent
);
for (int i = 0; i < ArrayCount(TS_NEWLANG_EXTENSIONS); i++)
{
String_Const_u8 ext = TS_NEWLANG_EXTENSIONS[i];
tree_sitter_register_language(ext, language, queries, flags);
}
}
#endif //TREE_SITTER_LANGUAGE_BASE_H