← 最新论文
💻 computer science

TypeScript Repository Indexing for Code Agent Retrieval

本文介绍了 abcoder-ts-parser,这是一个基于 TypeScript 编译器 API 构建的新型解析器,旨在解决现有框架在处理大型 TypeScript 仓库时因依赖语言服务器逐符号查询而导致的性能瓶颈,从而更高效地生成用于代码智能体检索的可靠代码索引。

原作者: Junsong Pu, Yichen Li, Zhuangbin Chen

发布于 2026-04-22
📖 1 分钟阅读☕ 轻松阅读

原作者: Junsong Pu, Yichen Li, Zhuangbin Chen

原始论文采用 CC BY 4.0 许可(http://creativecommons.org/licenses/by/4.0/)。 这是对下方论文的AI生成解释。它不是由作者撰写或认可的。如需技术准确性,请参阅原始论文。 阅读完整免责声明

这篇论文讲述了一个关于如何让 AI 程序员更聪明、更高效地理解大型代码库的故事。

为了让你更容易理解,我们可以把整个事情想象成在一个巨大的、没有地图的迷宫里找东西

1. 背景:AI 程序员遇到了什么困难?

想象一下,你雇佣了一个非常聪明的 AI 助手(我们叫它"AI 程序员”),让它去修一个大型软件里的 Bug。这个软件有几十万行代码,就像一座拥有成千上万房间的巨型迷宫。

  • 以前的做法(关键词搜索): 就像让 AI 在迷宫里大喊:“我要找‘登录’这个词!”
    • 缺点: 如果代码里写的是“用户验证”而不是“登录”,AI 就找不到了。或者,它找到了很多无关的“登录”字样,把 AI 搞晕了。这就像在图书馆里只靠书名找书,经常找不到。
  • 另一种做法(相似度搜索): 就像让 AI 根据“感觉”找书。
    • 缺点: 它能找到意思相近的词,但搞不清楚谁调用谁。比如,它知道“登录”和“密码”有关,但它不知道“登录”功能其实是调用了“密码验证”这个函数,而“密码验证”又依赖“数据库连接”。AI 就像只看到了散落的拼图块,却拼不出完整的图。

核心问题: AI 需要看到代码之间的关系网(谁调用了谁,谁依赖谁),而不仅仅是文字本身。

2. 现有的解决方案:ABCoder 框架

为了解决这个问题,作者们开发了一个叫 ABCoder 的工具。它的作用就像是一个超级图书管理员,它先把整个迷宫(代码库)画成一张关系地图(图谱)

  • UniAST: 这是它画出的地图格式。它把代码里的函数、变量、类型都变成了地图上的“点”,把它们的调用关系变成了“线”。
  • 以前的画法(旧版 ABCoder):
    • 想象这个图书管理员(解析器)手里拿着一本字典(语法分析器),但他不认识字的意思。
    • 每遇到一个他不认识的词(比如一个函数调用),他就要跑一趟去问另一个专家(语言服务器 LSP)。
    • 痛点: 如果代码有 100 万个词,他就要跑 100 万次腿!每次跑都要打电话(JSON-RPC 调用),这太慢了,就像让一个人去图书馆查书,每查一个字都要打个电话问管理员,查完一本书要跑断腿。

3. 这篇论文的突破:abcoder-ts-parser

作者们(来自中山大学和香港中文大学)发现,对于 TypeScript 这种语言,之前的“跑断腿”方法太笨了。于是,他们造了一个新工具:abcoder-ts-parser

这个新工具是怎么工作的?(核心比喻)

  • 旧方法: 像是一个外行侦探,每看到一个线索,都要打电话给专家确认一次。
  • 新方法: 像是一个拥有上帝视角的专家
    • 它直接利用了 TypeScript 编译器(TypeScript Compiler API)的全部能力
    • 它不再是一个字一个字地“打电话”去问。相反,它直接把整个代码库“吃”进脑子里,在内存里一次性构建好完整的地图。
    • 它知道 A 调用了 B,B 又调用了 C,甚至知道 C 是通过什么文件导出来的,不需要任何外部询问

这就好比:

  • 旧方法: 你在迷宫里走一步,问一次路人“前面是哪?”,走一步问一次。
  • 新方法: 你直接拿到了迷宫的3D 全息投影图,站在高处一眼就能看清所有房间的连接关系,瞬间就能规划出路线。

4. 效果如何?(实验数据)

作者们在三个真实的、巨大的开源项目上测试了这个新工具:

  1. Excalidraw(一个在线白板,约 14.7 万行代码)
  2. Outline(一个知识库,约 23.4 万行代码)
  3. Sentry(一个巨大的错误监控平台,超过 120 万行代码!)

结果令人震惊:

  • 对于那个拥有 120 万行代码的超级项目(Sentry),新工具只需要 12 分钟 就能画完整个关系地图。
  • 相比之下,如果用旧方法(打电话问专家),处理类似规模的代码可能需要几十倍的时间,甚至因为超时而失败。
  • 对于小项目,它只需要 30 多秒,完全可以集成到日常开发中。

5. 这对我们意味着什么?

  • 对 AI 来说: 它现在能拿到一张清晰、准确、包含所有关系的代码地图。当它需要修 Bug 时,它能瞬间找到“谁调用了这个函数”、“这个函数依赖什么”,而不是在茫茫代码海里瞎猜。
  • 对开发者来说: 这意味着未来的 AI 编程助手会更聪明、更靠谱,能处理更复杂的任务,而且构建索引的速度非常快,不会让你等半天。

总结

这篇论文就是讲:我们发明了一种新的“超级地图绘制法”,让 AI 在理解 TypeScript 代码时,不再需要笨拙地“一问一答”,而是能直接“一眼看穿”整个代码库的复杂关系。 这让 AI 程序员在处理大型项目时,速度更快,脑子更清楚。

您所在领域的论文太多了?

获取与您研究关键词匹配的最新论文每日摘要——附技术摘要,使用您的语言。

试用 Digest →