SourceKitten 0.15.3

SourceKitten 0.15.3

测试已测试
语言语言 SwiftSwift
许可 MIT
发布最新发布2016年12月
SwiftSwift 版本3.0
SPM支持 SPM

JP Simard 维护。



 
依赖项
SWXMLHash~> 3.0
Yams~> 0.1
 

  • 作者
  • JP Simard

SourceKitten

一个可爱的小框架和命令行工具,用于与 SourceKit 交互。

SourceKitten 通过与 sourcekitd.framework 链接和通信来解析 Swift AST,提取 Swift 或 Objective-C 项目的注释文档,获取 Swift 文件的语法数据等等!

Test Status

安装

在 macOS 上构建 SourceKitten 需要 Xcode 8.0 或 Swift 3.0 工具链以及 Swift Package Manager。

在 Linux 上构建 SourceKitten 需要

  • 安装 Swift 3.0 编译器和 Swift Package Manager。
  • 构建 libsourcekitdInProc.so 并将其放置在 /usr/lib 或其他由环境变量 LINUX_SOURCEKIT_LIB_PATH 指定的位置。

SourceKitten 通常支持 SourceKit 的 earlier 版本。

Homebrew

运行 brew install sourcekitten.

Swift Package Manager

在此项目的根目录中运行 swift build.

Xcode (via Make)

在此项目的根目录中运行 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

SourceKit 如何解决?

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 123sourcekitten 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)。

示例用法

  1. sourcekitten doc -- -workspace SourceKitten.xcworkspace -scheme SourceKittenFramework
  2. sourcekitten doc --single-file file.swift -- -j4 file.swift
  3. sourcekitten doc --module-name Alamofire -- -project Alamofire.xcodeproj
  4. sourcekitten doc -- -workspace Haneke.xcworkspace -scheme Haneke
  5. sourcekitten doc --objc Realm/Realm.h -- -x objective-c -isysroot $(xcrun --show-sdk-path) -I $(pwd)

结构

运行sourcekitten structure --file file.swiftsourcekitten 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.swiftsourcekitten 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"
  }
]

SourceKittenFramework

大多数sourcekitten命令行工具的功能实际上都封装在一个名为SourceKittenFramework的框架中。

如果您想将SourceKitten作为其他工具的一部分使用,或者可能扩展其功能,请查看SourceKittenFramework的源代码,以查看API是否符合您的需求。

注意:SourceKitten完全用Swift编写,SourceKittenFramework API不是为与Objective-C接口设计的。

许可证

MIT授权。