论文

Prefactory:库采用重构的自动发现和应用

Prefactory: Automated Discovery and Application of Library-Adoption Refactorings

摘要

用库 API 调用替换手写代码是一种常见的重构,可以减少代码大小,使代码更惯用,并重用经过良好测试的实现。然而,许多库采用机会很难自动找到:原始代码通常不会提及目标库,并且可能仅在行为上类似于库 API,几乎没有语法重叠。现有工具(例如 linter 和静态现代化器)仅涵盖一小部分手动指定的模式。另一方面,基于 LLM 和 LLM 的代理可以推广到更多模式,但它们成本高昂,难以大规模复制和系统应用。本文介绍了 Prefactory,这是一种在 Python 中进行库采用重构的自动化方法。关键思想是使用 LLM 来综合可执行搜索启发式方法,而不是依赖于代码库上重复的 LLM 提示。给定目标项目和目标库名称,Prefactory 会收集库元数据和项目词汇,然后生成词汇和结构检测器。 Prefactory 在扫描阶段执行检测器以查找候选函数。然后,它对候选函数进行启发式排名,使用 LLM 为排名最高的函数生成重构,并通过项目测试和新生成的差异测试来验证结果。我们在 PrefactoryBench 上评估 Prefactory,这是来自 61 个开源 Python 项目和 18 个库的 100 个实际库采用重构的基准。 Prefactory 在文件级别检测到 75 个实例,在函数级别检测到 56 个实例,而最强基线 (Codex CLI) 则分别检测到 35 和 32 个实例。从检测到的 56 个函数中,Prefactory 生成了 40 个经过测试验证的重构。