Tree-sitter grammar and syntax highlight queries for the Tera templating language.
[!TIP] This repository provides support for Helix and Neovim. For Visual Studio Code support, see uncenter/vscode-tera. For Zed support, see uncenter/zed-tera.
Helix with tree-sitter-tera. Screenshot taken with the catppuccin/helix theme.
Neovim with tree-sitter-tera. Screenshot taken with the catppuccin/nvim theme.
languages.toml
configuration file:[[grammar]]
name = "tera"
[grammar.source]
git = "https://github.com/uncenter/tree-sitter-tera"
rev = "main"
[[language]]
file-types = ["tera"]
grammar = "tera"
injection-regex = "tera"
name = "tera"
scope = "source.tera"
block-comment-tokens = [
{ start = "{#", end = "#}" },
{ start = "{#-", end = "-#}" },
{ start = "{#", end = "-#}" },
{ start = "{#-", end = "#}" },
]
[language.auto-pairs]
"\"" = "\""
"'" = "'"
"`" = "`"
"(" = ")"
"[" = "]"
"{" = "}"
"%" = "%"
hx --grammar fetch
to fetch the grammar from this repository, and then hx --grammar build
to build the grammars.just helix sync
or just helix link
to copy or symlink the Helix-specific queries to Helix's runtime directory, as unfortunately queries are not used from the grammar repository by default.[!IMPORTANT] Helix uses the reverse query precedence ordering, meaning that the first matching highlight query is used rather than last; this is the opposite behavior of Neovim and Zed, both of which use the last matching highlight query - think of it like CSS, where queries gain precedence by being located further down. Helix does seemingly plan to change this soon, but for now this repository has a separate folder for Helix-converted queries (built with
just helix build
, using tree-sitter-query-reverser.
Extend your nvim-treesitter plugin with this Tera plugin.
{
"nvim-treesitter/nvim-treesitter",
config = function()
-- setup treesitter with config
end,
dependencies = {
...
{ "uncenter/tree-sitter-tera", build = ":TSUpdate tera" },
...
},
build = ":TSUpdate",
},
local parser_config = require("nvim-treesitter.parsers").get_parser_configs()
parser_config.tera = {
install_info = {
url = "https://github.com/uncenter/tree-sitter-tera",
files = { "src/parser.c" },
branch = "main",
},
filetype = "tera",
}
Run :TSInstall tera
in Neovim to install the above parser.