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
|
//===----------------------------------------------------------------------===//
//
// 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 SwiftSyntax
import SwiftParser
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 {
fatalError()
}
}
extension PackageDependency.SourceControl: ManifestSyntaxRepresentable {
func asSyntax() -> ExprSyntax {
// TODO: Not handling identity, nameForTargetDependencyResolutionOnly,
// or productFilter yet.
switch location {
case .local(let path):
".package(path: \(literal: path.description), \(requirement.asSyntax()))"
case .remote(let url):
".package(url: \(literal: url.description), \(requirement.asSyntax()))"
}
}
}
extension PackageDependency.Registry: ManifestSyntaxRepresentable {
func asSyntax() -> ExprSyntax {
fatalError()
}
}
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 Version: ManifestSyntaxRepresentable {
func asSyntax() -> ExprSyntax {
return "\(literal: description)"
}
}
|