Jak mogę uzyskać kontekstowe uzupełnienie C / C ++ w firmie?

11

Semantic wydaje się być w stanie to zrobić, ale nie mogę tego zrobić tak, jak bym tego oczekiwał. Na przykład, jeśli ja #include "Type.h"i deklaruję Type t, użycie semantic-complete-analyze-inlinekiedy punkt jest po t.konsekwentnie daje mi błąd

Nie można znaleźć typów dla `Type t '

zamiast dawać mi wszystkich publicznych (lub w inny odpowiedni sposób) członków t.

Jak mogę uzyskać wynik, którego tu szukam? Idealnie, jak mogę wykorzystać wszystko, co Semantic może zapewnić jako zaplecze dla Firmy?

Sean Allred
źródło
Czy jesteś pewien, że Type.h istnieje, znajduje się i deklaruje typ Type? Jeśli zrobię Type.h i Type.cpp w tym samym katalogu z Type.h deklarując klasę Typez polami int fooi char bar, semantyczny i spółka pracy po wyjęciu z pudełka.
J David Smith
Czy sprawdziłeś, czy company-backendszmienna ma company-semanticna liście? Jeśli nie, należy dodać opcję dodania do pierwszej z listy, aby była najpierw wyszukiwana
cheezy
Co ciekawe, działa z minimalnym przykładem, który opisuję. (Niestety nie mogę podać rzeczywistego przypadku użycia, ale to nie powinno mieć znaczenia.) Czy jest jakiś sposób, aby zmusić Semantic do ponownej analizy wszystkiego?
Sean Allred,
@JDavidSmith Jak mogę się upewnić, że został znaleziony? Projekt, nad którym faktycznie pracuję, jest bardzo złożony w strukturze kompilacji.
Sean Allred,
@cheezy company-semanticjest w company-backends; dzięki :)
Sean Allred

Odpowiedzi:

1

Sugeruję użycie trybu ironii z ironią firmy do zakończenia zamiast semantycznego, ponieważ semantyczny jest na ogół zbyt wolny i uproszczony - tzn. często nie oferuje uzupełnień, kiedy uważasz, że powinno.

alexmurray
źródło
0

Prawdopodobnie chcesz postępować zgodnie z samouczkiem tutaj i skonfigurować, company-clangaby uzyskać lepszych kandydatów.

expez
źródło
0

Najpierw musisz zainicjować CEDET i ede

(global-ede-mode 1)
(add-to-list 'semantic-default-submodes 'global-semanticdb-minor-mode 1)
(add-to-list 'semantic-default-submodes 'global-semantic-idle-scheduler-mode 1)
(add-to-list 'semantic-default-submodes 'global-semantic-stickyfunc-mode 1)
(add-to-list 'semantic-default-submodes 'global-semantic-highlight-func-mode 1)
(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-srecode-minor-mode t)
(add-to-list 'semantic-default-submodes 'global-semantic-decoration-mode t)
(semantic-mode) ;; Active le mode semantic
(require 'stickyfunc-enhance) ;; multilines concatene dans la header line
(require 'cedet-cscope)

(require 'ecb)
(ede-cpp-root-project "projName"
                  :name "projName Project"
                  :file "~/workspaces/projName/proj.txt" ;; an arbitrary file
                  :include-path '("/src/main/src"
                                  "/src/main/include"
                                  "/src/test/src"
                                  "/src/test/include"
                                  ... )
                  :system-include-path '("/usr/include/ ~/workspaces/install/proj3/lib/ /usr/include/boost/")
                  :spp-table '(("isUnix" . "") ("BOOST_TEST_DYN_LINK" . "")))
;; cedet semantic
(semanticdb-enable-gnu-global-databases 'c-mode t)
(semanticdb-enable-gnu-global-databases 'c++-mode t)
;; You can add this to improve the parse of macro-heavy code:
(require 'semantic/bovine/c)
(add-to-list 'semantic-lex-c-preprocessor-symbol-file "/usr/lib/gcc/x86_64-redhat-linux/4.4.7/include/stddef.h")

możesz użyć nagłówków firmowych c ( https://github.com/randomphrase/company-c-headers )

(require 'company-c-headers)
     (add-to-list 'company-backends 'company-c-headers)
     (add-to-list 'company-c-headers-path-system "/usr/include/c++/4.4.7/ /home/me/DEPEDENCIES/LIBXX/lib/ /home/me/DEPEDENCIES/LIBYY/lib /usr/include/boost/"))
djangoliv
źródło