Как заставить emacs Semantic использовать файл TAG, сгенерированный GTAGS

Моя версия emacs 23.2.1, хотя я использовал следующее, чтобы изменить бэкэнд для использования GTAGS. (требуется 'semantic/db-global) (semanticdb-enable-gnu-global-databases 'c-mode) (semanticdb-enable-gnu-global-databases 'c++-mode) Я попытался сгенерировать файл GTAGS для использования в качестве бэкенд семантики. Однако каждый раз, когда я открываю файл C, Semantic по-прежнему анализирует файлы без использования файла GTAGS.

  1. Можно ли использовать файл GTAGS вместо встроенного парсера семантики? Я обнаружил, что встроенный анализатор не очень точен.

  2. Можно ли использовать файл GTAGS без указания области проекта? В моем случае я попытался поместить файл GTAGS в /usr/include, который должен быть стандартным путем включения emacs. Но семантика его не использует.


person Tommy Huang    schedule 24.09.2010    source источник


Ответы (1)


Semantic не использует файл GTAGS для создания тегов, которые будут использоваться непосредственно для таких функций, как прыжок или интеллектуальное завершение. Серверная часть GNU Global для семантической базы данных вместо этого будет использовать GTAGS в качестве гигантской таблицы имен. Таким образом, если вам нужно найти символ по имени, GTAGS сообщит семантике, где он находится, а затем семантика сама проанализирует эти файлы более непосредственно, чтобы получить подробности.

Причина, по которой GTAGS не используется напрямую в качестве заменяющего синтаксического анализатора, заключается в том, что информации в GTAGS недостаточно для операций, необходимых Semantic, поскольку он исключает информацию о типах данных, синтаксический анализ аргументов и синтаксический анализ локального контекста.

Использование gtags в /usr/include — интересная идея, но вряд ли она будет часто использоваться. Semantic будет искать только файлы заголовков, которые фактически используются в вашем коде, а не все включаемые файлы. Серверная часть GNU Global специально предназначена для сканирования всего проекта на наличие символа или ссылок на символы. Если вы хотите найти символ во всех своих включениях, то это было бы полезно, но в Semantic в настоящее время нет такой функции.

Можно использовать ebrowse, чтобы делать то, что вы хотите, но я обнаружил, что для C++ синтаксический анализатор был несовершенен в некоторых тонкостях и вызывал некоторые проблемы.

Если вы считаете, что анализатор семантики неточен, вы должны опубликовать это как ошибку в списке рассылки cedet-devel.

person Eric    schedule 27.09.2010