可以说服Jedi自动填写列表吗?

时间:2015-04-28 15:54:48

标签: python jedi python-jedi

我在一个python程序的命令行中将对象暴露给树,从而获得了大量的实用工具。例如:

myprog.py  obj1.obj2.method

让我执行obj1.obj2.method()和

myprog.py  obj1.<TAB>
myprog.py  obj1.obj2<TAB>

让我看看有什么可用。真棒!但是,我无法说服jedi返回自动完成结果列表(或词典)。我希望有一些hacky,这可能适用于短名单:

class X:
    pass

x = X()
x2 = X()
x2.y = 456
x.z = [x2]

# Want to get x.z[0].y in the results
prefix = "x.z[0]."

import jedi
# Tell jedi about list elements?
script = jedi.Interpreter(prefix, [{"x.z[0].z": x.z[0].z}])

for c in script.completions():
    print c
sys.exit()

1 个答案:

答案 0 :(得分:2)

如果有的话,这应该有效:

>>> script = jedi.Interpreter(prefix, [{"x": x}])
>>> script.completions()

但目前它返回一个空列表。我认为值得向Jedi问题跟踪器添加一个问题,因为这绝对可以做到。

如果我没有正确记住Jedi代码,Jedi会在某些情况下(例如类查找)尝试不调用getattr,但这很容易改变,因为它是:

  1. 无论如何,Jedi会对getattr上没有复杂的对象调用x.y
  2. 标准库自动完成也会调用getattr
  3. 如果您需要,只需向Jedi问题跟踪器添加问题。