Eclipse能够利用编译的字节码来启用“魔术重构”功能 - 重命名方法,跟踪类层次结构和跟踪方法调用。
存在哪些技术障碍会使Python和Javascript等语言难以实现?
答案 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插件试图在动态变量之类的东西上进行静态分析,假设在运行时没有任何时髦的事情发生并做得非常好。