forked from swiftlang/swift-syntax
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathExpressionMacrosPlayground.swift
59 lines (43 loc) · 1.73 KB
/
ExpressionMacrosPlayground.swift
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
//===----------------------------------------------------------------------===//
//
// This source file is part of the Swift.org open source project
//
// Copyright (c) 2014 - 2023 Apple Inc. and the Swift project authors
// Licensed under Apache License v2.0 with Runtime Library Exception
//
// See https://swift.org/LICENSE.txt for license information
// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors
//
//===----------------------------------------------------------------------===//
import Foundation
import MacroExamplesInterface
func runExpressionMacrosPlayground() {
let x = 1
let y = 2
let z = 3
// MARK: - Add Blocker
// "AddBlocker" complains about addition operations. We emit a warning
// so it doesn't block compilation.
print(#addBlocker(x * y + z))
// MARK: - Font Literal
struct Font: ExpressibleByFontLiteral {
init(fontLiteralName: String, size: Int, weight: MacroExamplesInterface.FontWeight) {
}
}
let _: Font = #fontLiteral(name: "Comic Sans", size: 14, weight: .thin)
// MARK: - Stringify Macro
// "Stringify" macro turns the expression into a string.
print(#stringify(x + y))
// MARK: - URL
// "#URL" macro provides compile time checked URL construction. If the URL is
// malformed an error is emitted. Otherwise a non-optional URL is expanded.
print(#URL("https://swift.org/"))
// let domain = "domain.com"
//print(#URL("https://\(domain)/api/path")) // error: #URL requires a static string literal
//print(#URL("https://not a url.com:invalid-port/")) // error: Malformed url
// MARK: - Warning
#myWarning("remember to pass a string literal here")
// Uncomment to get an error out of the macro.
// let text = "oops"
// #myWarning(text)
}