XcodeKit и SourceKit
У меня нет опыта работы с XcodeKit и SourceKit, за исключением нескольких статей, которые я прочитал, и официальных страниц https://developer.apple.com/documentation/xcodekit https://github.com/apple/swift/tree/master/tools/SourceKit
Я пытаюсь понять разницу между ними и тем, на что они способны точно.
Я думаю, что XcodeKit, по сути, позволяет добавлять команды в меню Xcode и позволяет взаимодействовать с открытым исходным кодом, создавая расширение приложения, которое вы затем можете распространять через App Store. Насколько я мог понять, XcodeKit позволяет вам получать информацию только из текущего сфокусированного файла (не всех файлов в проекте), затем вы можете получить выделенный текст и т. Д. По крайней мере, это то, что я читал до Xcode 9, не уверен, что сейчас лучше.
SourceKit также взаимодействует с исходным кодом, но выглядит как более мощный, но более низкий уровень.
Что мне интересно, так это:
- Позволяет ли SourceKit получить доступ ко всем классам Swift и ObjC, которые есть в вашем открытом проекте, а затем извлечь из него информацию? Например, предположим, что я хочу извлечь информацию, такую как структуры и классы, методы каждого класса, а затем сгенерировать какой-либо вывод из него. Как мне использовать SourceKit (или XcodeKit?) Для этого?
- Любая ссылка на примеры была бы отличной!
- SourceKit все еще актуален и поддерживается Apple?
https://github.com/apple/swift/blob/master/tools/SourceKit/docs/Protocol.md
Спасибо
0 ответов
В зависимости от вашей конечной цели у вас есть несколько вариантов:
SwiftSyntax
это новая (бета) платформа с открытым исходным кодом от Apple для просмотра / изменения AST (абстрактного синтаксического дерева) документа. Более подробная информация и пример доступны в репозитории GitHub.Как уже упоминалось,
SourceKitten
библиотека Swift для общения сSourceKit
,SourceKit
это основа Xcode, который на самом деле является просто прославленным текстовым редактором без него. Он предоставляет все - от семантически проанализированных подструктур и сгенерированных интерфейсов до дополнения кода и выделения синтаксиса - все, что нужно IDE. Это наиболее всеобъемлющий вариант, и он никуда не денется в ближайшее время (как отметил Максим, Apple даже разрабатывает для него интерфейс LSP). Бесстыдный плагин: я доработалSylvester
Типизированный, XPC-доступенSourceKitten
(SourceKit
) интерфейс с небольшим количеством сахара.SKEditorOpen
Запрос должен предоставить вам достаточно информации, чтобы извлечь все, что вы хотите из исходного документа.XcodeKit
предоставляет чрезвычайно ограниченный API для взаимодействия с исходным кодом. Фактически, он предоставляет только изменяемый буфер открытого документа в редакторе, из которого пользователь вызвал команду.
Что касается вашего запроса на извлечение открытых в данный момент документов в редакторе, единственным вариантом будет использование замечательного скриптового интерфейса, который предоставляет Xcode. Файл Xcode SDEF можно найти по адресу /Applications/Xcode.app/Contents/Resources/Xcode.sdef. Вы можете использовать ScriptingBridge
рамки для этого из приложения Какао. Если вы используете Swift, то SwiftScripting
хранилище крайне важно.
Ваш анализ верен, XcodeKit позволяет взаимодействовать с окном редактора и (выделенным) текстом в нем, а SourceKit обладает знанием синтаксиса языка программирования. AFAIK, SourceKit очень жив, и следующая большая вещь будет LSP - https://github.com/apple/sourcekit-lsp