LINUX.ORG.RU

История изменений

Исправление void, (текущая версия) :

Ты как-то слишком глубоко капнул :) Если используются элементы метапрограммирования, то на переваривание такого кода много ресурсов будет уходить - его же надо переваривать на лету. Я думаю это главная причина, почему IDEшки хитрые конструкции не индексируют.

Только что проверил в RubyMine в одном классе создать метод через define_method (аналог, кажется, create_function в php), в другом классе вызывая этот метод RubyMine его подчеркивает - не может определить действительно ли в том классе такой метод определен. То есть даже такие вещи уже не попадают в индекс и, естественно, можно забыть про autocomplete, go to declaration и тд. Как и в твоем примере, в общем.

Но мне и не нужно идеального go to declaration, мне хватает того, что дает индексатор в том же RubyMine - без парсинга сложный конструкций.

Вот есть реактивный кодо-индексатор ctags, есть плагин для его интеграции в ST2. Если бы он нормально индексировал руби код, мне его тоже хватило бы. Но он почему-то иногда не находит явным образом объявленые методы, иногда находит declaration методов в тексте комментариев (название метода совпадает со словом в тексте комментария). Если сердце так и не ляжет ни к какой IDE, вернусь на ST2/Vim и попробую допилить парсер рубишного кода для ctags.

А что значит статически определить declaration и жесткий runtime? Во всяком случае на лету дергать целый интерпретатор мне представляется очень дорогим решением...

Исходная версия void, :

Ты как-то слишком глубоко капнул :) Если используются элементы метапрограммирования, то на переваривание такого кода много ресурсов будет уходить - его же надо переваривать на лету. Я думаю это главная причина, почему IDEшки хитрые конструкции не индексируют.

Только что проверил в RubyMine в одном классе создать метод через define_method (аналог, кажется, create_function в php), в другом классе вызывая этот метод RubyMine его подчеркивает - не может определить действительно ли в том классе такой метод определен. То есть даже такие вещи уже не попадают в индекс и, естественно, можно забыть про autocomplete, go to declaration и тд.

Но мне и не нужно идеального go to declaration, мне хватает того, что дает индексатор в том же RubyMine - без парсинга сложный конструкций.

Вот есть реактивный кодо-индексатор ctags, есть плагин для его интеграции в ST2. Если бы он нормально индексировал руби код, мне его тоже хватило бы. Но он почему-то иногда не находит явным образом объявленые методы, иногда находит declaration методов в тексте комментариев (название метода совпадает со словом в тексте комментария). Если сердце так и не ляжет ни к какой IDE, вернусь на ST2/Vim и попробую допилить парсер рубишного кода для ctags.

А что значит статически определить declaration и жесткий runtime? Во всяком случае на лету дергать целый интерпретатор мне представляется очень дорогим решением...