EntryDefaultValueMacro.swift 995 B

1234567891011121314151617181920212223242526272829303132
  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. }