测试已测试 | ✓ |
语言语言 | SwiftSwift |
许可 | MIT |
发布最新发布 | 2016年12月 |
SwiftSwift 版本 | 3.0 |
SPM支持 SPM | ✓ |
由 JP Simard 维护。
依赖项 | |
SWXMLHash | ~> 3.0 |
Yams | ~> 0.1 |
一个可爱的小框架和命令行工具,用于与 SourceKit 交互。
SourceKitten 通过与 sourcekitd.framework
链接和通信来解析 Swift AST,提取 Swift 或 Objective-C 项目的注释文档,获取 Swift 文件的语法数据等等!
在 macOS 上构建 SourceKitten 需要 Xcode 8.0 或 Swift 3.0 工具链以及 Swift Package Manager。
在 Linux 上构建 SourceKitten 需要
libsourcekitdInProc.so
并将其放置在 /usr/lib
或其他由环境变量 LINUX_SOURCEKIT_LIB_PATH
指定的位置。SourceKitten 通常支持 SourceKit 的 earlier 版本。
运行 brew install sourcekitten
.
在此项目的根目录中运行 swift build
.
在此项目的根目录中运行 make install
.
从 发布选项卡 下载并打开 SourceKitten.pkg。
一旦安装了 SourceKitten,您就可以从命令行使用它。
$ sourcekitten help
Available commands:
complete Generate code completion options.
doc Print Swift docs as JSON or Objective-C docs as XML
help Display general or command-specific help
structure Print Swift structure information as JSON
syntax Print Swift syntax information as JSON
version Display the current version of SourceKitten
SourceKitten 按以下顺序搜索 SourceKit
$XCODE_DEFAULT_TOOLCHAIN_OVERRIDE
$TOOLCHAIN_DIR
xcrun -find swift
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain
/Applications/Xcode-beta.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain
~/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain
~/Applications/Xcode-beta.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain
在Linux上,SourceKit应位于/usr/lib/libsourcekitdInProc.so
或通过LINUX_SOURCEKIT_LIB_PATH
环境变量指定。
运行sourcekitten complete --file file.swift --offset 123
或sourcekitten complete --text "0." --offset 2
将打印出文件/文本中偏移处的代码补全选项
[{
"descriptionKey" : "advancedBy(n: Distance)",
"associatedUSRs" : "s:FSi10advancedByFSiFSiSi s:FPSs21RandomAccessIndexType10advancedByuRq_S__Fq_Fqq_Ss16ForwardIndexType8Distanceq_ s:FPSs16ForwardIndexType10advancedByuRq_S__Fq_Fqq_S_8Distanceq_ s:FPSs10Strideable10advancedByuRq_S__Fq_Fqq_S_6Strideq_ s:FPSs11_Strideable10advancedByuRq_S__Fq_Fqq_S_6Strideq_",
"kind" : "source.lang.swift.decl.function.method.instance",
"sourcetext" : "advancedBy(<#T##n: Distance##Distance#>)",
"context" : "source.codecompletion.context.thisclass",
"typeName" : "Int",
"moduleName" : "Swift",
"name" : "advancedBy(n: Distance)"
},
{
"descriptionKey" : "advancedBy(n: Self.Distance, limit: Self)",
"associatedUSRs" : "s:FeRq_Ss21RandomAccessIndexType_SsS_10advancedByuRq_S__Fq_FTqq_Ss16ForwardIndexType8Distance5limitq__q_",
"kind" : "source.lang.swift.decl.function.method.instance",
"sourcetext" : "advancedBy(<#T##n: Self.Distance##Self.Distance#>, limit: <#T##Self#>)",
"context" : "source.codecompletion.context.superclass",
"typeName" : "Self",
"moduleName" : "Swift",
"name" : "advancedBy(n: Self.Distance, limit: Self)"
},
...
]
要使用iOS SDK,请传递前面带有--
的-sdk
和-target
参数
sourcekitten complete --text "import UIKit ; UIColor." --offset 22 -- -target arm64-apple-ios9.0 -sdk /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.0.sdk
运行sourcekitten doc
将所有解析后的参数传递给xcodebuild
(或在--single-file
模式下直接传递给编译器,SourceKit/clang)。
sourcekitten doc -- -workspace SourceKitten.xcworkspace -scheme SourceKittenFramework
sourcekitten doc --single-file file.swift -- -j4 file.swift
sourcekitten doc --module-name Alamofire -- -project Alamofire.xcodeproj
sourcekitten doc -- -workspace Haneke.xcworkspace -scheme Haneke
sourcekitten doc --objc Realm/Realm.h -- -x objective-c -isysroot $(xcrun --show-sdk-path) -I $(pwd)
运行sourcekitten structure --file file.swift
或sourcekitten structure --text "struct A { func b() {} }"
将返回一个包含结构信息的JSON数组
{
"key.substructure" : [
{
"key.kind" : "source.lang.swift.decl.struct",
"key.offset" : 0,
"key.nameoffset" : 7,
"key.namelength" : 1,
"key.bodyoffset" : 10,
"key.bodylength" : 13,
"key.length" : 24,
"key.substructure" : [
{
"key.kind" : "source.lang.swift.decl.function.method.instance",
"key.offset" : 11,
"key.nameoffset" : 16,
"key.namelength" : 3,
"key.bodyoffset" : 21,
"key.bodylength" : 0,
"key.length" : 11,
"key.substructure" : [
],
"key.name" : "b()"
}
],
"key.name" : "A"
}
],
"key.offset" : 0,
"key.diagnostic_stage" : "source.diagnostic.stage.swift.parse",
"key.length" : 24
}
运行sourcekitten syntax --file file.swift
或sourcekitten syntax --text "import Foundation // Hello World"
将返回一个包含语法高亮信息的JSON数组
[
{
"offset" : 0,
"length" : 6,
"type" : "source.lang.swift.syntaxtype.keyword"
},
{
"offset" : 7,
"length" : 10,
"type" : "source.lang.swift.syntaxtype.identifier"
},
{
"offset" : 18,
"length" : 14,
"type" : "source.lang.swift.syntaxtype.comment"
}
]
大多数sourcekitten
命令行工具的功能实际上都封装在一个名为SourceKittenFramework的框架中。
如果您想将SourceKitten作为其他工具的一部分使用,或者可能扩展其功能,请查看SourceKittenFramework的源代码,以查看API是否符合您的需求。
注意:SourceKitten完全用Swift编写,SourceKittenFramework API不是为与Objective-C接口设计的。
MIT授权。