Скажите Ctags не анализировать контент внутри комментариев

Когда я создаю свой файл ctags, он, похоже, также анализирует содержимое комментариев. Например, используя плагин Vim Tagbar, я вижу в списке функций несуществующие функции, такие как:

  • is
  • in
  • просто

Здесь происходит то, что ctags заходит в комментарии и находит такие вещи, как:

"Эта функция...", думая, что "является" функцией, затем добавляет запись для нее в файл тегов.

Мне интересно, есть ли простой способ сказать ctags не анализировать содержимое внутри комментариев.

Я обнаружил, что, по-видимому, было исправление для этого, которое будет выпущено после 5.8.0. но я не уверен, было ли это уже выпущено или нет, моя версия ctags 5.8.0.

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

Пример:

Следующий комментарий к функции генерирует тег «is» и перечисляет ее как функцию:

/**
 * This function is run to set certain preferences
 */

person Jose B    schedule 24.03.2014    source источник
comment
Ctags не просматривает комментарии. Не могли бы вы добавить пример кода?   -  person romainl    schedule 24.03.2014


Ответы (2)


В ctags 5.8 есть ошибка. К счастью, через день после выпуска jafl выпустила версию 729, чтобы исправить эту проблему. К сожалению, с тех пор релиза не было.

К счастью, проект был разветвлен как «Universal Ctags». Вот как установить это из исходников.

# Get rid of 5.8.
sudo apt-get remove exuberant-ctags

# autoconf is needed to assemble the configure files
sudo apt-get install autoconf autoconf-doc

git clone https://github.com/universal-ctags/ctags.git universal-ctags

cd universal-ctags

./autogen.sh
./configure
make

sudo make install
person Daniel Convissor    schedule 21.12.2015
comment
Отлично, спасибо! Я также заметил, что универсальные ctags (github.com/universal-ctags/ctags) кажется, разветвился и подхватил развитие exhuberant-ctags. Ваше здоровье. - person Jose B; 22.12.2015
comment
Ух ты! Отличные новости. Единственным недостатком является то, что это еще одна вещь для моего списка дел. :) - person Daniel Convissor; 22.12.2015
comment
Обновлен ответ для использования кодовой базы Universal Ctags. - person Daniel Convissor; 29.12.2015

В Exuberant Ctags уже встроено большое количество языков. Каждый из них имеет собственный синтаксический анализатор, адаптированный для этого языка. Конечно, не имеет смысла включать комментарии/закомментированные участки кода в файл тегов. Если это произойдет, то это ошибка парсера языка, и ее необходимо исправить в коде ctags.

Обратите внимание, что Exuberant Ctags также поддерживает расширение на новые языки с помощью регулярных выражений. С ними может быть очень сложно/медленно/невозможно исключить комментарии (поскольку может быть большой предшествующий контекст для рассмотрения, а синтаксис языка может быть не полностью представлен в виде регулярного выражения), и вам придется жить с этим, или применять обходные пути, такие как предварительная обработка комментариев из источников перед их обработкой.

person Ingo Karkat    schedule 24.03.2014
comment
Мне кажется, что это ошибка в коде ctags, по крайней мере, согласно этому комментарию: sourceforge.net/p/ctags/bugs/192/#bfac, я надеялся, что будет другое решение. - person Jose B; 24.03.2014
comment
Как я уже сказал, вы можете предварительно обработать все исходные файлы, но это очень громоздко. - person Ingo Karkat; 24.03.2014