Ponownie zainstalowałem emacs 24.2.50 na nowym hoście linuxowym i uruchomiłem nową konfigurację dotEmacs opartą na konfiguracji emacs magnars. Ponieważ użyłem CEDET do jakiegoś sukcesu w moim poprzednim przepływie pracy, zacząłem go konfigurować. Jednak istnieje pewne dziwne zachowanie za każdym razem, gdy ładuję plik źródłowy C++.Dziwny błąd semantyczny
[Ta część jest rozwiązany]
Zgodnie z oczekiwaniami, semantyczne Analizuje wszystkie zawarte pliki (a podczas wstępnej konfiguracji analizuje wszystkie pliki określone przez semantyczny-add-system-to zmienne), ale drukuje ten komunikat o błędzie, który wygląda tak:
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'.
W powyższym przykładzie błąd zostanie wydrukowany dla wektora STL, ale odpowiedni komunikat o błędzie zostanie wydrukowany dla każdego pliku zawartego przez jednego jestem wizyty i ewentualne późniejsze obejmuje. W rezultacie zakończenie procesu zajmuje dużo czasu i niestety proces powtarza się w każdym typie, w którym otwieram nowy bufor.
[Problem ten został rozwiązany Too]
Ponadto wygląda na to, parsowanie naprawdę nie działa jak kiedy umieścić punkt wyżej non-c prymitywnego typu (tzn nie int, double, float, etc) zamiast drukować definicję typu w modeline komunikat o błędzie podobny
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))"
gdzie DEPFETResolutionAnalysis.cc jest bufor plik & jestem obecnie Edycja i IndexMap i fXBetween to typy zdefiniowane w plikach zawartych w edytowanym pliku/pliku dołączonym do pliku, który edytuję.
Nie przetestowałem żadnych innych funkcji CEDET/semantic, ponieważ problem jest dość denerwujący. Moja konfiguracja cedetu można znaleźć here.
EDYCJA: Z pomocą Alexa Otta rozwiązałem pierwszy problem. Było to spowodowane moją straszliwą inicjacją cedetu. Zobacz pierwszą odpowiedź, aby poprawnie skonfigurować CEDET!
Nadal pozostaje problem z Idle Service Error
(który po włączeniu global-semantic-idle-local-symbol-highlight-mode
występuje na stałe, nie tylko podczas sprawdzania definicji typu w punkcie).
Istnieje również nowy problem z, jak wyłączyć plik (y) inicjujący pod kątem witryny.
EDIT2: Wykonałem semantic-debug-idle-function
w buforze, w którym występuje problem, i generuje wynik ~ 700kb [sic!]. Wygląda na to, że wykonuje pewne operacje na kontenerze danych, który na podstawie jego wyglądu zawiera informacje o wszystkich symbolach zdefiniowanych w analizowanych plikach. Ponieważ przeanalizowałem dość duży pakiet (~ 20 MB plików źródłowych), ta tabela jest raczej duża. Czy semantyczna obsługa bazy danych, która jest duża, czy jest to niemożliwe i powodem mojego problemu?
EDIT3: Usunięcie zawartości ~/.semanticdb
i ponowna analiza wszystkich załączeń sprawiły, że była to dobra sztuczka.Nadal potrzebuję wyłączyć pliki inicjujące na miejscu, ale ponieważ nie jest to związane z CEDET, zamknę to pytanie (pytanie dotyczące plików inicjujących witryny można znaleźć pod adresem here).
Proszę podać informacje na jakiej wersji CEDET używasz itd Proszę również wziąć pod pamiętaj, że nie musisz wstawiać linii 2-40 w hak. Zadanie to (ładowanie CEDETa) powinno być wykonane tylko raz, a nie przy otwieraniu każdego pliku C/C++. Zobacz https://gist.github.com/3930120 jako przykład konfiguracji CEDETA –
Są też inne błędy w twoim init - kiedy używasz 'c-mode-common-hook', to będzie on wywoływany dla C, C++ itd., Więc nie ma potrzeby ustawiania go osobno dla trybów C i C++. –