Skip to main content

list_code_definition_names

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)
    • 使用语言特定查询字符串创建查询
    • 按文件中的位置排序捕获结果
  7. 结果格式化:输出带行号和实际源代码的定义

输出格式

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

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>