2 个版本

0.1.1 2024 年 3 月 20 日
0.1.0 2024 年 3 月 20 日

开发工具 中排名 #1857

MIT 许可证

22KB
321 行(不包括注释)

crates.io Crates.io msrv

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