Reorganising keys

+4 -1
Sources/PterodactylBuild/Keys.swift
···
import Foundation
-
enum Keys {}
+
enum Keys {
+
enum Blob {}
+
enum SourceTree {}
+
}
+4 -4
Sources/PterodactylBuild/Keys/Blob-local operations/BlobContents.swift Sources/PterodactylBuild/Keys/Blob/ReadContents.swift
···
import TSCBasic
import llbuild2fx
-
extension Keys {
-
struct BlobContents: BuildKey {
-
typealias ValueType = String
-
+
extension Keys.Blob {
+
struct ReadContents: BuildKey {
let blobId: LLBDataID
+
+
typealias ValueType = String
static let versionDependencies: [any FXVersioning.Type] = []
+21 -19
Sources/PterodactylBuild/Keys/Blob-local operations/BlobImports.swift Sources/PterodactylBuild/Keys/Blob/ParseImports.swift
···
import llbuild2fx
import PterodactylSyntax
+
extension Keys.Blob {
+
struct ParseImports: BuildKey {
+
let blobId: LLBDataID
+
+
typealias ValueType = [UnitName]
+
+
static let versionDependencies: [any FXVersioning.Type] = [ReadContents.self]
+
+
func computeValue(_ ctx: BuildContext<Self>) async throws -> [UnitName] {
+
let code = try await ctx.request(ReadContents(blobId: blobId))
+
var importParser = ImportParser(input: code)
+
importParser.parseHeader()
+
+
return importParser.imports.map { name in
+
UnitName(basename: name)
+
}
+
}
+
}
+
}
+
+
private struct ImportParser {
private var lexer: PterodactylSyntax.Lexer
public private(set) var imports: [String] = []
···
}
}
-
-
extension Keys {
-
struct BlobImports: BuildKey {
-
typealias ValueType = [UnitName]
-
let blobId: LLBDataID
-
-
static let versionDependencies: [any FXVersioning.Type] = [BlobContents.self]
-
-
func computeValue(_ ctx: BuildContext<Self>) async throws -> [UnitName] {
-
let code = try await ctx.request(BlobContents(blobId: blobId))
-
var importParser = ImportParser(input: code)
-
importParser.parseHeader()
-
-
return importParser.imports.map { name in
-
UnitName(basename: name)
-
}
-
}
-
}
-
}
-26
Sources/PterodactylBuild/Keys/Blob-local operations/BlobSyntaxTree.swift
···
-
// SPDX-FileCopyrightText: 2025 The Project Pterodactyl Developers
-
//
-
// SPDX-License-Identifier: MPL-2.0
-
-
import Foundation
-
import PterodactylSyntax
-
import TSCBasic
-
import llbuild2fx
-
-
extension Keys {
-
struct BlobSyntaxTree: BuildKey {
-
typealias ValueType = SyntaxTree
-
-
let blobId: LLBDataID
-
-
static let versionDependencies: [any FXVersioning.Type] = [BlobContents.self, BlobTokens.self]
-
-
func computeValue(_ ctx: BuildContext<Self>) async throws -> ValueType {
-
let code = try await ctx.request(BlobContents(blobId: blobId))
-
let tokens = try await ctx.request(BlobTokens(blobId: blobId))
-
var parser = Parser(source: code, tokens: tokens)
-
PterodactylSyntax.Document.parse(&parser)
-
return parser.tree
-
}
-
}
-
}
+6 -6
Sources/PterodactylBuild/Keys/Blob-local operations/BlobTokens.swift Sources/PterodactylBuild/Keys/Blob/Tokenise.swift
···
import llbuild2fx
import PterodactylSyntax
-
extension Keys {
-
struct BlobTokens: BuildKey {
-
typealias ValueType = [Token]
-
+
extension Keys.Blob {
+
struct Tokenise: BuildKey {
let blobId: LLBDataID
+
+
typealias ValueType = [Token]
-
static let versionDependencies: [any FXVersioning.Type] = [BlobContents.self]
+
static let versionDependencies: [any FXVersioning.Type] = [ReadContents.self]
func computeValue(_ ctx: BuildContext<Self>) async throws -> ValueType {
-
let code = try await ctx.request(BlobContents(blobId: blobId))
+
let code = try await ctx.request(ReadContents(blobId: blobId))
var lexer = PterodactylSyntax.Lexer(input: code)
let flatTokens = lexer.tokenize()
return BlockLayoutProcessor(tokens: flatTokens).layout()
Sources/PterodactylBuild/Keys/Blob-local operations/README.md Sources/PterodactylBuild/Keys/Blob/README.md
+23
Sources/PterodactylBuild/Keys/Blob/GetLineMap.swift
···
+
// SPDX-FileCopyrightText: 2025 The Project Pterodactyl Developers
+
//
+
// SPDX-License-Identifier: MPL-2.0
+
+
import Foundation
+
import PterodactylSyntax
+
import TSCBasic
+
import llbuild2fx
+
+
extension Keys.Blob {
+
struct GetLineMap: BuildKey {
+
let blobId: LLBDataID
+
+
typealias ValueType = PterodactylSyntax.LineMap
+
+
static let versionDependencies: [any FXVersioning.Type] = [ReadContents.self]
+
+
func computeValue(_ ctx: BuildContext<Self>) async throws -> ValueType {
+
let code = try await ctx.request(ReadContents(blobId: blobId))
+
return PterodactylSyntax.LineMap(source: code)
+
}
+
}
+
}
+26
Sources/PterodactylBuild/Keys/Blob/ParseDocument.swift
···
+
// SPDX-FileCopyrightText: 2025 The Project Pterodactyl Developers
+
//
+
// SPDX-License-Identifier: MPL-2.0
+
+
import Foundation
+
import PterodactylSyntax
+
import TSCBasic
+
import llbuild2fx
+
+
extension Keys.Blob {
+
struct ParseDocument: BuildKey {
+
let blobId: LLBDataID
+
+
typealias ValueType = PterodactylSyntax.SyntaxTree
+
+
static let versionDependencies: [any FXVersioning.Type] = [ReadContents.self, Tokenise.self]
+
+
func computeValue(_ ctx: BuildContext<Self>) async throws -> ValueType {
+
let code = try await ctx.request(ReadContents(blobId: blobId))
+
let tokens = try await ctx.request(Tokenise(blobId: blobId))
+
var parser = Parser(source: code, tokens: tokens)
+
PterodactylSyntax.Document.parse(&parser)
+
return parser.tree
+
}
+
}
+
}
+8 -7
Sources/PterodactylBuild/Keys/DependencyGraphOfSourceTree.swift Sources/PterodactylBuild/Keys/SourceTree/GetDependencyGraph.swift
···
import TSCBasic
import llbuild2fx
-
extension Keys {
-
struct DependencyGraphOfSourceTree: BuildKey {
+
extension Keys.SourceTree {
+
struct GetDependencyGraph: BuildKey {
+
let sourceTreeId: LLBDataID
+
typealias ValueType = Graph<UnitName>
-
-
let sourceTreeId: LLBDataID
-
static let versionDependencies: [any FXVersioning.Type] = [Keys.UnitMapOfSourceTree.self, Keys.BlobImports.self]
+
+
static let versionDependencies: [any FXVersioning.Type] = [Keys.SourceTree.GetUnitMap.self, Keys.Blob.ParseImports.self]
func computeValue(_ ctx: BuildContext<Self>) async throws -> Graph<UnitName> {
-
let unitMap = try await ctx.request(Keys.UnitMapOfSourceTree(sourceTreeId: sourceTreeId))
+
let unitMap = try await ctx.request(Keys.SourceTree.GetUnitMap(sourceTreeId: sourceTreeId))
var edges: [UnitName: Set<UnitName>] = [:]
for (unitName, unitInfo) in unitMap.units {
if edges[unitName] == nil { edges[unitName] = [] }
-
let imports = try await ctx.request(Keys.BlobImports(blobId: unitInfo.blobId))
+
let imports = try await ctx.request(Keys.Blob.ParseImports(blobId: unitInfo.blobId))
for importedUnitName in imports {
edges[unitName]!.insert(importedUnitName)
}
+7 -7
Sources/PterodactylBuild/Keys/NarrowSourceTree.swift Sources/PterodactylBuild/Keys/SourceTree/NarrowToUnit.swift
···
import TSCBasic
import llbuild2fx
-
extension Keys {
+
extension Keys.SourceTree {
/// Narrows a source tree to just the transitive dependencies of a given unit
-
struct NarrowSourceTree: BuildKey {
-
typealias ValueType = LLBDataID
-
+
struct NarrowToUnit: BuildKey {
let sourceTreeId: LLBDataID
let unitName: UnitName
-
static let versionDependencies: [any FXVersioning.Type] = [TransitiveDependencies.self, UnitMapOfSourceTree.self]
+
typealias ValueType = LLBDataID
+
+
static let versionDependencies: [any FXVersioning.Type] = [GetDependencies.self, GetUnitMap.self]
func computeValue(_ ctx: BuildContext<Self>) async throws -> ValueType {
-
let dependencies = try await ctx.request(TransitiveDependencies(sourceTreeId: sourceTreeId, unitName: unitName))
-
let unitMap = try await ctx.request(UnitMapOfSourceTree(sourceTreeId: sourceTreeId))
+
let dependencies = try await ctx.request(GetDependencies(sourceTreeId: sourceTreeId, unitName: unitName))
+
let unitMap = try await ctx.request(GetUnitMap(sourceTreeId: sourceTreeId))
var sourceTree = try await LLBCASFileTree.load(id: sourceTreeId, in: ctx)
for (unitName, unitInfo) in unitMap.units {
+6 -6
Sources/PterodactylBuild/Keys/TransitiveDependencies.swift Sources/PterodactylBuild/Keys/SourceTree/GetDependencies.swift
···
import TSCBasic
import llbuild2fx
-
extension Keys {
-
struct TransitiveDependencies: BuildKey {
-
typealias ValueType = Set<UnitName>
-
+
extension Keys.SourceTree {
+
struct GetDependencies: BuildKey {
let sourceTreeId: LLBDataID
let unitName: UnitName
-
static let versionDependencies: [any FXVersioning.Type] = [Keys.DependencyGraphOfSourceTree.self]
+
typealias ValueType = Set<UnitName>
+
+
static let versionDependencies: [any FXVersioning.Type] = [Keys.SourceTree.GetDependencyGraph.self]
func computeValue(_ ctx: BuildContext<Self>) async throws -> ValueType {
-
let graph = try await ctx.request(Keys.DependencyGraphOfSourceTree(sourceTreeId: sourceTreeId))
+
let graph = try await ctx.request(Keys.SourceTree.GetDependencyGraph(sourceTreeId: sourceTreeId))
return graph.verticesReachableFrom(unitName)
}
}
+4 -3
Sources/PterodactylBuild/Keys/UnitMapOfSourceTree.swift Sources/PterodactylBuild/Keys/SourceTree/GetUnitMap.swift
···
import TSCBasic
import llbuild2fx
-
extension Keys {
-
struct UnitMapOfSourceTree: BuildKey {
-
typealias ValueType = UnitMap
+
extension Keys.SourceTree {
+
struct GetUnitMap: BuildKey {
let sourceTreeId: LLBDataID
+
typealias ValueType = UnitMap
+
func computeValue(_ ctx: BuildContext<Self>) async throws -> UnitMap {
let sourceTree = try await LLBCASFileTree.load(id: sourceTreeId, in: ctx)
var units: [UnitName: UnitInfo] = [:]
+2 -2
Tests/PterodactylBuildTests/Test.swift
···
)
let treeID: LLBDataID = try await client.store(declTree, ctx).get()
-
let dependencyGraph = try await engine.build(key: Keys.DependencyGraphOfSourceTree(sourceTreeId: treeID), ctx).get()
+
let dependencyGraph = try await engine.build(key: Keys.SourceTree.GetDependencyGraph(sourceTreeId: treeID), ctx).get()
let foo = UnitName(basename: "foo")
let bar = UnitName(basename: "bar")
let baz = UnitName(basename: "baz")
···
]
)
-
let dependenciesOfBaz = try await engine.build(key: Keys.TransitiveDependencies(sourceTreeId: treeID, unitName: baz), ctx).get()
+
let dependenciesOfBaz = try await engine.build(key: Keys.SourceTree.GetDependencies(sourceTreeId: treeID, unitName: baz), ctx).get()
#expect(dependenciesOfBaz == [foo, bar])
return
}