1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116
|
//===----------------------------------------------------------------------===//
//
// This source file is part of the Swift open source project
//
// Copyright (c) 2014-2024 Apple Inc. and the Swift project authors
// Licensed under Apache License v2.0 with Runtime Library Exception
//
// See http://swift.org/LICENSE.txt for license information
// See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors
//
//===----------------------------------------------------------------------===//
import Basics
import PackageModel
import SwiftParser
import SwiftSyntax
import struct TSCUtility.Version
extension PackageDependency: ManifestSyntaxRepresentable {
func asSyntax() -> ExprSyntax {
switch self {
case .fileSystem(let filesystem): filesystem.asSyntax()
case .sourceControl(let sourceControl): sourceControl.asSyntax()
case .registry(let registry): registry.asSyntax()
}
}
}
extension PackageDependency.FileSystem: ManifestSyntaxRepresentable {
func asSyntax() -> ExprSyntax {
".package(path: \(literal: path.description))"
}
}
extension PackageDependency.SourceControl: ManifestSyntaxRepresentable {
func asSyntax() -> ExprSyntax {
// TODO: Not handling identity, nameForTargetDependencyResolutionOnly,
// or productFilter yet.
switch location {
case .local:
fatalError()
case .remote(let url):
".package(url: \(literal: url.description), \(requirement.asSyntax()))"
}
}
}
extension PackageDependency.Registry: ManifestSyntaxRepresentable {
func asSyntax() -> ExprSyntax {
".package(id: \(literal: identity.description), \(requirement.asSyntax()))"
}
}
extension PackageDependency.SourceControl.Requirement: ManifestSyntaxRepresentable {
func asSyntax() -> LabeledExprSyntax {
switch self {
case .exact(let version):
LabeledExprSyntax(
label: "exact",
expression: version.asSyntax()
)
case .range(let range) where range == .upToNextMajor(from: range.lowerBound):
LabeledExprSyntax(
label: "from",
expression: range.lowerBound.asSyntax()
)
case .range(let range):
LabeledExprSyntax(
expression: "\(range.lowerBound.asSyntax())..<\(range.upperBound.asSyntax())" as ExprSyntax
)
case .revision(let revision):
LabeledExprSyntax(
label: "revision",
expression: "\(literal: revision)" as ExprSyntax
)
case .branch(let branch):
LabeledExprSyntax(
label: "branch",
expression: "\(literal: branch)" as ExprSyntax
)
}
}
}
extension PackageDependency.Registry.Requirement: ManifestSyntaxRepresentable {
func asSyntax() -> LabeledExprSyntax {
switch self {
case .exact(let version):
LabeledExprSyntax(
label: "exact",
expression: version.asSyntax()
)
case .range(let range) where range == .upToNextMajor(from: range.lowerBound):
LabeledExprSyntax(
label: "from",
expression: range.lowerBound.asSyntax()
)
case .range(let range):
LabeledExprSyntax(
expression: "\(range.lowerBound.asSyntax())..<\(range.upperBound.asSyntax())" as ExprSyntax
)
}
}
}
extension Version: ManifestSyntaxRepresentable {
func asSyntax() -> ExprSyntax {
"\(literal: description)"
}
}
|