Як я можу отримати контекстно-залежне завершення C / C ++ разом із Компанією?


11

Semantic начебто, це вдається зробити, але я не можу змусити його працювати так, як я би очікував. Наприклад, якщо я #include "Type.h"і заявляю Type t, використання, semantic-complete-analyze-inlineколи точка є після, t.послідовно видає мені помилку

Неможливо знайти типи для `Type t '

замість того, щоб давати мені всіх публічних (або іншим чином відповідних) членів t.

Як я можу отримати результат, який я шукаю тут? В ідеалі, як я можу використовувати все, що Semantic може надати в якості резервного для компанії?


Ви впевнені, що Type.h існує, знайдений і оголошує тип типу? Якщо я Type.h і Type.cpp в тій же директорії з Type.h оголосити клас Typeз полями int fooі char bar, семантичний і роботи компанії з коробки.
Дж. Девід Сміт

Ви перевірили, чи є company-backendsзмінна company-semanticу своєму списку? Якщо ні, то ви хочете додати його до першого списку, щоб його шукали першим
чіткий

Цікаво, що це працює з мінімальним прикладом, який я описую. (На жаль, я справді не можу дати справжній випадок використання, але це не має значення.) Чи є спосіб я змусити Semantic перечитати все?
Шон Алред

@JDavidSmith Як я можу забезпечити його пошук? Проект, з яким я насправді працюю, дуже складний у своїй структурі побудови.
Шон Аллред

@cheezy company-semanticв company-backends; дякую :)
Шон Аллред

Відповіді:


1

Я пропоную використовувати режим іронії з іронією компанії для завершення замість семантичної, оскільки семантичний, як правило, занадто повільний і спрощений - тобто. він часто не пропонує доповнень, коли ви думаєте, що слід.


0

Ви, ймовірно, хочете пройти тут підручник та налаштування, company-clangщоб отримати кращих кандидатів.


0

Спочатку потрібно ініціалізувати CEDET та 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")

тоді ви можете використовувати заголовки компанії-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/"))
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.