Почему libclang не генерирует курсор для ссылки на файл? - PullRequest
0 голосов
/ 05 декабря 2018

Когда я анализировал файл кода C ++, используя привязки Python libclang, я обнаружил, что курсор перекрестной ссылки отсутствует.

Пример кода C ++:

#include "controller/LocalController.h"

int addition(int a, int b)
{
    return a + b;
}

auto c = addition(1, 2);

auto d = LocalController::getTextByKey("100000");

Скрипт Python:

index = clang.cindex.Index.create()
tu = index.parse("MazeController.cpp", clang_args, None, 1)
for child in tu.cursor.walk_preorder():
    if child.location.file != None:
        if child.location.file.name == tu.cursor.displayname:
            print child.displayname, child.kind, child.location.line, child.location.column

Переменная clang_args включает базовый путь к «controller / LocalController.h».Ниже приведен вывод:

controller/LocalController.h CursorKind.INCLUSION_DIRECTIVE 1 4
addition(int, int) CursorKind.FUNCTION_DECL 3 5
a CursorKind.PARM_DECL 3 18
b CursorKind.PARM_DECL 3 25
 CursorKind.COMPOUND_STMT 4 1
 CursorKind.RETURN_STMT 5 5
 CursorKind.BINARY_OPERATOR 5 12
a CursorKind.UNEXPOSED_EXPR 5 12
a CursorKind.DECL_REF_EXPR 5 12
b CursorKind.UNEXPOSED_EXPR 5 16
b CursorKind.DECL_REF_EXPR 5 16
c CursorKind.VAR_DECL 8 6
addition CursorKind.CALL_EXPR 8 10
addition CursorKind.UNEXPOSED_EXPR 8 10
addition CursorKind.DECL_REF_EXPR 8 10
 CursorKind.INTEGER_LITERAL 8 19
 CursorKind.INTEGER_LITERAL 8 22
d CursorKind.VAR_DECL 10 6

Локальный вызов функции сложения отлично анализируется libclang, но синтаксический анализ вызова функции кросс-файла LocalController :: getTextByKey отсутствует, так как последняя строка выводакурсор d.

Кто-нибудь может мне помочь?Большое спасибо!

...