Как заставить emacs Semantic использовать файл TAG, сгенерированный GTAGS - PullRequest
7 голосов
/ 25 сентября 2010

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

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

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

1 Ответ

7 голосов
/ 28 сентября 2010

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

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

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

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

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

...