Можно ли убедить джедаев в автозаполнении списков?

Я получаю огромное количество полезности от выставления объекта дереву в командной строке для программы на Python. Например:

myprog.py  obj1.obj2.method

Позвольте мне выполнить obj1.obj2.method() и

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

давайте посмотрим, что доступно. Потрясающие! Однако я не могу убедить джедаев вернуть списки результатов автозаполнения (или словари). Я надеялся что-то взломать, это может сработать для коротких списков:

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 ответ

Во всяком случае, это должно работать:

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

Однако на данный момент он возвращает пустой список. Я думаю, что стоило бы добавить проблему в систему отслеживания проблем джедаев, так как это то, что определенно можно сделать.

Если я правильно помню код джедая, джедай пытается не звонить getattr в некоторых случаях (например, поиск класса), но это можно легко изменить, так как это:

  1. В любом случае, джедай getattr на объекты, которые не являются сложными, как x.y,
  2. Автозаполнение стандартной библиотеки также вызывает getattr,

Если вы хотите этого, просто добавьте проблему в систему отслеживания проблем джедаев.

Другие вопросы по тегам