2014-10-08 2 views
1

На работе у нас есть довольно большая база кода, и я действительно пытаюсь заставить Semantic работать. Вчера, похоже, проанализировал файл, над которым я работал, а также несистема включает в себя: Отлично. Я мог бы создать экземпляр класса, который определен в другом файле include, и после построения я мог просматривать все функции и т. Д. С помощью ключа, привязанного к семантико-ia-complete-symbol-meu.emacs семантические окна непоследовательны

Во-первых, я использую:

  • Emacs 24.3.1 с
  • Cedet версии Bzr: rev_8678 .tar.gz и все это работает на
  • Windows, 7 (к сожалению).
  • MinGW и MSYS установлен
  • Microsoft Visual Studio 10

В моих .emacs (связанный с Cedet материала):

;; MODE: CEDET 
(load-file "~/.emacs.d/cedet/cedet-devel-load.el") ;; This is the latest dev' version ~~ 26th Sept 2014 
;; Add further minor-modes to be enabled by semantic-mode. 
;; See doc-string of `semantic-default-submodes' for other things 
;; you can use here. 
(add-to-list 'semantic-default-submodes 'global-semantic-idle-summary-mode t) 
(add-to-list 'semantic-default-submodes 'global-semantic-idle-completions-mode t) 
(add-to-list 'semantic-default-submodes 'global-cedet-m3-minor-mode t) 
(semantic-mode 1) 
(global-ede-mode 1) 
;(global-semantic-decoration-mode) 

;(setq semanticdb-default-save-directory "~/.emacs.d/.semanticdb/") 
;(add-to-list 'magic-fallback-mode-alist '("^// " . c++-mode)) 
;(add-to-list 'magic-fallback-mode-alist '("^#include" . c++-mode)) 
;(semantic-add-system-include "c:/Program Files (x86)/Microsoft Visual Studio 10.0/VC/include" 'c++-mode) 
;(semantic-add-system-include "/usr/include/c++/3.4.4") 

Поэтому мое местоположение по умолчанию семантической базы данных ~/.emacs.d/semanticdb

Я пришел сегодня и обнаружил, что, когда я загружаю тот же файл до Я продолжаю получать три ошибки (оба из которых я искал, но ничего не соответствует моему вопросу):

Parsing main.cpp (LL)... 
Idle Parse Error: "#<buffer main.cpp> - End of buffer" 

И

Save Error: nil: c:/Users/[MY_USER]/.emacs.d/semanticdb/!drive_[STUFF_HERE]!semantic.cache 

И

Idle Service Error semantic-idle-summary-idle-function: "#<buffer main.cpp> - End of buffer" 

Как я уже говорил, сегодня работал вчера, так почему бы и нет? (PS: Btw, это происходит только с main.cpp - когда я ищу определения функций с помощью xcscope и открываю определение, файл корректно разбирается с CEDET, а локальные вложения анализируются, и я могу искать символы, кажется, просто be main.cpp по какой-то причине.)

PS: Я только что прочитал аналогичную проблему, с которой у кого-то есть с MATLAB. Решение состояло в том, чтобы либо создать каталог, указанный в пути с включением matlab, либо изменить список в пути. Но это не имеет смысла для моей ситуации, потому что вчера это работало, и я не касался CEDET со вчерашнего дня.

semantic-c-dependency-system-include-path is a variable defined in `c.el'. 
Its value is ("/usr/include") 

