我想了解如何使用libclang完成代碼完成。我看過「思考超越編譯器」,我已經看過c-index-test,並且我找到了一個簡單的示例程序here爲什麼不是libclang返回有意義的完成結果?
我編譯了該程序,並將其運行在此示例文件上,類似於一個視頻:
struct List {
int Data;
struct List *Next;
};
int sumListNode(struct List *Node) {
int result = 0;
for (; Node; Node = Node->Next)
result = result + Node->
}
void test() {
sumLi
}
如果我在節點 - 後的第一個不完整的空間>指向程序,它吐出幾個C關鍵字信息,但它不吐下一步或數據如視頻說應該。
如果我將它指向sumLi之後的空格,它會打印出相同的C關鍵字。如果我將它指向sumLi中具有's'的列,我可以打印出sumListNode,但即使如此,它也會將它指定爲與其他關鍵字相同的優先級值,所以它實際上只是打印出我可以放在那裏,而不是閱讀光標下的內容,並試圖做出明智的猜測。我只是抓着吸管,希望將光標放在片段的開頭,而不是結尾會有所幫助。
我已經瞭解了很多關於libclang可以給我的數據類型以及如何使用它從doxygen中操作,以及從c-index-test中調用,但我沒有學會如何使它給了我相關的數據,所以我有一些工作。
謝謝!這幾乎解決了我的問題。我的文本編輯器說,Node - >(這裏)是第33列。然而,運行clang本身會在第27列顯示沒有任何內容的錯誤。看起來它會將製表符視爲單個列。對於第二個例子,它仍然打印出很多關鍵字,而不是僅僅是預期的'sumListNodes'。他們之間沒有空間,Clang的建議就不會編譯。我試過整個專欄中的那一個,只是爲了確定。我想這是爲了理清實際的可能性嗎? – John 2013-04-08 16:54:11
糟糕,我應該補充一點,我編輯了test.c,以便在這一點上可以預期一個整數值,並且在範圍內聲明一個struct List。只是爲了確定clang能夠理解的真實世界背景。它仍然沒有給我很多我期待的。例如,int i = sumLilong將不會編譯,但它將「long」作爲與sumListNodes同等優先級的建議。 – John 2013-04-08 16:57:16
我編輯了我的答案,嘗試回答這些問題。 – Francesco 2013-04-09 06:41:14