Skip to content
Merged
Show file tree
Hide file tree
Changes from 4 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
8 changes: 7 additions & 1 deletion Package.swift
Original file line number Diff line number Diff line change
Expand Up @@ -275,7 +275,13 @@ let package = Package(

.target(
name: "SwiftSyntaxMacros",
dependencies: ["SwiftDiagnostics", "SwiftParser", "SwiftSyntax", "SwiftSyntaxBuilder"],
dependencies: [
"SwiftDiagnostics",
"SwiftIfConfig",
"SwiftParser",
"SwiftSyntax",
"SwiftSyntaxBuilder",
],
exclude: ["CMakeLists.txt"]
),

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ target_link_swift_syntax_libraries(SwiftCompilerPluginMessageHandling PUBLIC
SwiftSyntax
SwiftBasicFormat
SwiftDiagnostics
SwiftIfConfig
SwiftParser
SwiftSyntaxMacros
SwiftSyntaxMacroExpansion
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,10 @@ import _SwiftSyntaxCShims
#endif

#if compiler(>=6)
internal import SwiftIfConfig
public import SwiftSyntaxMacros
#else
import SwiftIfConfig
import SwiftSyntaxMacros
#endif

Expand Down Expand Up @@ -189,12 +191,25 @@ public class PluginProviderMessageHandler<Provider: PluginProvider>: PluginMessa
let macroRole,
let discriminator,
let expandingSyntax,
let lexicalContext
let lexicalContext,
let staticBuildConfigurationString
):
// Decode the static build configuration.
let staticBuildConfiguration: StaticBuildConfiguration?
if let staticBuildConfigurationString {
var mutableConfigurationString = staticBuildConfigurationString
staticBuildConfiguration = mutableConfigurationString.withUTF8 {
try? JSON.decode(StaticBuildConfiguration.self, from: $0)
}
} else {
staticBuildConfiguration = nil
}

return expandFreestandingMacro(
macro: macro,
macroRole: macroRole,
discriminator: discriminator,
staticBuildConfiguration: staticBuildConfiguration,
expandingSyntax: expandingSyntax,
lexicalContext: lexicalContext
)
Expand All @@ -208,12 +223,25 @@ public class PluginProviderMessageHandler<Provider: PluginProvider>: PluginMessa
let parentDeclSyntax,
let extendedTypeSyntax,
let conformanceListSyntax,
let lexicalContext
let lexicalContext,
let staticBuildConfigurationString
):
// Decode the static build configuration.
let staticBuildConfiguration: StaticBuildConfiguration?
if let staticBuildConfigurationString {
var mutableConfigurationString = staticBuildConfigurationString
staticBuildConfiguration = mutableConfigurationString.withUTF8 {
try? JSON.decode(StaticBuildConfiguration.self, from: $0)
}
} else {
staticBuildConfiguration = nil
}

