#tree-sitter #grep #code-search #search

app dook

在您的代码中查找定义

2个版本

0.1.1 2024年7月27日
0.1.0 2024年7月1日

#452 in 开发工具

Download history 130/week @ 2024-06-28 13/week @ 2024-07-05 143/week @ 2024-07-26 10/week @ 2024-08-02

153 每月下载量

MIT 许可证

44KB
856

mascot

dook:代码中的定义查找

使用tree-sitterripgrep 查找代码定义,并使用 bat 进行美化打印。

安装

安装 ripgrepbat。使用以下命令构建和安装:

cargo install --git https://github.com/pteromys/dook

示例用法

pteromys@delia ~/src/dook $ dook write
───────┬────────────────────────────────────────────────────────────────
       │ File: ./src/paging.rs
───────┼────────────────────────────────────────────────────────────────
  61impl std::io::Write for MaybePager {
 ...   │ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ 8< ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─
  69fn write(&mut self, buf: &[u8]) -> std::io::Result<usize> {
  70match self.pipe() {
  71Some(pipe) => pipe.write(buf),
  72None => std::io::stdout().write(buf),
  73}
  74}
───────┴────────────────────────────────────────────────────────────────

还尝试查找赋值、类定义等——为什么你必须在搜索之前弄清楚它们的区别?在旧的javascript代码库中实际上并没有真正的区别!

支持的语言

  • c
  • c++
  • go
  • javascript
  • python
  • rust
  • typescript
  • tsx

替代品和先例

目标与非目标

  • 查找定义。
  • 显示足够多的上下文以回答查找定义时通常提出的问题。
  • 最小化用户输入
    • 用户在输入第一个调用之前需要思考的量
    • 用户需要阅读或滚动以查看所需内容的输出量
    • 调用次数
    • 每个调用需要输入的量
  • 平衡响应性和全面性:明确地说,在用户想到后续查询之前返回结果。
  • 如果必要,为了提高显示相关上下文的机会,可以牺牲一致性和机器可读性。(如果你想得到机器可预测的输出,请使用cq代替。)
  • 为了准确性和我自己的开发时间,牺牲磁盘和RAM占用——tree-sitter解析器可能在磁盘上占用每个约2兆,而你正在搜索的代码库可能更大。但尽量保持RAM使用量比你可能拖延打开的IDE小一个数量级左右。

可能未来的工作

  • 更好的语言检测(例如,llvm头文件是C++,但大多数狡猾地以小写.h结尾)
  • 更多语言(以及更多语言的测试 😱)
  • 显示对函数的所有调用(git grep -W已经做到了大部分,所以我不太关心)
  • 结束这个项目,并将其变为ripgrep的功能(可能不可行,因为所有语言的解析器加起来可能会使二进制文件大小很大;然而,也许rubicon提供了一些希望)
  • 升级tree-sitter版本,以便我可以创建更好的模式。当前的C和C++查询模式让我想尖叫。

许可证

MIT

依赖项

~0–23MB
~523K SLoC