Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Overview of jazzy – Soulful docs for Swift

JP Simard
February 03, 2015

Overview of jazzy – Soulful docs for Swift

In a rapidly evolving ecosystem of Swift libraries and µframeworks, documentation that's consistent and comprehensive becomes increasingly important. In this talk, we'll cover how to document your Swift app or framework and offer a glimpse into the inner workings of jazzy.

JP Simard

February 03, 2015
Tweet

More Decks by JP Simard

Other Decks in Programming

Transcript

  1. Instead of parsing your source files, jazzy hooks into clang/SourceKit

    and uses the AST representation of your code and its comments for more accurate results.
  2. First off, you have to write documentation comments. Which is

    beneficial not only for jazzy, but for option-clicking in Xcode
  3. Doxygen (ObjC-style) /** Lorem ipsum dolor sit amet. @param bar

    Consectetur adipisicing elit. @return Sed do eiusmod tempor. */ func foo(bar: String) -> AnyObject { ... }
  4. Restructured Text (ReST) /** Lorem ipsum dolor sit amet. :param:

    bar Consectetur adipisicing elit. :returns: Sed do eiusmod tempor. */ func foo(bar: String) -> AnyObject { ... }
  5. $ jazzy • Grabs all the *.swift files from the

    specified target and builds docs for them • Target & destination are configurable... • Outputs static site in docs/ by default
  6. Design goals • Generate source code docs matching Apple's official

    reference documentation • Support for Xcode and Dash docsets • High readability of source code comments • Leverage modern HTML templating (Mustache) • Let Clang/SourceKit do all the heavy lifting • Compatibility with appledoc when possible
  7. $ jazzy help -o, --output FOLDER Folder to output the

    HTML docs to -c, --[no-]clean Delete contents of output directory before running. WARNING: If --output is set to ~/Desktop, this will delete the ~/Desktop directory. -x arg1,arg2,…argN, Arguments to forward to xcodebuild --xcodebuild-arguments -a, --author AUTHOR_NAME Name of author to attribute in docs (i.e. Realm) -u, --author_url URL Author URL of this project (i.e. http://realm.io) -m, --module MODULE_NAME Name of module being documented. (i.e. RealmSwift) -d, --dash_url URL Location of the dash XML feed (i.e. http://realm.io/docsets/realm.xml -g, --github_url URL GitHub URL of this project (i.e. https://github.com/realm/realm-cocoa) --github-file-prefix PREFIX GitHub URL file prefix of this project (i.e. https://github.com/realm/realm-cocoa/tree/v0.87.1) -s FILEPATH, XML doc file generated from sourcekitten to parse -r, --root-url URL Absolute URL root where these docs will be stored --module-version VERSION module version. will be used when generating docset --min-acl [private | internal | public] minimum access control level to document (default is internal) --[no-]skip-undocumented Don't document declarations that have no documentation comments. --podspec FILEPATH --docset-icon FILEPATH --docset-path DIRPATH The relative path for the generated docset --source-directory DIRPATH The directory that contains the source to be documented -v, --version Print version number -h, --help Print this help message
  8. SourceKitten 1. Swift code highlighting 2. Swift interface generation from

    ObjC headers 3. Generate Swift docs from Swift source 4. General purpose AST manipulation 5. USR generation
  9. SourceKitten $ sourcekitten Available commands: 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
  10. SourceKitten Info 1. Written in Swift 2. Split in two

    parts: SourceKittenFramework + sourcekitten 3. Uses XPC connection to sourcekitd.framework, just like Xcode 4. Installable via Homebrew (brew install sourcekitten) 5. Similar architecture to Carthage, Commandant, package installer
  11. You could do a lot more with SourceKitten 1. Swift

    editor/IDE 2. Swift linter 3. Test generator from doc comments 4. Swift mocks 5. Static analysis 6. Holistic way to diff Swift syntax versions
  12. What's next for jazzy? 1. Objective-C 2. Mixed projects 3.

    Cross-language (calling ObjC from Swift, calling Swift from ObjC) 4. Cross-project hyperlinking on Cocoadocs
  13. Resources • jazzy: github.com/realm/jazzy • SourceKitten: github.com/jpsim/SourceKitten • appledoc: github.com/tomaz/appledoc

    • swift doc syntax: nshipster.com/swift-documentation • SourceKit: jpsim.com/uncovering-sourcekit