您为Python使用哪些重构工具?[关闭]


69

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

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

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

Answers:


57

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

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

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

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


2
有一天,一位伟大的上帝将从天空飞来,他将为我们提供一个基于Dev Express C#Code Rush的重构工具,用于其他语言。那天到来时,Ctrl + Plick应该是地球上最常用的快捷方式。阿们
Pedro Dusso

4
绳子在一个奇怪的地方。它有很多文档,但是仍然很难理解。没有好的教程。有人应该在github上制作一个称为现代vim IDE的vim版本,包括电池,并为我们节省很多时间。剑锋是一个很好的开始,但不包括任何重构库也不Django的代码完成,等等
user798719

25

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

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

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

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

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

JavaScript重构:

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

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

5

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

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


刚刚根据此答案尝试过Wing 6.0.4 pro,我做的第一个简单重构(将函数移动到单独的文件中)破坏了代码,方法是简单地将新的import语句添加到它可以找到的最后一个导入后面,没有任何缩进,尽管该语句不在最高层。六年后,仍然是基本问题。不建议!
基利安·布伦德尔

4

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

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


4

PyCharm具有一些重构功能。

PYTHON再处理

重命名重构允许安全,即时地执行全局代码更改。文件内的本地更改是就地执行的。重构在普通的Python和Django项目中起作用。

使用“引入变量/字段/常量内联局部”来改进方法中的代码结构,使用“提取方法”分解更长的方法,“提取超类”,“上推”,“下拉”和“移动”来移动方法和类。


4

我来看看Bowlerhttps://pybowler.io)。

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


-3

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


希望是,因为它建议(找到并替换)最低投票答案的同一件事。
CornSmith
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.