Получите узлы AST класса target-C без разрешения зависимостей - PullRequest
0 голосов
/ 07 марта 2019

Я пытаюсь создать инструмент рефакторинга, который позволил бы мне получить синтаксическое дерево из классаjective-c, чтобы я мог изменить структуру класса и вывести другую версию, соответствующую моим критериям. Я смотрю на Libtooling Clang, чтобы сгенерировать AST, а затем взять его оттуда, проблема в том, что мне нужно каким-то образом убедиться, что я рекомендую все пути ко всем возможным заголовкам, которые импортируются из этого источника, и это что-то Я хотел бы избежать.

Мне интересно, есть ли способ генерировать AST для класса без необходимости, например, указывать пути для каркаса, содержащего определения классов свойств, которые класс, который я хочу разместить в рефакторе.

В идеале я мог бы получить узлы в необработанном тексте моего исходного файла, содержащем такие вещи, как свойства, функции и т. Д. ... таким образом, я бы мог пройти по этому дереву и изменить его структуру, чтобы впоследствии восстановить мой источник по желанию.

1 Ответ

0 голосов
/ 29 марта 2019

Проведя дополнительные исследования, я развил понимание того, что то, что я пытался сделать, даже невозможно в качестве инструментов LibTooling need syntactic and semantic information about a program. Эта информация может быть предоставлена ​​через файл compile_commands.json, как указано в документации:

Clang Tooling needs a compilation database to figure out specific build options for each file. Currently it can create a compilation database from the compile_commands.json file

Для проектов Xcode этот файл может быть сгенерирован следующим образом:

xcodebuild -project PROJECT_NAME.xcodeproj | xcpretty -r json-compilation-database --output compile_commands.json

вам нужно будет установить гем xcpretty. (gem install xcpretty)

Источник: https://clang.llvm.org/docs/HowToSetupToolingForLLVM.html

...