内容简介:For more, please visit my GitHub repo:为了支持一门
For more, please visit my GitHub repo: github.com/kingcos/Perspective
| 作者 | 发表时间 | 原文链接 |
|---|---|---|
| JP Simard | 20140706 | https://www.jpsim.com/uncovering-sourcekit/ |
为了支持一门 奇特的新编程语言 (译者注:即 Swift),漂亮的 实时 IDE 特性,以及令人印象深刻的 跨语言协同性 (译者注:即 Swift 与 Obj-C),Apple 不得不开发一些新的底层工具。这里我们将专注于 SourceKit,Xcode 背后的功臣。
什么是 SourceKit?
SourceKit 是一套 工具 集,使得大多数 Swift 源代码层面的操作特性得以支持,例如源代码解析、语法高亮、排版(typesetting)、自动补全、跨语言头文件生成,等等。
架构
传统上,Xcode 在运行时跑着其编译器( Clang ),即意味着编译器将可能在任何时候崩溃,IDE 同样。
更有甚者,Xcode 容易唤起编译器进行成千上万次解析、高亮、以及排版源代码,所有这一切都在用户键入「⌘ + B」之前。这是因为不像大多数编辑器(Vim/Sublime/...),Xcode 并不使用正则表达式解析源代码,而是使用 Clang 强大的(也更加复杂的)解析器(parser)和标记器(tokenizer)。
庆幸的是,Xcode 6 中的 Swift 移除了该特性<sup>1</sup>,合并所有源代码操作特性至一个独立的进程,并和 Xcode 通过 XPC 交流: sourcekitd 。无论 Xcode 6 何时加载任何 Swift 代码,该 XPC 守护进程将被启动。
Xcode 如何使用 SourceKit
因为 SourceKit 是一个私有且无文档的工具,我们需要获得一些小点子来学习如何使用它。通过设定 SOURCEKIT_LOGGING <sup>2</sup> 环境变量,Xcode 将记录 SourceKit 与 stdout 间的通信,允许我们观察到它们的实时通信。这就是如何发现本文中的许多命令。
统一符号解析
SourceKit 借助 Clang 中称作 USR(Unified Symbol Resolution,即统一符号解析)的特性,为源代码令牌(token,例如类,属性,方法等)对应一个唯一标识符。这使得你可以使用 「⌘ + 点击」Xcode 编辑器中任何一处令牌,即可以导航至其定义处。USR 现在甚至更加强大了,可以跨语言(Swift/Obj-C)统一一个代表。
为了从一个 Swift 文件(以及其位置)中打印 USR,你可以运行以下命令:
$ xcrun swift-ide-test -print-usrs -source-filename=Musician.swift 10:7 s:C14swift_ide_test8Musician 14:9 s:vC14swift_ide_test8Musician4nameSS 19:9 s:vC14swift_ide_test8Musician9birthyearSu 33:5 s:FC14swift_ide_test8MusiciancFMS0_FT4nameSS9birthyearSu_S0_ 33:10 s:vFC14swift_ide_test8MusiciancFMS0_FT4nameSS9birthyearSu_S0_L_4nameSS 33:24 s:vFC14swift_ide_test8MusiciancFMS0_FT4nameSS9birthyearSu_S0_L_9birthyearSu 34:9 s:vFC14swift_ide_test8MusiciancFMS0_FT4nameSS9birthyearSu_S0_L_4selfS0_ 34:21 s:vFC14swift_ide_test8MusiciancFMS0_FT4nameSS9birthyearSu_S0_L_4nameSS 35:9 s:vFC14swift_ide_test8MusiciancFMS0_FT4nameSS9birthyearSu_S0_L_4selfS0_ 35:26 s:vFC14swift_ide_test8MusiciancFMS0_FT4nameSS9birthyearSu_S0_L_9birthyearSu
Swift 头文件生成
在 Swift 中使用「⌘ + 点击」一个定义在 Obj-C 中令牌,Xcode 将会触发生成一个类 Swift 头文件。称其为类 Swift 是因为该生成的文件并非有效的 Swift<sup>3</sup>,但至少显示了等效于 Obj-C 令牌的 Swift 语法。
在命令行使用 SourceKit
主要有 3 个命令行工具允许和 SourceKit 交互: sourcekitd-test , swift-ide-test ,以及 swift 。
笔者编译了一个带有文档的 Shell 脚本,其运行了许多有用的命令,例如:语法高亮,接口生成,AST 解析,还原(demangling)等。
该脚本可在 GitHub 中获得: GitHub Gist 。
第三方使用 SourceKit 的工具
因为 SourceKit 独立于 Xcode 之外,使其可以利用以构建从 Swift IDE 到文档生成器等任何东西。
Jazzy♪♫
jazzy 是一个命令行工具,可以为你的 Swift 或 Obj-C 项目生成文档。其利用 SourceKit 以获得从 Obj-C 定义令牌(例如类,属性,方法等)的 Swift 语法。
SwiftEdit
SwiftEdit 是一款支持 Swift 文件语法高亮的概念型编辑器。
SourceKit 与你
我们刚刚初探了使用 SourceKit 的可能。这些工具可以做出来处理跨语言代码覆盖,或者提供支持 Swift 和 Obj-C 同时编辑的编辑器。希望本文能启发你利用 SourceKit 开发一些什么,并在这过程中改善我们的工具。
- 注:
export SOURCEKIT_LOGGING=3 && /Applications/Xcode6-Beta2.app/Contents/MacOS/Xcode
Reference
以上所述就是小编给大家介绍的《Translation - 起底 SourceKit》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Learn Python the Hard Way
Zed A. Shaw / Addison-Wesley Professional / 2013-10-11 / USD 39.99
Master Python and become a programmer-even if you never thought you could! This breakthrough book and CD can help practically anyone get started in programming. It's called "The Hard Way," but it's re......一起来看看 《Learn Python the Hard Way》 这本书的介绍吧!