#parser #incremental #tagging #syntax #parse-tree

npezza93_tree-sitter-tags

提取标签信息的库

3 个不稳定版本

使用旧的 Rust 2015

0.21.1 2024 年 4 月 18 日
0.21.0 2024 年 2 月 23 日
0.20.2 2023 年 3 月 17 日

#1386 in 解析器实现


ttags 中使用

自定义许可

41KB
835

Tree-sitter Tags

crates.io badge

用法

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

[dependencies]
tree-sitter-tags = "0.19"
tree-sitter-javascript = "0.19"
tree-sitter-python = "0.19"

创建一个标签上下文。您需要为每个用于标签计算的线程创建一个

use tree_sitter_tags::TagsContext;

let context = TagsContext::new();

从某些语言仓库的 queries 目录中加载一些标签查询

use tree_sitter_tags::TagsConfiguration;

let python_config = TagsConfiguration::new(
    tree_sitter_python::language(),
    tree_sitter_python::TAGGING_QUERY,
    "",
).unwrap();

let javascript_config = TagsConfiguration::new(
    tree_sitter_javascript::language(),
    tree_sitter_javascript::TAGGING_QUERY,
    tree_sitter_javascript::LOCALS_QUERY,
).unwrap();

计算某些源代码的代码导航标签

let tags = context.generate_tags(
    &javascript_config,
    b"class A { getB() { return c(); } }",
    None,
);

for tag in tags {
    println!("kind: {:?}", tag.kind);
    println!("range: {:?}", tag.range);
    println!("name_range: {:?}", tag.name_range);
    println!("docs: {:?}", tag.docs);
}

依赖项

~3.5–5MB
~95K SLoC