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

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

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

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

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


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

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

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

Какие ещё могут быть способы организации автодополнения?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.