2 个版本
0.1.1 | 2024 年 3 月 20 日 |
---|---|
0.1.0 | 2024 年 3 月 20 日 |
在 开发工具 中排名 #1857
22KB
321 行(不包括注释)
function grep
在文件中查找具有给定名称的函数,由 tree sitter 驱动。
使用最新的 crates.io,在您的 cargo.toml 下的 [dependencies]
部分添加 function-grep = "0.1.1"
。
命令行界面 (CLI)
要作为 CLI 工具安装,请运行
cargoinstall function-grep --示例=function-grep
.
然后运行它,使用 function-grep <文件> <名称>
。
要查看帮助,运行 function-grep --help
。
示例
当你知道语言时
use function_grep::{supported_languages::Rust, ParsedFile};
use tree_sitter::Point;
use tree_sitter::Range;
let results = ParsedFile::search_file("foo", "fn foo() {}\n fn bar()\n", &Rust).unwrap();
println!("{:?}", results.results());
assert_eq!(results.results(), &[Range { start_byte: 0, end_byte: 11, start_point: Point { row: 0, column: 0 }, end_point: Point { row: 0, column: 11 } }]);
assert_eq!(results.to_string(), "1: fn foo() {}".to_string())
当你不知道语言时
use function_grep::{supported_languages, ParsedFile};
use tree_sitter::Point;
use tree_sitter::Range;
let results = ParsedFile::search_file_with_name("foo", "fn foo() {}\n fn bar()\n", "test.rs", supported_languages::predefined_languages()).unwrap();
println!("{:?}", results.results());
assert_eq!(results.results(), &[Range { start_byte: 0, end_byte: 11, start_point: Point { row: 0, column: 0 }, end_point: Point { row: 0, column: 11 } }]);
assert_eq!(results.to_string(), "1: fn foo() {}".to_string())
更多示例
要查看更完整的示例,请查看 main 示例。要将此作为 CLI 工具使用,请参阅 此处。
使用自定义语言
use function_grep::{supported_languages::SupportedLanguage, construct_language, ParsedFile};
use tree_sitter::Point;
use tree_sitter::Range;
use tree_sitter::Language;
#[cfg(feature = "rust")]
construct_language!(Rust(tree_sitter_rust::language()).[rs]?=name->
"((function_item
name: (identifier) @method-name)
@method-definition
(#eq? @method-name {name}))
((let_declaration
pattern: (identifier) @method-name
value: (closure_expression)) @method-definition
(#eq? @method-name {name}))
((const_item
name: (identifier) @method-name
value: (closure_expression)) @method-definition
(#eq? @method-name {name}))
((static_item
name: (identifier) @method-name
value: (closure_expression)) @method-definition
(#eq? @method-name {name}))"
);
let results = ParsedFile::search_file("foo", "fn foo() {}\n fn bar()\n", &Rust).unwrap();
println!("{:?}", results.results());
assert_eq!(results.results(), &[Range { start_byte: 0, end_byte: 11, start_point: Point { row: 0, column: 0 }, end_point: Point { row: 0, column: 11 } }]);
assert_eq!(results.to_string(), "1: fn foo() {}".to_string())
预定义语言
内置了对 Python、C、Rust、Ocaml 和 Java 的支持。每个预定义语言都是默认启用的功能,要仅选择特定语言,请使用 no-default-fatures。
依赖关系
~3–24MB
~729K SLoC