21 个版本

0.22.6 2024年5月5日
0.22.2 2024年3月17日
0.20.1 2021年11月21日
0.19.2 2021年3月8日
0.1.5 2019年3月13日

#250 in 解析器实现

Download history 23770/week @ 2024-05-03 25721/week @ 2024-05-10 21605/week @ 2024-05-17 27481/week @ 2024-05-24 26639/week @ 2024-05-31 26173/week @ 2024-06-07 24626/week @ 2024-06-14 26524/week @ 2024-06-21 21935/week @ 2024-06-28 24089/week @ 2024-07-05 24202/week @ 2024-07-12 23541/week @ 2024-07-19 27057/week @ 2024-07-26 24375/week @ 2024-08-02 25495/week @ 2024-08-09 19835/week @ 2024-08-16

101,163 每月下载量
用于 45 crate(其中 26 个直接使用)

MIT 许可协议

665KB
16K SLoC

C 11K SLoC // 0.0% comments Rust 4.5K SLoC // 0.0% comments

Tree-sitter Highlight

crates.io badge

使用方法

将此 crate 和您想要解析的语言的特定 crate 添加到您的 Cargo.toml

[dependencies]
tree-sitter-highlight = "^0.21.0"
tree-sitter-javascript = "0.20.3"

定义您将识别的高亮名称列表

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

创建一个高亮器。您需要为每个用于语法高亮的线程创建一个

use tree_sitter_highlight::Highlighter;

let mut highlighter = Highlighter::new();

从语言仓库的 queries 目录中加载一些高亮查询

use tree_sitter_highlight::HighlightConfiguration;

let javascript_language = tree_sitter_javascript::language();

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

配置识别的名称

javascript_config.configure(&highlight_names);

高亮一些代码

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");
        },
    }
}

highlight 的最后一个参数是一个 语言注入 回调。这允许在 Tree-sitter 检测到嵌入式文档(例如,HTML 中 script 标签内的 JavaScript 代码)时检索其他语言。

依赖项

~2.5–4MB
~75K SLoC