hassila / swift-docc-symbolkit

A Swift package for encoding and decoding Swift Symbol Graph files.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

SymbolKit

The specification and reference model for the Symbol Graph File Format.

A Symbol Graph models a module, also known in various programming languages as a "framework", "library", or "package", as a directed graph. In this graph, the nodes are declarations, and the edges connecting nodes are relationships between declarations.

To illustrate the shape of a symbol graph, take the following Swift code as a module called MyModule:

public struct MyStruct {
  public var x: Int
}

There are two nodes in this module's graph: the structure MyStruct and its property, x:

x is related to MyStruct: it is a member of MyStruct. SymbolKit represents relationships as directed edges in the graph:

The source of an edge points to its target. You can read this edge as x is a member of MyStruct. Every edge is qualified by some kind of relationship; in this case, the kind is membership. There can be many kinds of relationships, even multiple relationships between the same two nodes. Here's another example, adding a Swift protocol to the mix:

public protocol P {}

public struct MyStruct: P {
  public var x: Int
}

Now we've added a new node for the protocol P, and a new conformance relationship between MyStruct and P:

By modeling different kinds of relationships, SymbolKit can provide rich data to power documentation, answering interesting questions, such as:

  • Which types conform to this protocol?
  • What is the class hierarchy rooted at this class?
  • Which protocol provides a requirement called count?
  • Which types customize this protocol requirement?

In addition, graph representations of data also present opportunities for visualizations in documentation, illustrating the structure or hierarchy of a module.

About

A Swift package for encoding and decoding Swift Symbol Graph files.

License:Apache License 2.0


Languages

Language:Swift 100.0%