为什么eclipse-python没有魔法重构?

时间:2011-02-14 18:28:27

标签: javascript python eclipse refactoring automated-refactoring

Eclipse能够利用编译的字节码来启用“魔术重构”功能 - 重命名方法,跟踪类层次结构和跟踪方法调用。

存在哪些技术障碍会使Python和Javascript等语言难以实现?

2 个答案:

答案 0 :(得分:6)

由于动态绑定。 Python是一种动态语言,您可以使用变量完成几乎所有操作。您甚至可以访问globals-dict并引入由运行时值组成的新变量。

因此IDE无法确定何时存在哪些变量。见这个例子:

#silly.py

import sys

if len(sys.argv) > 1:
    thisNowExists = True

#1

try:
    if thisNowExists:
        print("this existed before")
except NameError:
    print("this _now_ exists")
    thisNowExists = True

没有人或IDE可以知道thisNowExists是否在#1位置定义,所以如果你想重命名那个位于该点之下的愚蠢名称thisNowExists,那么如果我们应该在#1之前重命名外观。

您必须进行高级控制流分析,以便在try / catch语句下定义thisNowExists,但由于脚本的动态加载(thisNowExists = 1; import silly)和排序,它甚至可以在没有参数的import sys之前存在。

以不同方式命名变量,查找/替换是您的最佳选择;)

答案 1 :(得分:1)

所以事实证明,在python中完全可以跟踪方法和类层次结构等静态信息。 PyDev eclipse插件做到了。 PyLint插件试图在动态变量之类的东西上进行静态分析,假设在运行时没有任何时髦的事情发生并做得非常好。