XcodeGen/Sources/XcodeGenKit/GraphVizGenerator.swift
Yasuharu Yanamura 1df0bb3e7b
Fix no such module 'DOT' by pinning GraphViz 0.2.0 (#1067)
* Revert "Fix no such module 'DOT' (#1065)"

This reverts commit 69a1cd56b5.

* pin GraphViz v0.2.0

* update CHANGELOG
2021-05-05 08:45:42 +10:00

67 lines
1.7 KiB
Swift

import DOT
import Foundation
import GraphViz
import ProjectSpec
extension Dependency {
var graphVizName: String {
switch self.type {
case .bundle, .package, .sdk, .framework, .carthage:
return "[\(self.type)]\\n\(reference)"
case .target:
return reference
}
}
}
extension Dependency.DependencyType: CustomStringConvertible {
public var description: String {
switch self {
case .bundle: return "bundle"
case .package: return "package"
case .framework: return "framework"
case .carthage: return "carthage"
case .sdk: return "sdk"
case .target: return "target"
}
}
}
extension Node {
init(target: Target) {
self.init(target.name)
self.shape = .box
}
init(dependency: Dependency) {
self.init(dependency.reference)
self.shape = .box
self.label = dependency.graphVizName
}
}
public class GraphVizGenerator {
public init() {}
public func generateModuleGraphViz(targets: [Target]) -> String {
return DOTEncoder().encode(generateGraph(targets: targets))
}
func generateGraph(targets: [Target]) -> Graph {
var graph = Graph(directed: true)
targets.forEach { target in
target.dependencies.forEach { dependency in
let from = Node(target: target)
graph.append(from)
let to = Node(dependency: dependency)
graph.append(to)
var edge = Edge(from: from, to: to)
edge.style = .dashed
graph.append(edge)
}
}
return graph
}
}