semantic-dependency-include-path is a variable defined in `dep.el'. 
Its value is nil 
Local in buffer main.cpp; global value is the same. 

Оба они такие же, как и вчера.

PS: Кроме того, когда семантический режим включен, я больше не буду использовать (imenu-add-to-menubar) - я получаю только rescan все. Однако, когда у меня нет включенного семантического режима, это работает отлично. Я не знал, что семантика испортилась с imenu, если вы не сказали об этом?

Это все немного раздражает, потому что мне очень нравится потенциал CEDET/Semantic и ценят работу, которая была введена в нее. Emacs уже мощный, но с полностью работающим CEDET его мощность имеет тенденцию к более чем 9000!

Я считаю, что разработчики, связанные с CEDET, должны запускать тесты на компьютере под управлением Windows, чтобы можно было обнаружить ошибки с проблемами Windows. Я знаю, что ОС ужасна, но некоторые разработчики вынуждены использовать ее на рабочем месте. Я до сих пор не встречал проблему с CEDET на моих машинах Linux, потому что все в стандартных местах! Но это касается Windows.

PS: Если это какая-то помощь, очень простой проект прекрасно работает с этой настройкой и CEDET. У меня, в совершенно другом месте:

emacs_test_semantic> ls -l 
total 103 
-rw-r--r-- 1 [USER] Administrators 43 Oct 2 17:28 Makefile 
-rw-r--r-- 1 [USER] Administrators 158 Oct 8 12:04 main.cpp 
-rw-r--r-- 1 [USER] Administrators 247 Oct 1 12:51 myClass.cpp 
-rw-r--r-- 1 [USER] Administrators 159 Oct 1 12:51 myClass.hpp 
-rwxr-xr-x 1 [USER] Administrators 99862 Oct 2 17:28 output.exe 

И, в основном:

#include <list> 
#include "myClass.hpp" 

using namespace std; 

int main() { 
    MC CLASS(3, 5); 



    list<MC> myList; 
myList. 

    return 0; 
} 

Итак, я в состоянии завершить символы класса MC, однако, не список STL. НО, это тема не о возможности завершения STL-функций/шаблонов, потому что на это много вопросов.

Этот небольшой проект, хотя с включенным (global-semantic-decoration-mode) и RED над #include <vector> не дает тех же трех ошибок, описанных выше. Кроме того, imenu работает!

===

В общем, я несколько запутался, непоследовательности, здесь. Тот факт, что в большой базе кода вчера работали, но теперь у меня есть эти три ошибки, которых я раньше не делал!

===

PS: Только после того, как я написал это я загрузить в тот же файл, и на этот раз глобального украшения режима показывает, что местное включает фактически теперь понял! Хотя я ничего не изменил. Так что теперь, похоже, снова работает - но это непоследовательность непонятна.

Ну, это работает на одну ветку, а не на другую. Интересно, что в отрасли, что дает мне три ошибки (указанные выше) У меня есть файл базы данных (и imenu не работает, и ни украшения режима видимые:

-rw-r--r-- 1 [USER] Administrators 449 Oct 8 13:42 !drive_d![SOME_STUFF]!semantic.cache 

По сравнению с той, которая работает который (где, глобального украшения режима видна и imenu работы):

-rw-r--r-- 1 [USER] Administrators 555184 Oct 8 13:51 !drive_d![SOME_STUFF]!semantic.cache 

Вы можете увидеть большую разницу в размерах и эти две ветви отличаются только в совершенно другом месте в коде. Итак, просто дополнительная информация.

===

Как пользователь Cedet/семантический (хотя и не очень хороший) я действительно хотел бы знать, как вручную FORCE разбор всех файлов в данном списке, который написавших БД, а не полагаться на семантику, чтобы сделать это. Это было запрошено раньше, и люди создали некоторый hack lisp, но с CEDET, когда-либо меняющимся с 1.1, код не работает.

===

PS: Последнее редактирование: из не где ошибки ушли, единственное, что я помню делать это сохранение буфера. Вы можете сказать, когда ошибки ушли, потому что начинается глобальная декада - т. Е. Подчеркивания и выделенные файлы.Это потому, что я сохранил буфер? Я не уверен. Я не могу вспомнить, сохранил ли я его раньше. Кроме того, файл сохранить в БД увеличилась и последняя модификация файла БД было несколько минут назад с этого поста:

Что было раньше:

-rw-r--r-- 1 [USER] Administrators 449 Oct 8 13:42 !drive_d![SOME_STUFF]!semantic.cache 

Сейчас:

-rw-r--r-- 1 [USER] Administrators 158327 Oct 8 15:38 !drive_d![SOME_STUFF]!semantic.cache 

ответ

0

Только что испорченные на работе многие из глюков, которые я изначально обнаружил, начинают иметь смысл и кажутся просто моим недостатком понимания продукта. Нет никакой проблемы, в которой система синтаксического анализа включает (например, STL) или локальную, больше в Windows, и это в основном отличается от блестящей функции: global-semantic-decoration-mode. Это дает понять, если исходный файл был разобран или нет, и т. Д. Итак, теперь я использую это в своих .emacs.

Проблема несостоятельности (который я нашел не несогласованность, смотри ниже) - я нашел - возникает, когда парсер встречает строку кода, как это:

#if defined(X) 

//hundreds of lines of code 

#endif /* define(X) */ 

Я наполовину понять его , Если X не был определен, не беспокойтесь синтаксического анализа. Но я все еще хочу, чтобы CEDET/Semantic работал над всем кодом. Я все еще могу использовать завершение, если я работаю в функции, которая существует в области, не существующей из-за чего-то неопределенного.

Я говорю, наивно, что семантический/cedet должен анализировать код независимо от того, что-то определено или нет. Однако, возможно, это была преднамеренная функция?

Спасибо.

Смежные вопросы