Skip to content

Commit aff32e6

Browse files
committed
Merge branch 'main' into charts-and-compares
2 parents a0af345 + 1acca94 commit aff32e6

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

42 files changed

+3105
-1328
lines changed

Package.swift

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -75,15 +75,17 @@ let package = Package(
7575
name: "RegexBuilder",
7676
dependencies: ["_StringProcessing", "_RegexParser"],
7777
swiftSettings: publicStdlibSettings),
78+
.target(name: "TestSupport",
79+
swiftSettings: [availabilityDefinition]),
7880
.testTarget(
7981
name: "RegexTests",
80-
dependencies: ["_StringProcessing"],
82+
dependencies: ["_StringProcessing", "TestSupport"],
8183
swiftSettings: [
8284
.unsafeFlags(["-Xfrontend", "-disable-availability-checking"]),
8385
]),
8486
.testTarget(
8587
name: "RegexBuilderTests",
86-
dependencies: ["_StringProcessing", "RegexBuilder"],
88+
dependencies: ["_StringProcessing", "RegexBuilder", "TestSupport"],
8789
swiftSettings: [
8890
.unsafeFlags(["-Xfrontend", "-disable-availability-checking"])
8991
]),

Sources/RegexBuilder/CharacterClass.swift

Lines changed: 23 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -15,27 +15,39 @@
1515
@available(SwiftStdlib 5.7, *)
1616
public struct CharacterClass {
1717
internal var ccc: DSLTree.CustomCharacterClass
18+
/// The builtin character class, if this CharacterClass is representable by one
19+
internal var builtin: DSLTree.Atom.CharacterClass?
1820

1921
init(_ ccc: DSLTree.CustomCharacterClass) {
2022
self.ccc = ccc
23+
self.builtin = nil
2124
}
2225

23-
init(unconverted atom: DSLTree._AST.Atom) {
24-
self.ccc = .init(members: [.atom(.unconverted(atom))])
26+
init(builtin: DSLTree.Atom.CharacterClass) {
27+
self.ccc = .init(members: [.atom(.characterClass(builtin))])
28+
self.builtin = builtin
2529
}
2630
}
2731

2832
@available(SwiftStdlib 5.7, *)
2933
extension CharacterClass: RegexComponent {
3034
public var regex: Regex<Substring> {
31-
_RegexFactory().customCharacterClass(ccc)
35+
if let cc = builtin {
36+
return _RegexFactory().characterClass(cc)
37+
} else {
38+
return _RegexFactory().customCharacterClass(ccc)
39+
}
3240
}
3341
}
3442

3543
@available(SwiftStdlib 5.7, *)
3644
extension CharacterClass {
3745
public var inverted: CharacterClass {
38-
CharacterClass(ccc.inverted)
46+
if let inv = builtin?.inverted {
47+
return CharacterClass(builtin: inv)
48+
} else {
49+
return CharacterClass(ccc.inverted)
50+
}
3951
}
4052
}
4153

@@ -50,15 +62,15 @@ extension RegexComponent where Self == CharacterClass {
5062
}
5163

5264
public static var anyGraphemeCluster: CharacterClass {
53-
.init(unconverted: ._anyGrapheme)
65+
.init(builtin: .anyGrapheme)
5466
}
5567

5668
public static var whitespace: CharacterClass {
57-
.init(unconverted: ._whitespace)
69+
.init(builtin: .whitespace)
5870
}
5971

6072
public static var digit: CharacterClass {
61-
.init(unconverted: ._digit)
73+
.init(builtin: .digit)
6274
}
6375

6476
public static var hexDigit: CharacterClass {
@@ -70,19 +82,19 @@ extension RegexComponent where Self == CharacterClass {
7082
}
7183

7284
public static var horizontalWhitespace: CharacterClass {
73-
.init(unconverted: ._horizontalWhitespace)
85+
.init(builtin: .horizontalWhitespace)
7486
}
7587

7688
public static var newlineSequence: CharacterClass {
77-
.init(unconverted: ._newlineSequence)
89+
.init(builtin: .newlineSequence)
7890
}
7991

8092
public static var verticalWhitespace: CharacterClass {
81-
.init(unconverted: ._verticalWhitespace)
93+
.init(builtin: .verticalWhitespace)
8294
}
8395

8496
public static var word: CharacterClass {
85-
.init(unconverted: ._word)
97+
.init(builtin: .word)
8698
}
8799
}
88100

0 commit comments

Comments
 (0)