EntryDefaultValueMacro.swift 994 B

12345678910111213141516171819202122232425262728293031
  1. //
  2. // EntryDefaultValueMacro.swift
  3. // ark_ui_basic_macros
  4. package import SwiftSyntax
  5. package import SwiftSyntaxMacros
  6. package struct EntryDefaultValueMacro: AccessorMacro {
  7. package static func expansion(
  8. of node: AttributeSyntax,
  9. providingAccessorsOf declaration: some DeclSyntaxProtocol,
  10. in context: some MacroExpansionContext
  11. ) throws -> [AccessorDeclSyntax] {
  12. guard let varDecl = declaration.as(VariableDeclSyntax.self),
  13. let binding = varDecl.bindings.first,
  14. let initializer = binding.initializer else {
  15. throw MacroExpansionErrorMessage("@__EntryDefaultValue can only be applied to stored properties with initial values")
  16. }
  17. let defaultValue = initializer.value
  18. return [
  19. AccessorDeclSyntax(
  20. accessorSpecifier: .keyword(.get),
  21. body: CodeBlockSyntax {
  22. "\(defaultValue)"
  23. }
  24. )
  25. ]
  26. }
  27. }