你使用哪些Python重构工具?

75

我有一堆类需要重命名。其中一些名称很短,而且这些名称被重复使用在其他类名称中,我不希望更改那些名称。大部分代码都是用Python编写的,但我们还有一些引用类名称的XML代码。

简单的搜索和替换只能解决一部分问题。在我的情况下,我想将AdminAction重命名为AdminActionPlug,将AdminActionLogger重命名为AdminActionLoggerPlug,所以第一个的搜索和替换也会误操作到第二个。

有谁有使用Python重构工具的经验吗?如果他们能够修复XML文档中的类名,那就更好了。

7个回答

59

同时,我尝试了两个与vim有某种程度集成的工具。

第一个是Rope,它是一个Python重构库,并带有Vim(和emacs)插件。我尝试重命名了几个文件,结果符合预期。它允许我预览重构后的差异,这很不错。它有点以文本为导向,但对我来说没关系,只是需要更长时间学习。

第二个是Bicycle Repair Man,我猜它的名字获得了额外的分数。它也可以插入到vim和emacs中。我还没有玩过它,但记得很久以前尝试过。

我还没有完全使用这两个工具,或者尝试其他类型的重构,但我会继续使用它们。


2
有一天,一个伟大的神将从天而降,他将为我们提供基于Dev Express C# Code Rush的重构工具,用于其他语言。当那一天到来时,Ctrl+Plick将成为地球上最常用的快捷键。阿门。 - Pedro Dusso
5
绳子(Rope)在一个奇怪的位置。它已经有很多文档,但仍然难以理解。没有好的教程。应该有人在GitHub上制作一个名为“现代Vim IDE”的包含所有必要插件的Vim版本,从而节省我们很多时间。Janus是个不错的开始,但它不包括任何重构库或Django代码自动完成等功能。 - user798719

27

我强烈推荐 PyCharm,不仅可以用于重构。自从几年前第一个发布PyCharm答案以来,PyCharm中的重构支持已经显著改善。

PyCharm 中提供的 Python 重构技术(在 PyCharm 2016.2 中最后检查时间为 2016/07/27)

  • 更改签名
  • 转换为 Python 包/模块
  • 复制
  • 提取重构
  • 内联
  • 反转布尔值
  • 将函数变为顶级函数
  • 移动重构
  • 下推成员
  • 上拉成员
  • 重命名重构
  • 安全删除

XML 重构(我在 XML 文件的上下文菜单中进行了检查):

  • 重命名
  • 移动
  • 复制
  • 提取子查询作为 CTE
  • 内联

Javascript 重构:

  • 在 JavaScript 中提取参数
  • 更改 JavaScript 中的签名
  • 在 JavaScript 中提取变量

我刚刚检查过,它无法重命名 Cython pyx 文件中的函数。 - rwst

5
我建议你看一下 Bowler (https://pybowler.io)。
它比rope更适合直接从命令行使用,并鼓励编写脚本(一次性脚本)。

我最终自己使用了RedBaron - qff
保龄球手架实际上有被使用吗?我只能在公共存储库中找到一些使用它的小项目,而且似乎它并没有得到积极维护。 - Jos Verlinde

5

WingIDE 4.0(WingIDE是我选择的Python IDE)将支持一些重构,但我刚刚尝试了最新的beta6版本,还有一些工作要做。撤消方法运行良好,但重命名符号不行。

更新:4.0版本已经修复了所有重构工具。现在它们运行得很好。


刚试用了基于这个答案的 Wing 6.0.4 Pro,而我所做的第一个简单重构(将函数移动到单独的文件中)仅仅是在最后一个找到的导入语句后面添加了新的导入语句没有任何缩进,尽管该语句不在顶层。六年过去了,仍然存在基本问题。不建议使用! - Kilian Brendel

4

PyCharm有一些重构功能。

PYTHON重构

重命名重构允许安全、即时地执行全局代码更改。文件内的局部更改将在原地执行。重构适用于普通Python和Django项目。

使用引入变量/字段/常量内联本地来改进方法内的代码结构,使用提取方法来拆分较长的方法,使用提取超类向上推向下拉移动来移动方法和类。


4

你的 IDE 可以支持重构!Eric、Eclipse 和 WingIDE 都内建了重构工具(包括重命名)。这些重构操作非常安全,如果有任何问题,IDE 会停止重构。

同时,考虑添加一些单元测试,以确保你的代码在重构过程中没有受到影响。


-2
你可以使用sed来执行此操作。诀窍是要记住正则表达式可以识别单词边界。只要获取工具,这在所有平台上都可以实现,Windows上是Cygwin,Mac OS可能需要安装开发工具,我不确定,而Linux则已经默认安装了。因此,grep、xargs和sed应该可以解决问题,在阅读手册并进行试错12小时后;)

希望这是在建议相同的事情(查找和替换),就像得票最低的答案一样。 - CornSmith

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接