Lzh on GitHub

list_code_definition_names

list_code_definition_names 工具通过列出指定目录顶级源文件中的代码定义,提供代码库的结构化概览。它通过显示行号和定义代码片段,帮助 Roo 理解代码架构。

list_code_definition_names 工具通过列出指定目录顶级源文件中的代码定义,提供代码库的结构化概览。它通过显示行号和定义代码片段,帮助 Roo 理解代码架构。

参数

该工具接受以下参数:

  • path(必需):要列出其顶级源代码定义的目录路径,该路径相对于当前工作目录。

功能与使用时机

该工具扫描指定目录顶层的源代码文件,并提取类、函数和接口等代码定义。它显示每个定义的行号和实际代码,提供一种快速方式来映射代码库的重要组件。

它在以下情况中使用:

  • 当 Roo 需要快速理解代码库架构时。
  • 当 Roo 需要在多个文件中定位重要的代码结构时。
  • 在规划现有代码的重构或扩展时。
  • 在使用其他工具深入研究实现细节之前。
  • 在识别代码库不同部分之间的关系时。

主要功能

  • 从源文件中提取类、函数、方法、接口以及其他定义。
  • 显示每个定义的行号和实际源代码
  • 支持多种编程语言,包括 JavaScript, TypeScript, Python, Rust, Go, C++, C, C#, Ruby, Java, PHP, Swift, 和 Kotlin。
  • 仅处理指定目录顶层的文件(不包括子目录)。
  • 将处理文件数量限制在最多 50 个,以保证性能。
  • 专注于顶级定义,以避免信息过载。
  • 帮助识别项目中的代码组织模式
  • 创建代码库架构的思维导图
  • 可与其他工具(如 read_file结合使用,进行更深入的分析。

局限性

  • 仅识别顶级定义,不识别嵌套定义。
  • 仅处理指定目录顶层的文件,不处理子目录。
  • 每次请求最多处理 50 个文件
  • 依赖于特定语言的解析器,检测质量可能有所差异。
  • 可能无法识别语法复杂的语言中的所有定义。
  • 不能替代阅读代码以理解实现细节。
  • 无法检测运行时模式或动态代码关系
  • 不提供有关定义如何被使用的信息。
  • 对于高度动态或元编程的代码,准确性可能会降低。
  • 仅限于所实现的 Tree-sitter 解析器支持的特定语言。

工作原理

当调用 list_code_definition_names 工具时,它会遵循以下流程:

  1. 参数验证:验证所需的 path 参数
  2. 路径解析:将相对路径解析为绝对路径
  3. 目录扫描:仅扫描指定目录的顶层源代码文件(不递归)
  4. 文件过滤:限制最多处理 50 个文件
  5. 语言检测:根据扩展名识别文件类型(.js.jsx.ts.tsx.py.rs.go.cpp.hpp.c.h.cs.rb.java.php.swift.kt.kts
  6. 代码解析:使用 Tree-sitter 解析代码并通过以下步骤提取定义:
  • 将文件内容解析为抽象语法树(AST)
  • 使用特定语言的查询字符串创建查询
  • 按文件中的位置对捕获结果排序
  1. 结果格式化:输出带行号和实际源代码的定义

输出格式

输出显示文件路径,后跟行号和每个定义的实际源代码。例如:

src/utils.js:
0--0 | export class HttpClient {
5--5 | formatDate() {
10--10 | function parseConfig(data) {

src/models/User.js:
0--0 | interface UserProfile {
10--10 | export class User {
20--20 | function createUser(data) {

每行显示:

  • 定义的开始和结束行号。
  • 分隔符 |
  • 定义的实际源代码。

这种输出格式可帮助您快速了解定义在文件中的位置及其实现细节。

使用示例

  • 开始新任务时:Roo 首先列出关键代码定义,以了解项目的整体结构。
  • 规划重构工作时:Roo 使用此工具来识别可能受影响的类和函数。
  • 探索不熟悉的代码库时:Roo 在深入研究实现细节之前,会映射重要的代码结构。
  • 添加新功能时:Roo 识别现有模式和相关的代码定义以保持一致性。
  • 故障排除时:Roo 映射代码库结构以定位问题的潜在来源。
  • 规划架构更改时:Roo 识别跨文件所有受影响的组件。

用法示例

在当前目录中列出代码定义:

<list_code_definition_names>
  <path>.</path>
</list_code_definition_names>

检查特定模块的结构:

<list_code_definition_names>
  <path>src/components</path>
</list_code_definition_names>

探索一个实用程序库:

<list_code_definition_names>
  <path>lib/utils</path>
</list_code_definition_names>