通过自动重构非惯用 Python 代码为 Pythonic 惯用法使 Python 代码符合惯用风格
软件工程
2022-07-13 v1
摘要
与其他编程语言(例如 Java)相比,Python 拥有更多使代码简洁高效的惯用法。尽管 pythonic 惯用法在 Python 社区中被广泛接受,Python 程序员在使用它们时常常面临许多挑战,例如不知道某些 pythonic 惯用法或不知如何正确使用它们。基于对 GitHub 上 7,638 个 Python 仓库的分析,我们发现可用 pythonic 惯用法实现的非惯用 Python 代码频繁且广泛地出现。遗憾的是,目前没有工具能自动将此类非惯用代码重构为惯用代码。在本文中,我们设计并实现了一种自动重构工具以使 Python 代码符合惯用风格。我们通过系统对比 Python 与 Java 的抽象语法文法识别出九种 pythonic 惯用法。然后我们为每种 pythonic 惯用法定义用于检测非惯用代码的语法模式。最后,我们设计原子 AST 重写操作和重构步骤将非惯用代码重构为惯用代码。我们在来自 GitHub 的 1,065 个 Python 项目上测试并审查了超过 4,115 次重构,并为 90 个随机抽样的重构向 84 个项目提交了 90 个拉取请求。这些评估证实了我们的重构工具在真实世界 Python 代码上的高准确性、实用性和有用性。我们的重构工具可在 47.242.131.128:5000 访问。
引用
@article{arxiv.2207.05613,
title = {Making Python Code Idiomatic by Automatic Refactoring Non-Idiomatic Python Code with Pythonic Idioms},
author = {Zejun Zhang and Zhenchang Xing and Xin Xia and Xiwei Xu and Liming Zhu},
journal= {arXiv preprint arXiv:2207.05613},
year = {2022}
}
备注
12 pages, accepted to ESEC/FSE'2022