绝地没有在项目中找到所有用法

时间:2017-01-26 21:08:52

标签: python vim youcompleteme

我在vim中通过YCM使用jedi,并且在我的项目中看到一些奇怪的行为,关于在jediHttp服务器上使用usages端点。基本上它只能在我的类或函数项目中找到一小部分用法。它确实找到了当前文件中的所有用法,但在其他文件中找不到绝大多数用法。 GoTo命令工作正常,将按预期在项目中的任何位置打开新缓冲区。但是,当我从定义开始并尝试通过usages命令查看所有GoToReferences时,它只产生大约20%的实际用法。

我尝试过创建一个虚拟项目来重现行为,但它似乎有效。这是一个简单的项目结构:

> tree -I __pycache__
.
├── setup.py
└── test_jedi
    ├── classes.py
    ├── __init__.py
    ├── mod1
    │   ├── __init__.py
    │   └── recessed.py
    └── script.py

2 directories, 6 files

以下是这些文件的内容:

classes.py

class Foo:
    def __init__(self, a):
        self.a = a

    def make_a(self):
        print('hello')

MOD1 / recessed.py:

from test_jedi.classes import Foo

Foo(5).make_a()
print('Ran this')

script.py:

from classes import Foo
a = Foo(5)
a.make_a()

现在,从vim中缓冲区中的recessed.py,我可以使用GoTo上的Foo立即打开classes.py缓冲区。当我在GoToReferences缓冲区中尝试classes.py时,我只会在usagesscript.py中获得classes.py。我不知道为什么绝地没有告诉我recessed.py

中的用法

这是显示以下内容的quickfix缓冲区:

classes.py|2 col 7| class Foo
script.py|2 col 21| from classes import Foo
script.py|5 col 5| a = Foo(5)

但显然没有提及mod1 / recessed.py,它显然使用了Foo

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

我知道这个问题已有1.5年的历史了,但是为了像我这样落在这个问题上的人们的缘故,它与《绝地武士》中目前未解决的问题有关。

Jedi script.usages由YouCompleteMe在其GoToReferences函数中使用。然而,根据作者的说法,script.usages在许多地方都是越野车。他非常清楚这个问题,但是目前它的优先级较低。

Link to the issue

答案 1 :(得分:0)

不确定是否有帮助,但是当我使用基本jedi-vim插件的“ leader n”命令时,我会看到更多用法。

尝试像我一样加载这两个插件,而不是在查找用法时在YCM中使用GoToReferences,只需使用jedi-vim的查找用法即可。