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

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

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

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

1 ответ

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

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

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

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

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

Другие вопросы по тегам