您为Python使用哪些重构工具?

您为Python使用哪些重构工具?

What refactoring tools do you use for Python?

我有一堆要重命名的类。 其中一些名称较小,并且该名称在其他类名称中重复使用,我不希望该名称更改。 其中大多数都存在于Python代码中,但是我们也有一些引用类名的XML代码。

简单的搜索和替换只能使我到目前为止。 就我而言,我想将AdminAction重命名为AdminActionPlug,将AdminActionLogger重命名为AdminActionLoggerPlug,因此第一个的搜索和替换也将错误地命中第二个。

有没有人有使用Python重构工具的经验? 如果他们还可以修复XML文档中的类名,则有加分。


同时,我已经尝试了两个与vim集成在一起的工具。

第一个是Rope,一个Python重构库,带有Vim(和emacs)插件。我尝试了几次重命名,这确实按预期工作。它使我可以将重构作为差异进行预览,这很好。它有点受文本驱动,但是对我来说没关系,只是需要更长的时间来学习。

第二个是自行车修理工,我想他会赢得积分。还可以插入vim和emacs。还没有玩太多,但是我记得很久以前尝试过。

还没有玩完,或者尝试了更多类型的重构,但是我将对它们进行更多的修改。


我强烈建议您使用PyCharm-不仅限于重构。自从几年前在这里发布第一个PyCharm答案以来,PyCharm的重构支持已大大改善。

PyCharm中可用的Python重构(最近在PyCharm 2016.2中检查2016/07/27)

  • 更改签名
  • 转换为Python包/模块
  • 复制
  • 提取重构
  • 排队
  • 反转布尔
  • 使顶层功能
  • 移动重构
  • 推低会员
  • 拉成员
  • 重命名重构
  • 安全删除

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

  • 改名
  • 移动
  • 复制
  • 将子查询提取为CTE
  • 排队

JavaScript重构:

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


WingIDE 4.0(WingIDE是我选择的python IDE)将支持一些重构,但是我只是尝试了最新的beta,beta6和...,仍然有很多工作要做。撤回方法效果很好,但"重命名符号"却不能。

更新:4.0版本修复了所有重构工具。他们现在工作很好。


我来看看Bowler(https://pybowler.io)。

比起绳索,它更适合直接从命令行使用,并鼓励编写脚本(一次性脚本)。


PyCharm具有一些重构功能。

PYTHON REFACTORING

Rename refactoring allows to perform global code changes safely and instantly. Local changes within a file are performed in-place. Refactorings work in plain Python and Django projects.

Use Introduce Variable/Field/Constant and Inline Local for improving the code structure within a method, Extract Method to break up longer methods, Extract Superclass, Push Up, Pull Down and Move to move the methods and classes.


您的IDE可以支持重构!!
选中它Eric,Eclipse,WingIDE具有用于重构的内置工具(包括重命名)。这是非常安全的重构-如果发生错误,IDE不会引用。

还可以考虑添加一些单元测试,以确保您的代码在重构期间不会受到影响。


您可以使用sed执行此操作。诀窍是要记住正则表达式可以识别单词边界。只要您拥有工具,该工具就可以在所有平台上运行,在Windows上为Cygwin,Mac OS可能需要安装dev工具,我不确定,Linux可以直接使用。因此,在阅读手册页和反复试验12小时后,grep,xargs和sed应该可以解决问题。


推荐阅读