1

在我对同一个对象使用多个名称绑定的地方,我使用ropemacs得到了一些令人失望的完成定义结果。

考虑到下面我的人为设计和风格上受到挑战的示例代码,有人知道为什么rope不会呈现完成或定义结果吗?

项目代码示例:

from Package import BigObjectWithLotsOfMethods

class GLOBAL:
    variable = None

big = BigObjectWithLotsOfMethods()
GLOBAL.variable = big

有问题的 Emacs 行为:

当我输入:

big. 

然后输入M-/,我得到了预期的候选方法名称列表。绳子万岁!

另一方面,当我进入时:

GLOBAL.variable.

例如,然后M-/在 Emacs minibuffer 中输入我得到以下内容:

Completions for GLOBAL.variable.: [No Match]

此外,请想象一种在代码上键入fire()的方法不会像预期的那样将我带到定义,而只是在 Emacs 迷你缓冲区中输出以下内容:BigObjectWithLotsOfMethodsC-c gGLOBAL.variable.fire()fire()

Cannot find the definition! 

由于GLOBAL.variable仅代表绑定到BigObjectWithLotsOfMethods实例的另一个名称,我很惊讶rope 没有做一些智能的事情,比如从它所知道的推断定义big

问题:

为什么在存在多个名称绑定的情况下,对代码自省的这种明显微不足道的支持在绳索下不起作用?我是否在我的绳索项目配置中遗漏了一些基本的东西来解决这个问题?

感激地收到任何帮助。

4

1 回答 1

0

有人会想象,因为你引入了一层间接性,那根绳索不再是聪明的。

注意我已经有一段时间没有玩过绳子了,因为我发现它的阻碍多于它的帮助。它也有点慢。主要使用M-/pyflakes/flymake 的组合,而不是在 emacs 上。(一个缺点M-/是您必须第一次输入该方法)。当然,如果 Rope 开始提供更大的收益并且花费更少的钱,我可能会想重新审视它。

我想知道 py-dev、pycharm 引擎是否足够聪明来处理这个问题。

于 2010-11-15T21:43:34.493 回答