Bagaimana saya bisa mendapatkan penyelesaian konteks sensitif C / C ++ dengan Perusahaan?

11

Semantic tampaknya bisa melakukan ini, tetapi saya tidak bisa membuatnya berfungsi seperti yang saya harapkan. Sebagai contoh, jika saya #include "Type.h"dan menyatakan Type t, menggunakan semantic-complete-analyze-inlineketika titik setelah t.secara konsisten memberi saya kesalahan

Tidak dapat menemukan tipe untuk `Type t '

alih-alih memberi saya semua anggota publik (atau yang sesuai) dari t.

Bagaimana saya bisa mendapatkan hasil yang saya cari di sini? Idealnya, bagaimana saya bisa menggunakan apa pun yang disediakan Semantic sebagai pendukung untuk Perusahaan?

Sean Allred
sumber
Apakah Anda yakin Type.h ada, ditemukan, dan mendeklarasikan Type type? Jika saya membuat Type.h dan Type.cpp di direktori yang sama dengan Type.h menyatakan kelas Typedengan bidang int foodan char bar, semantik dan perusahaan bekerja di luar kotak.
J David Smith
Sudahkah Anda memverifikasi jika company-backendsvariabel ada company-semanticdalam daftar? Jika tidak, Anda ingin menambahkannya ke daftar pertama sehingga dicari terlebih dahulu
cheezy
Menariknya, ia bekerja dengan contoh minimal yang saya jelaskan. (Sayangnya saya benar-benar tidak bisa memberikan kasus penggunaan yang sebenarnya, tetapi seharusnya tidak masalah.) Apakah ada cara saya bisa memaksa Semantic untuk mem-parsing segalanya?
Sean Allred
@JDavidSmith Bagaimana saya bisa memastikan itu ditemukan? Proyek yang saya kerjakan sebenarnya sangat kompleks dalam struktur bangunannya.
Sean Allred
@cheezy company-semanticada di company-backends; terima kasih :)
Sean Allred

Jawaban:

1

Saya sarankan menggunakan ironi-mode dengan perusahaan-ironi untuk penyelesaian bukan semantik sebagai semantik umumnya terlalu lambat dan sederhana - yaitu. sering tidak menawarkan penyelesaian ketika Anda berpikir itu harus.

alexmurray
sumber
0

Anda mungkin ingin mengikuti tutorial di sini dan mengatur company-clanguntuk mendapatkan kandidat yang lebih baik.

expez
sumber
0

Pertama, Anda perlu menginisialisasi CEDET dan 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")

maka Anda dapat menggunakan header perusahaan-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
sumber