autocomplete для python приемлемого качества
От: monax  
Дата: 27.03.12 09:42
Оценка:
Задумался о толковом автодополнении для питона и что можно получить в максимально идеальном случае.

(далее идёт отсылка к модулям на питоне, которые помогают сделать автодополнение в виме, имаксе, но их можно использовать и для других редакторов, если написать плагин)

Хорошему автокомплиту мешает то, что питон язык динамический, и чтобы получить корректный список методов и полей для какого объекта, нужно выполнить код. Код не всегда можно выполнить, этому могут мешать как ошибки в самом коде, так и необходимость специфического окружения для его работы.

Получается, что для получения более-менее адекватного автодополнения нужно скомпилировать код, сохранить AST, а потом из этого дерева выбирать поля объектов.

Что плохо:
• если в коде есть ошибка, то придётся пользоваться AST, сгенерированным, когда код был валидным последний раз.
• постоянно парсить AST, что может занимать значительное время.
• хранить AST в отдельном файле.
• если дополнять не только объекты из файлов проекта, но и объекты из стандартной библиотеки (модуль — это тоже объект, а функции — его поля), то хранить такое AST может быть накладно, а парсить его — долго.


Что-то подобное я увидел в pysmell.

Есть ещё вариант искать совпадения по именам модулей и полям, как это делает pydiction или на основе ctags. Но такой подход меня не устраивает в корне.

Механизм работе ropevim, который работает поверх rope в данный момент изучаю, но как пользователя он меня не устроил по скорости работы — порой мой вим подвисал на пару минут при попытке подсказать мне функцию из стандартной библиотеки. Вполне вероятно, что я неправильно его использовал, но до прочтения исходников никаких выводов я делать не могу.

Какие ещё могут быть способы организации автодополнения?
Re: autocomplete для python приемлемого качества
От: FR  
Дата: 27.03.12 11:09
Оценка:
Здравствуйте, monax, Вы писали:

M>Какие ещё могут быть способы организации автодополнения?


Посмотри как в PyDev сделано, вот обзор http://pydev.blogspot.com/2012/01/code-completion-strategies-in-pydev.html
Правда там все сильно на Eclipse завязано.

Насчет AST. В PyPy есть все средства и оно по сути переводит код в статически типизированный (RPython)
http://doc.pypy.org/en/latest/architecture.html#translation-framework
Re: autocomplete для python приемлемого качества
От: ionoy Эстония www.ammyui.com
Дата: 04.04.12 08:05
Оценка:
Здравствуйте, monax, Вы писали:
M>Какие ещё могут быть способы организации автодополнения?

Очень круто автокомплит работает в Python Tools для Visual Studio. Не знаю как они это сделали, но посмотреть стоит.
www.livexaml.com
www.ammyui.com
www.nemerleweb.com
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.