gpt4 book ai didi

python - Jedi 没有找到项目中的所有用法

转载 作者:太空宇宙 更新时间:2023-11-04 02:57:44 24 4
gpt4 key购买 nike

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

我尝试制作一个虚拟项目来重现行为,它似乎奏效了。这是简单的项目结构:

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

2 directories, 6 files

这些文件的内容如下:

类.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')

脚本.py:

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

现在,在缓冲区中带有 recessed.py 的 vim 中,我可以在 Foo 上使用 GoTo 立即打开 classes.py缓冲。然后,当我从 classes.py 缓冲区尝试 GoToReferences 时,我只在 script.py类.py。我不知道为什么 jedi 没有向我显示 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

有什么想法吗?

最佳答案

我知道这个问题已有 1.5 年历史了,但为了像我一样遇到这个问题的人,它与 Jedi 中当前 Unresolved 问题有关。

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

Link to the issue

关于python - Jedi 没有找到项目中的所有用法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41883016/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com