return expandAttachedMacro(
macro: macro,
macroRole: macroRole,
discriminator: discriminator,
staticBuildConfiguration: staticBuildConfiguration,
attributeSyntax: attributeSyntax,
declSyntax: declSyntax,
parentDeclSyntax: parentDeclSyntax,
Expand Down
10 changes: 8 additions & 2 deletions Sources/SwiftCompilerPluginMessageHandling/Macros.swift
Original file line number Diff line number Diff line change
Expand Up @@ -13,13 +13,15 @@
#if compiler(>=6)
internal import SwiftBasicFormat
internal import SwiftDiagnostics
internal import SwiftIfConfig
internal import SwiftOperators
internal import SwiftSyntax
@_spi(MacroExpansion) @_spi(ExperimentalLanguageFeature) internal import SwiftSyntaxMacroExpansion
@_spi(ExperimentalLanguageFeature) internal import SwiftSyntaxMacros
#else
import SwiftBasicFormat
import SwiftDiagnostics
import SwiftIfConfig
import SwiftOperators
import SwiftSyntax
@_spi(MacroExpansion) @_spi(ExperimentalLanguageFeature) import SwiftSyntaxMacroExpansion
Expand Down Expand Up @@ -53,6 +55,7 @@ extension PluginProviderMessageHandler {
macro: PluginMessage.MacroReference,
macroRole pluginMacroRole: PluginMessage.MacroRole?,
discriminator: String,
staticBuildConfiguration: StaticBuildConfiguration?,
expandingSyntax: PluginMessage.Syntax,
lexicalContext: [PluginMessage.Syntax]?
) -> PluginToHostMessage {
Expand All @@ -67,7 +70,8 @@ extension PluginProviderMessageHandler {
operatorTable: .standardOperators,
fallbackSyntax: syntax
),
expansionDiscriminator: discriminator
expansionDiscriminator: discriminator,
staticBuildConfiguration: staticBuildConfiguration
)

let expandedSource: String?
Expand Down Expand Up @@ -113,6 +117,7 @@ extension PluginProviderMessageHandler {
macro: PluginMessage.MacroReference,
macroRole: PluginMessage.MacroRole,
discriminator: String,
staticBuildConfiguration: StaticBuildConfiguration?,
attributeSyntax: PluginMessage.Syntax,
declSyntax: PluginMessage.Syntax,
parentDeclSyntax: PluginMessage.Syntax?,
Expand Down Expand Up @@ -143,7 +148,8 @@ extension PluginProviderMessageHandler {
operatorTable: .standardOperators,
fallbackSyntax: declarationNode
),
expansionDiscriminator: discriminator
expansionDiscriminator: discriminator,
staticBuildConfiguration: staticBuildConfiguration
)

// TODO: Make this a 'String?' and remove non-'hasExpandMacroResult' branches.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,12 +12,14 @@

#if compiler(>=6)
internal import SwiftDiagnostics
internal import SwiftIfConfig
internal import SwiftOperators
internal import SwiftParser
internal import SwiftSyntax
internal import SwiftSyntaxMacros
#else
import SwiftDiagnostics
import SwiftIfConfig
import SwiftOperators
import SwiftParser
import SwiftSyntax
Expand Down Expand Up @@ -262,6 +264,10 @@ class PluginMacroExpansionContext {
/// to produce unique names.
private var expansionDiscriminator: String

/// The static build configuration, if any, that will be used for the
/// macro-expanded code.
private var staticBuildConfiguration: StaticBuildConfiguration?

/// Counter for each of the uniqued names.
///
/// Used in conjunction with `expansionDiscriminator`.
Expand All @@ -271,10 +277,16 @@ class PluginMacroExpansionContext {
/// macro.
internal private(set) var diagnostics: [Diagnostic] = []

init(sourceManager: SourceManager, lexicalContext: [Syntax], expansionDiscriminator: String = "") {
init(
sourceManager: SourceManager,
lexicalContext: [Syntax],
expansionDiscriminator: String = "",
staticBuildConfiguration: StaticBuildConfiguration?
) {
self.sourceManager = sourceManager
self.lexicalContext = lexicalContext
self.expansionDiscriminator = expansionDiscriminator
self.staticBuildConfiguration = staticBuildConfiguration
}
}

Expand Down Expand Up @@ -321,4 +333,8 @@ extension PluginMacroExpansionContext: MacroExpansionContext {
}
return AbstractSourceLocation(location)
}

public var buildConfiguration: (any BuildConfiguration)? {
staticBuildConfiguration
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,8 @@ public enum HostToPluginMessage: Codable {
macroRole: PluginMessage.MacroRole? = nil,
discriminator: String,
syntax: PluginMessage.Syntax,
lexicalContext: [PluginMessage.Syntax]? = nil
lexicalContext: [PluginMessage.Syntax]? = nil,
staticBuildConfiguration: String? = nil
)

/// Expand an '@attached' macro.
Expand All @@ -38,7 +39,8 @@ public enum HostToPluginMessage: Codable {
parentDeclSyntax: PluginMessage.Syntax?,
extendedTypeSyntax: PluginMessage.Syntax?,
conformanceListSyntax: PluginMessage.Syntax?,
lexicalContext: [PluginMessage.Syntax]? = nil
lexicalContext: [PluginMessage.Syntax]? = nil,
staticBuildConfiguration: String? = nil
)

/// Optionally implemented message to load a dynamic link library.
Expand Down
2 changes: 1 addition & 1 deletion Sources/SwiftIfConfig/BuildConfiguration.swift
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ import SwiftSyntax

/// Describes the ordering of a sequence of bytes that make up a word of
/// storage for a particular architecture.
public enum Endianness: String {
public enum Endianness: String, Codable {
/// Little endian, meaning that the least significant byte of a word is
/// stored at the lowest address.
case little
Expand Down
1 change: 1 addition & 0 deletions Sources/SwiftIfConfig/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ add_swift_syntax_library(SwiftIfConfig
IfConfigDiagnostic.swift
IfConfigEvaluation.swift
IfConfigFunctions.swift
StaticBuildConfiguration.swift
SyntaxLiteralUtils.swift
SyntaxProtocol+IfConfig.swift
VersionTuple+Parsing.swift
Expand Down
Loading
Loading