Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
36 changes: 28 additions & 8 deletions Sources/BeakCore/BeakFile.swift
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,21 @@ import PathKit
import SourceKittenFramework

public struct BeakFile: Equatable {

public let contents: String
public let dependencies: [Dependency]
public let functions: [Function]
public let includedFiles: [BeakFile]

private let ownDependencies: [Dependency]
private let ownFunctions: [Function]

public var dependencies: [Dependency] {
let includedFilesDependencies: [Dependency] = includedFiles.reduce([]) { $0 + $1.dependencies }
return includedFilesDependencies + ownDependencies
}

public var functions: [Function] {
let includedFilesFunctions: [Function] = includedFiles.reduce([]) { $0 + $1.functions }
return includedFilesFunctions + ownFunctions
}

public init(path: Path) throws {
guard path.exists else {
Expand All @@ -22,20 +33,29 @@ public struct BeakFile: Equatable {

public init(contents: String) throws {
self.contents = contents
functions = try SwiftParser.parseFunctions(file: contents)
dependencies = contents
ownFunctions = try SwiftParser.parseFunctions(file: contents)
ownDependencies = contents
.split(separator: "\n")
.map(String.init)
.filter { $0.hasPrefix("// beak:") }
.map { $0.replacingOccurrences(of: "// beak:", with: "") }
.map { $0.trimmingCharacters(in: .whitespacesAndNewlines) }
.filter { !$0.isEmpty }
.map(Dependency.init)
includedFiles = contents
.split(separator: "\n")
.map(String.init)
.filter { $0.hasPrefix("// include:") }
.map { $0.replacingOccurrences(of: "// include:", with: "") }
.map { $0.trimmingCharacters(in: .whitespacesAndNewlines) }
.filter { $0.hasSuffix(".swift") }
.compactMap { try? BeakFile(path: Path($0)) }
}

public init(contents: String, dependencies: [Dependency], functions: [Function]) {
public init(contents: String, dependencies: [Dependency], functions: [Function], includedFiles: [BeakFile]) {
self.contents = contents
self.dependencies = dependencies
self.functions = functions
self.ownDependencies = dependencies
self.ownFunctions = functions
self.includedFiles = includedFiles
}
}
5 changes: 3 additions & 2 deletions Tests/BeakTests/BeakTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -214,7 +214,8 @@ class BeakTests: XCTestCase {
throwing: true,
docsDescription: "Releases a new version of Beak"
),
]
],
includedFiles: []
)

try expect(beakFile) == expectedBeakFile
Expand Down Expand Up @@ -277,7 +278,7 @@ class BeakTests: XCTestCase {
.init(name: "repo3", package: "https://github.com/name2/repo3.git", requirement: ".exact(\"4.3.0\")", libraries: ["repo3"]),
]

let beakFile = BeakFile(contents: "", dependencies: dependencies, functions: [])
let beakFile = BeakFile(contents: "", dependencies: dependencies, functions: [], includedFiles: [])
let package = PackageManager.createPackage(name: "Test", beakFile: beakFile)

let expectedPackage = """
Expand Down