나는 libclang으로 코드 완성을하는 법을 이해하려고 노력하고있다. 나는 "컴파일러를 뛰어 넘는 사고"를 보았고 c-index-test를 살펴본 결과 간단한 샘플 프로그램을 발견했다. herelibclang이 의미있는 완료 결과를 반환하지 않는 이유는 무엇입니까?
나는이 프로그램을 컴파일하고이 샘플 파일에서 실행했다.
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에서 파고 들기위한 방법을 많이 배웠습니다. 관련 데이터를 제공하므로 작업 할 항목이 있습니다.
감사합니다 : 당신이 elisp 이해한다면
는 그 소리의 근원은이 두 가지 수준의 구현의 좋은 예입니다 이맥스에 대한 자동 완성 기능 라이브러리를 포함! 그것은 내 문제를 거의 해결했다. 내 텍스트 편집기에서 노드 -> (여기) 열 33입니다 말한다. 그러나 clang 자체를 실행하면 거기에 아무것도 열 27에 대한 오류를 넣습니다. 마치 한 열로 탭을 계산합니다. 두 번째 예제의 경우, 예상되는 'sumListNodes'대신 많은 키워드를 인쇄합니다. 그들 사이에 공간이 없으면 Clang의 제안은 컴파일되지 않습니다. 나는 단지 전체 칼럼을 가로 질러 그것을 시도했다. 나는 실제적인 가능성을 분류하는 것이 나에게 맞는 것 같아요? – John
죄송하지만, test.c를 편집하여 그 시점에서 정수 값이 예상되고 구조체 List가 범위에서 선언되도록 추가해야합니다. clang이 이해할 수있는 실제 세계가 있는지 확인하기 만하면됩니다. 그것은 아직도 내가 기대하고 있었던 것을 아주주지 않았다. 예를 들어 int i = sumLilong은 컴파일되지 않지만 sumListNodes와 동일한 우선 순위를 갖는 제안으로 'long'을 제공합니다. – John
나는 그 질문에 대답하려고 내 대답을 편집했다. – Francesco