Come posso ottenere il completamento sensibile al contesto C / C ++ con la Società?


11

Semantic sembra essere in grado di farlo, ma non riesco a farlo funzionare come mi aspetterei. Ad esempio, se io #include "Type.h"e dichiaro Type t, l'uso di semantic-complete-analyze-inlinequando il punto è dopo t.mi dà costantemente l'errore

Impossibile trovare tipi per `Tipo t '

invece di darmi tutti i membri pubblici (o altrimenti appropriati) di t.

Come posso ottenere il risultato che sto cercando qui? Idealmente, come posso usare qualunque cosa Semantic possa fornire come backend per la Società?


Sei sicuro che Type.h esista, venga trovato e dichiari il tipo Type? Se faccio Type.h e Type.cpp nella stessa directory con Type.h dichiarando una classe Typecon campi int fooe char bar, semantica e società lavorano fuori dagli schemi.
J David Smith,

Hai verificato se la company-backendsvariabile ha company-semanticnella sua lista? In caso contrario, ti consigliamo di aggiungere antepriverlo al primo dell'elenco in modo che venga cercato per primo
cheezy

È interessante notare che funziona con l'esempio minimo che descrivo. (Sfortunatamente non posso davvero dare il caso d'uso reale, ma non dovrebbe importare.) Esiste un modo per forzare Semantic a ripassare tutto?
Sean Allred,

@JDavidSmith Come posso assicurarmi che sia stato trovato? Il progetto con cui sto effettivamente lavorando è molto complesso nella sua struttura di costruzione.
Sean Allred,

@cheezy company-semanticè in company-backends; grazie :)
Sean Allred il

Risposte:


1

Io suggerisco di usare l'ironia-mode con società-ironia per il completamento invece che semantico semantico è generalmente troppo lento e semplicistico - vale a dire. spesso non offre completamenti quando pensi che dovrebbe.


0

Probabilmente vorrai seguire il tutorial qui e impostare company-clangper ottenere candidati migliori.


0

Per prima cosa devi inizializzare CEDET ed 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")

allora puoi usare company-c-headers ( 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/"))
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.