•  


GitHub - jpsim/SourceKitten: An adorable little framework and command line tool for interacting with SourceKit.
Skip to content

An adorable little framework and command line tool for interacting with SourceKit.

License

Notifications You must be signed in to change notification settings

jpsim/SourceKitten

Repository files navigation

SourceKitten

An adorable little framework and command line tool for interacting with SourceKit .

SourceKitten links and communicates with sourcekitd.framework to parse the Swift AST, extract comment docs for Swift or Objective-C projects, get syntax data for a Swift file and lots more!

SwiftPM

Installation

Building SourceKitten requires Xcode 13.3 or later or a Swift 5.6 toolchain or later with the Swift Package Manager.

SourceKitten typically supports previous versions of SourceKit.

Homebrew

Run brew install sourcekitten .

Swift Package Manager

Run swift build in the root directory of this project.

Bazel

Add the following to your WORKSPACE file:

SOURCEKITTEN_VERSION
 =
 "SOME_VERSION"

SOURCEKITTEN_SHA
 =
 "SOME_SHA"

http_archive
(
    
name
 =
 "com_github_jpsim_sourcekitten"
,
    
url
 =
 "https://github.com/jpsim/SourceKitten/archive/refs/tags/%s.tar.gz"
 %
 (
SOURCEKITTEN_VERSION
),
    
sha256
 =
 SOURCEKITTEN_SHA
,
    
strip_prefix
 =
 "SourceKitten-%s"
 %
 SOURCEKITTEN_VERSION

)

Then run: bazel run @com_github_jpsim_sourcekitten//:sourcekitten -- -h

Xcode (via Make)

Run make install in the root directory of this project.

Package

Download and open SourceKitten.pkg from the releases tab .

Command Line Usage

Once SourceKitten is installed, you may use it from the command line.

$ sourcekitten help
OVERVIEW: An adorable little command line tool for interacting with SourceKit

USAGE: sourcekitten <subcommand>

OPTIONS:
  --version               Show the version.
  -h, --help              Show help information.

SUBCOMMANDS:
  complete                Generate code completion options
  doc                     Print Swift or Objective-C docs as JSON
  format                  Format Swift file
  index                   Index Swift file and print as JSON
  module-info             Obtain information about a Swift module and print as JSON
  request                 Run a raw SourceKit request
  structure               Print Swift structure information as JSON
  syntax                  Print Swift syntax information as JSON
  version                 Display the current version of SourceKitten

  See 'sourcekitten help <subcommand>' for detailed help.

How is SourceKit resolved?

SourceKitten searches for SourceKit in the following order:

  • $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

On Linux, SourceKit is expected to be located in /usr/lib/libsourcekitdInProc.so or specified by the LINUX_SOURCEKIT_LIB_PATH environment variable.

Projects Built With SourceKitten

  • SwiftLint : A tool to enforce Swift style and conventions.
  • Jazzy : Soulful docs for Swift & Objective-C.
  • Sourcery : Meta-programming for Swift, stop writing boilerplate code.
  • SwiftyMocky : Framework for mock generation.
  • SourceKittenDaemon : Swift Auto Completions for any Text Editor.
  • SourceDocs : Command Line Tool that generates Markdown documentation from inline source code comments.
  • Cuckoo : First boilerplate-free mocking framework for Swift.
  • IBAnalyzer : Find common xib and storyboard-related problems without running your app or writing unit tests.
  • Taylor : Measure Swift code metrics and get reports in Xcode, Jenkins and other CI platforms.
See More

Complete

Running sourcekitten complete --file file.swift --offset 123 or sourcekitten complete --text "0." --offset 2 will print out code completion options for the offset in the file/text provided:

[{
  
"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)
"

},
...

]

To use the iOS SDK, pass -sdk and -target arguments preceded by -- :

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

Doc

Running sourcekitten doc will pass all arguments after what is parsed to xcodebuild (or directly to the compiler, SourceKit/clang, in the --single-file mode).

Example usage

  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)

Structure

Running sourcekitten structure --file file.swift or sourcekitten structure --text "struct A { func b() {} }" will return a JSON array of structure information:

{
  
"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

}

Syntax

Running sourcekitten syntax --file file.swift or sourcekitten syntax --text "import Foundation // Hello World" will return a JSON array of syntax highlighting information:

[
  {
    
"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
"

  }
]

Request

Running sourcekitten request --yaml [FILE|TEXT] will execute a sourcekit request with the given yaml. For example:

key.request
: 
source.request.cursorinfo

key.sourcefile
: 
"
/tmp/foo.swift
"

key.offset
: 
8

key.compilerargs
:
  - 
"
/tmp/foo.swift
"

SourceKittenFramework

Most of the functionality of the sourcekitten command line tool is actually encapsulated in a framework named SourceKittenFramework.

If you’re interested in using SourceKitten as part of another tool, or perhaps extending its functionality, take a look at the SourceKittenFramework source code to see if the API fits your needs.

Note: SourceKitten is written entirely in Swift, and the SourceKittenFramework API is not designed to interface with Objective-C.

License

MIT licensed.

- "漢字路" 한글한자자동변환 서비스는 교육부 고전문헌국역지원사업의 지원으로 구축되었습니다.
- "漢字路" 한글한자자동변환 서비스는 전통문화연구회 "울산대학교한국어처리연구실 옥철영(IT융합전공)교수팀"에서 개발한 한글한자자동변환기를 바탕하여 지속적으로 공동 연구 개발하고 있는 서비스입니다.
- 현재 고유명사(인명, 지명등)을 비롯한 여러 변환오류가 있으며 이를 해결하고자 많은 연구 개발을 진행하고자 하고 있습니다. 이를 인지하시고 다른 곳에서 인용시 한자 변환 결과를 한번 더 검토하시고 사용해 주시기 바랍니다.
- 변환오류 및 건의,문의사항은 juntong@juntong.or.kr로 메일로 보내주시면 감사하겠습니다. .
Copyright ⓒ 2020 By '전통문화연구회(傳統文化硏究會)' All Rights reserved.
 한국   대만   중국   일본