Clang AST Matchers: сопоставление на вложенныхNamespaces - PullRequest
3 голосов
/ 21 октября 2019

Учитывая класс с закрытым членом другого пространства имен

namespace Test { namespace Cfg {
class ExampleApi {
public:
    ExampleApi() = default;
    int someVar;
};
}}

class Example {
public:
    Example() = default;
private:
   Test::Cfg::ExampleApi _cfgApi;
};

Я пытаюсь найти соответствие во вложенном пространстве имен Cfg для cxxConstructorExpr, поскольку моей конечной целью является чтение некоторых имен переменных из ExampleApiкласс

Я могу сопоставить _cfgApi, выполнив что-то вроде:

cxxConstructExpr(hasType(asString("Test::Cfg::ExampleApi")))

Но этого недостаточно, поскольку база кода автоматически генерирует классы под Test::Cfg::*Api, а у меня нетнашел использование предикатов подстановочных знаков.

Я попытался сделать что-то с:

nestedNameSpecificierLoc(hasPrefix(loc(specifiesNamespace(hasName("Test")))))

, которое соответствует пространству имен, но не вложенному пространству имен. Я думаю, что после пост-обработки может быть слишком много шума для постобработки.

Я играл с сопоставителем hasParent, но пока мне не повезло.

Итак, мой вопрос: как мне сопоставить вложенное пространство имен для инициализации класса.

...