Я переустановил emacs 24.2.50 на новый хост Linux и запустил новую конфигурацию dotEmacs на основе magnars а> конфигурация emacs. Поскольку я успешно использовал CEDET в своем предыдущем рабочем процессе, я начал его настраивать. Однако всякий раз, когда я загружаю исходный файл C++, происходит какое-то странное поведение.
[Эта часть решена]
Как и ожидалось, семантический анализ анализирует все включаемые файлы (и во время первоначальной настройки анализирует все файлы, указанные в semantic-add-system-include). переменные), но он печатает это сообщение об ошибке, которое выглядит следующим образом:
WARNING: semantic-find-file-noselect called for /usr/include/c++/4.7/vector while in set-auto-mode for /usr/include/c++/4.7/vector. You should call the responsible function into 'mode-local-init-hook'.
В приведенном выше примере ошибка печатается для вектора STL, но соответствующее сообщение об ошибке печатается для каждого файла, включенного в тот, который я посещаю, и во все последующие включения. В результате это занимает довольно много времени, и, к сожалению, процесс повторяется каждый раз, когда я открываю новый буфер.
[Эта проблема тоже решена]
Кроме того, похоже, что синтаксический анализ на самом деле не работает, например, когда я помещаю точку над примитивным типом, отличным от c (т. е. не int, double, float, и т. д.) вместо того, чтобы печатать определение типа в модели, сообщение об ошибке, например
Idle Service Error semantic-idle-local-symbol-highlight-idle-function: "#<buffer DEPFETResolutionAnalysis.cc> - Wrong type argument: stringp, (((0) \"IndexMap\"))"
Idle Service Error semantic-idle-summary-idle-function: "#<buffer DEPFETResolutionAnalysis.cc> - Wrong type argument: stringp, ((\"fXBetween\" 0 nil nil))"
где DEPFETResolutionAnalysis.cc — это файл и буфер, которые я редактирую в данный момент, а IndexMap и fXBetween — это типы, определенные в файлах, включенных в этот файл. m редактирование/некоторый файл, включенный в файл, который я редактирую.
Я не тестировал никаких дополнительных функций CEDET/semantic, так как проблема довольно раздражает. Мою конфигурацию cedet можно найти здесь.
EDIT: С помощью Алекса Отта я решил первую проблему. Это произошло из-за моей ужасной инициализации cedet. См. его первый ответ, как правильно настроить CEDET!
Осталась еще проблема с Idle Service Error
(которая при включении global-semantic-idle-local-symbol-highlight-mode
возникает постоянно, а не только при проверке определения типа в точке).
И существует новая проблема, заключающаяся в том, как отключить файлы инициализации сайта.
EDIT2: я выполнил semantic-debug-idle-function
в буфере, где возникла проблема, и он выдал примерно 700 КБ [sic!]. Похоже, он выполняет какие-то операции с контейнером данных, который, судя по всему, содержит информацию обо всех символах, определенных в проанализированных файлах. Поскольку я проанализировал довольно большой пакет (исходные файлы ~ 20 МБ), эта таблица довольно велика. Может ли семантика обрабатывать такую большую базу данных или это невозможно и причина моей проблемы?
EDIT3: удаление содержимого ~/.semanticdb
и повторная обработка всех включений помогли. Мне все еще нужно отключить файлы инициализации для сайта, но, поскольку это не связано с CEDET, я закрою этот вопрос (вопрос, связанный с файлами инициализации для сайта, можно найти здесь).
c-mode-common-hook
, то он будет вызываться для C, C++ и т. д., поэтому нет необходимости устанавливать его отдельно для режимов C и C++. - person Alex Ott   schedule 04.11.2012