AkelPad Forum Index AkelPad
Support forum
 
 FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Интеграция Code Intelligence

 
Post new topic   Reply to topic    AkelPad Forum Index -> Discussion (Russian)
View previous topic :: View next topic  
Author Message
lexa



Joined: 14 Jan 2011
Posts: 19

PostPosted: Mon May 13, 2013 5:29 pm    Post subject: Интеграция Code Intelligence Reply with quote

Привет.

У Komodo IDE есть отличная штука для автокомплита - Code Intelligence. Она доступна под лицензией MPL, как часть Open Komodo. К сожалению, я второй день не могу достучаться до их SVN-репозитория поэтому использую код библиотеки из проекта SublimeCodeIntel (плагин к Sublime Text).

Привожу пример работы Code Intelligence. Тестовые файлы созданы в директории [SublimeCodeIntel-master]\libs\ для простоты использования.

Для работы нужен Python 2.6. С 2.7 проблемы у модуля SilverCity (нужно перекомпилировать модули pyd в директориях _sys, где sys ваша система - _win32, _linux_libcpp6_x86 и т.д.).

Для теста я создал три файла:
_test.php - основной "код",
_test2.php - файл для подключения,
_test.py - точка входа.

_test.php:
Code:
<?
include '_test2.php';

$testo = new Test;
$testo->


_test2.php:
Code:
<?
class Test {
    public $var = 10;

    public function hello(){
    }

    public function nice(){
    }

    public function __get($name){
    }

    public function toString(){
    }
}


_test.py:
Code:
from codeintel2.manager import Manager;

mgr = Manager();
mgr.upgrade();
mgr.initialize();

try:
    buf = mgr.buf_from_path('_test.php', 'PHP', None, 'utf-8');
    buf.scan();

    trg = buf.trg_from_pos(57);
    cplns = buf.cplns_from_trg(trg, 2);
   
    print cplns;

    mgr.finalize();
except Exception, e:
    print e;


И запуск:
Code:
python _test.py

Code:
[('function', 'hello'), ('function', 'nice'), ('function', 'toString'), ('function', '__get')]


Достаточно интересно, правда? Code Intelligence поддерживает не только пользовательские, но, конечно же, и стандартные библиотеки языков. Достаточно ввести "str" и CI выдаст все строковые функции совпадающие с именем.

Я первым делом решил интегрировать Code Intelligence для себя через внешний JScript API. Но алгоритм пришедший в голову, мягко говоря, дикий: exec + чтение stdout + ShowMenu.js (как дополнять окошечко автокомплита плагина Coder я не представляю).

Наверное, я смог бы использовать код в Си подключив python.h и по схеме. Но точно не смогу подключить решение к AkelPad'у в виде плагина.
Back to top
View user's profile Send private message
EditPP



Joined: 22 Aug 2013
Posts: 6

PostPosted: Thu Aug 22, 2013 9:24 pm    Post subject: Reply with quote

Интересно. даже очень. нашел ваш пост а сам бьюс как раз с скриптом из SublimeCodeIntel. И тут вы описали что "дергать". Smile

Я не для Акеля это, а для своей программы (если интересно, личкой).
Back to top
View user's profile Send private message
EditPP



Joined: 22 Aug 2013
Posts: 6

PostPosted: Thu Aug 22, 2013 10:04 pm    Post subject: Reply with quote

Меня смущает что Пи скрипт будет работать долго. жмем клавишу autocomplete- ждем до 2-3 секунд- и потом только видим.
Back to top
View user's profile Send private message
lexa



Joined: 14 Jan 2011
Posts: 19

PostPosted: Thu Aug 22, 2013 10:10 pm    Post subject: Reply with quote

Сначала идёт сбор базы. Ляжет в ~/.codeintel (%userprofile% в Windows). Потом работает быстрее.
Back to top
View user's profile Send private message
EditPP



Joined: 22 Aug 2013
Posts: 6

PostPosted: Thu Aug 22, 2013 10:16 pm    Post subject: Reply with quote

хм... Вот я открыл один файл в вкладке. вызвал плагин. потом другой файл. вызвал плагин. база будет расти для каждого файлика?

А как подсунуть codeintel-у файл конфигурации, под Win? не знаете? который .codeintel/config.
Back to top
View user's profile Send private message
lexa



Joined: 14 Jan 2011
Posts: 19

PostPosted: Thu Aug 22, 2013 10:17 pm    Post subject: Reply with quote

Извините, не знаю. Sad Так его не копал.
Back to top
View user's profile Send private message
EditPP



Joined: 22 Aug 2013
Posts: 6

PostPosted: Fri Aug 23, 2013 12:31 am    Post subject: Reply with quote

Все таки главное- тормоз. у меня скрипт работает 4-6 секунд. это на P4 CPU. слишком долго. вот написать резидента который бы ловил запросы на комплит. это другое дело. тормоз при ините скрипта был бы одноразовым. а так парссинг посли инита быстрый. 1с.
Back to top
View user's profile Send private message
EditPP



Joined: 22 Aug 2013
Posts: 6

PostPosted: Fri Aug 23, 2013 8:28 pm    Post subject: Reply with quote

Тормоза решились, было слишком много каталогов в path. так оно 1-1.5 с работает.

можно исп-ть.
Back to top
View user's profile Send private message
EditPP



Joined: 22 Aug 2013
Posts: 6

PostPosted: Wed Aug 28, 2013 2:25 pm    Post subject: Reply with quote

lexa
Вы не пробовали получить не только autocomplete, но еще и declararion position?

Code:

from codeintel2.manager import Manager
from codeintel2.common import EvalController             

def _do(buf, trg, timeout):
    ctlr = EvalController()
    buf.async_eval_at_trg(trg, ctlr)
    ctlr.wait(timeout)
    if not ctlr.is_done():
        ctlr.done("timed out")
        ctlr.abort()
        raise EvalTimeout("eval for %s timed-out" % trg)
    return (ctlr.cplns, ctlr.calltips, ctlr.defns)

mgr = Manager()
mgr.upgrade()
mgr.initialize()

buf = mgr.buf_from_path(info.filename)
buf.scan()
   
trg = buf.trg_from_pos(_pos)
result = _do(buf, trg, _timeout)
print result


я взял _do из кода codeintel. в tuple возвращаю
1) autocomplete
2) calltips
3) definition pos.

если передать позицию в trg сразу после "$testo->", то первое есть.
если передать позицию в trg сразу после "$testo->test(", то второе есть.
а вот третьего НЕТ. никак не получить. все время None или ошибка
Back to top
View user's profile Send private message
lexa



Joined: 14 Jan 2011
Posts: 19

PostPosted: Fri Aug 30, 2013 8:19 am    Post subject: Reply with quote

Пробовал, но безуспешно. :(
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    AkelPad Forum Index -> Discussion (Russian) All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


SourceForge.net Logo Powered by phpBB © 2001, 2005 phpBB Group