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

Dus*_*etz 4 javascript python eclipse refactoring automated-refactoring

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

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

fly*_*eep 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
Run Code Online (Sandbox Code Playgroud)

没有人或IDE可以知道是否thisNowExists在该位置定义#1,因此如果您想重命名thisNowExists该点下面的愚蠢名称,如果我们之前#1也应该重命名该外观,则它是未定义的.

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

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