ฉันจะรับ C / C ++ แบบคำนึงถึงบริบทกับ บริษัท ได้อย่างไร


11

Semantic ดูเหมือนว่าจะสามารถทำเช่นนี้ได้ แต่ฉันไม่สามารถทำงานได้ตามที่คาดหวัง ตัวอย่างเช่นถ้าฉัน#include "Type.h"และประกาศการType tใช้semantic-complete-analyze-inlineเมื่อจุดอยู่หลังจากt.ให้ฉันข้อผิดพลาดอย่างสม่ำเสมอ

ไม่พบประเภทสำหรับ `ประเภท t '

แทนที่จะให้สมาชิกทุกคนในที่สาธารณะ (หรือเหมาะสม) แก่tฉัน

ฉันจะรับผลลัพธ์ที่ต้องการได้อย่างไร โดยอุดมคติแล้วฉันจะใช้ความหมายใดก็ได้ที่ความหมายอาจให้เป็นแบ็กเอนด์สำหรับ บริษัท


คุณแน่ใจหรือไม่ว่า Type.h มีอยู่ถูกพบและประกาศประเภท ถ้าฉันทำ Type.h และ Type.cpp ในไดเรกทอรีเดียวกันกับ Type.h ประกาศคลาสที่Typeมีเขตข้อมูลint fooและchar barsemantic และ บริษัท ทำงานนอกกรอบ
J David Smith

คุณตรวจสอบแล้วว่าcompany-backendsตัวแปรมีcompany-semanticอยู่ในรายการหรือไม่? หากไม่มีคุณจะต้องเพิ่มส่วนเสริมลงในรายการแรกเพื่อให้มีการค้นหาก่อน
cheezy

น่าสนใจมันใช้งานได้กับตัวอย่างเล็กน้อยที่ฉันอธิบาย (น่าเสียดายที่ฉันไม่สามารถให้กรณีการใช้งานจริง แต่มันไม่ควรเกิดขึ้นจริง ๆ ) มีวิธีใดบ้างที่ฉันจะบังคับให้ Semantic ทำทุกสิ่งใหม่?
Sean Allred

@JDavidSmith ฉันจะแน่ใจได้อย่างไรว่ามันถูกพบ? โครงการที่ฉันทำงานด้วยจริง ๆ มีความซับซ้อนมากในโครงสร้างการสร้าง
Sean Allred

@cheezy company-semanticอยู่ในcompany-backends; ขอบคุณ :)
Sean Allred

คำตอบ:


1

ฉันขอแนะนำให้ใช้โหมดประชดกับบริษัท ประชดเพื่อให้สำเร็จแทนความหมายเนื่องจากความหมายโดยทั่วไปช้าเกินไปและง่ายกว่า - นั่นคือ มันมักจะไม่ได้เสนอความสำเร็จเมื่อคุณคิดว่ามันควรจะเป็น



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")

จากนั้นคุณสามารถใช้ส่วนหัวของ บริษัท ( 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/"))
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.