Thanks to visit codestin.com
Credit goes to lib.rs

43 releases

0.26.3 Dec 13, 2025
0.25.10 Sep 22, 2025
0.25.8 Jul 13, 2025
0.25.3 Mar 5, 2025
0.1.5 Mar 13, 2019

#1949 in Parser implementations

Codestin Search App Codestin Search App Codestin Search App Codestin Search App Codestin Search App Codestin Search App Codestin Search App Codestin Search App Codestin Search App Codestin Search App Codestin Search App Codestin Search App Codestin Search App Codestin Search App Codestin Search App Codestin Search App Codestin Search App

115,220 downloads per month
Used in 103 crates (53 directly)

MIT license

735KB
18K SLoC

Codestin Search App Codestin Search App

Tree-sitter Highlight

crates.io badge

Usage

Add this crate, and the language-specific crates for whichever languages you want to parse, to your Cargo.toml:

[dependencies]
tree-sitter-highlight = "0.25.4"
tree-sitter-javascript = "0.23.1"

Define the list of highlight names that you will recognize:

let highlight_names = [
    "attribute",
    "comment",
    "constant",
    "constant.builtin",
    "constructor",
    "embedded",
    "function",
    "function.builtin",
    "keyword",
    "module",
    "number",
    "operator",
    "property",
    "property.builtin",
    "punctuation",
    "punctuation.bracket",
    "punctuation.delimiter",
    "punctuation.special",
    "string",
    "string.special",
    "tag",
    "type",
    "type.builtin",
    "variable",
    "variable.builtin",
    "variable.parameter",
];

Create a highlighter. You need one of these for each thread that you're using for syntax highlighting:

use tree_sitter_highlight::Highlighter;

let mut highlighter = Highlighter::new();

Load some highlighting queries from the queries directory of the language repository:

use tree_sitter_highlight::HighlightConfiguration;

let javascript_language = tree_sitter_javascript::LANGUAGE.into();

let mut javascript_config = HighlightConfiguration::new(
    javascript_language,
    "javascript",
    tree_sitter_javascript::HIGHLIGHT_QUERY,
    tree_sitter_javascript::INJECTIONS_QUERY,
    tree_sitter_javascript::LOCALS_QUERY,
).unwrap();

Configure the recognized names:

javascript_config.configure(&highlight_names);

Highlight some code:

use tree_sitter_highlight::HighlightEvent;

let highlights = highlighter.highlight(
    &javascript_config,
    b"const x = new Y();",
    None,
    |_| None
).unwrap();

for event in highlights {
    match event.unwrap() {
        HighlightEvent::Source {start, end} => {
            eprintln!("source: {start}-{end}");
        },
        HighlightEvent::HighlightStart(s) => {
            eprintln!("highlight style started: {s:?}");
        },
        HighlightEvent::HighlightEnd => {
            eprintln!("highlight style ended");
        },
    }
}

The last parameter to highlight is a language injection callback. This allows other languages to be retrieved when Tree-sitter detects an embedded document (for example, a piece of JavaScript code inside a script tag within HTML).

Dependencies

~2.2–4MB
~75K SLoC