Skip to content

Commit 2c5797d

Browse files
committed
Rip out unused _CharacterClassModel API
Remove the DSL -> _CharacterClassModel conversion, and _CharacterClassModel's custom character class matching logic, none of which is being used.
1 parent 7752047 commit 2c5797d

File tree

1 file changed

+0
-192
lines changed

1 file changed

+0
-192
lines changed

Sources/_StringProcessing/_CharacterClassModel.swift

Lines changed: 0 additions & 192 deletions
Original file line numberDiff line numberDiff line change
@@ -50,74 +50,6 @@ public struct _CharacterClassModel: Hashable {
5050
case whitespace
5151
/// Character.isLetter or Character.isDigit or Character == "_"
5252
case word
53-
/// One of the custom character set.
54-
case custom([CharacterSetComponent])
55-
}
56-
57-
public enum SetOperator: Hashable {
58-
case subtraction
59-
case intersection
60-
case symmetricDifference
61-
}
62-
63-
/// A binary set operation that forms a character class component.
64-
public struct SetOperation: Hashable {
65-
var lhs: CharacterSetComponent
66-
var op: SetOperator
67-
var rhs: CharacterSetComponent
68-
69-
func matches(_ c: Character, with options: MatchingOptions) -> Bool {
70-
switch op {
71-
case .intersection:
72-
return lhs.matches(c, with: options) && rhs.matches(c, with: options)
73-
case .subtraction:
74-
return lhs.matches(c, with: options) && !rhs.matches(c, with: options)
75-
case .symmetricDifference:
76-
return lhs.matches(c, with: options) != rhs.matches(c, with: options)
77-
}
78-
}
79-
}
80-
81-
public enum CharacterSetComponent: Hashable {
82-
case character(Character)
83-
case range(ClosedRange<Character>)
84-
85-
/// A nested character class.
86-
case characterClass(_CharacterClassModel)
87-
88-
/// A binary set operation of character class components.
89-
indirect case setOperation(SetOperation)
90-
91-
public static func setOperation(
92-
lhs: CharacterSetComponent, op: SetOperator, rhs: CharacterSetComponent
93-
) -> CharacterSetComponent {
94-
.setOperation(.init(lhs: lhs, op: op, rhs: rhs))
95-
}
96-
97-
func matches(_ character: Character, with options: MatchingOptions) -> Bool {
98-
switch self {
99-
case .character(let c):
100-
if options.isCaseInsensitive {
101-
return c.lowercased() == character.lowercased()
102-
} else {
103-
return c == character
104-
}
105-
case .range(let range):
106-
if options.isCaseInsensitive {
107-
let newLower = range.lowerBound.lowercased()
108-
let newUpper = range.upperBound.lowercased()
109-
// FIXME: Is failing this possible? Is this the right behavior if so?
110-
guard newLower <= newUpper else { return false }
111-
return (newLower...newUpper).contains(character.lowercased())
112-
} else {
113-
return range.contains(character)
114-
}
115-
case .characterClass(let custom):
116-
let str = String(character)
117-
return custom.matches(in: str, at: str.startIndex, with: options) != nil
118-
case .setOperation(let op): return op.matches(character, with: options)
119-
}
120-
}
12153
}
12254

12355
enum MatchLevel: Hashable {
@@ -188,8 +120,6 @@ public struct _CharacterClassModel: Hashable {
188120
matched = c.isWhitespace && (c.isASCII || !options.usesASCIISpaces)
189121
case .word:
190122
matched = c.isWordCharacter && (c.isASCII || !options.usesASCIIWord)
191-
case .custom(let set):
192-
matched = set.any { $0.matches(c, with: options) }
193123
}
194124
if isInverted {
195125
matched.toggle()
@@ -222,8 +152,6 @@ public struct _CharacterClassModel: Hashable {
222152
matched = c.properties.isWhitespace && (c.isASCII || !options.usesASCIISpaces)
223153
case .word:
224154
matched = (c.properties.isAlphabetic || c == "_") && (c.isASCII || !options.usesASCIIWord)
225-
case .custom(let set):
226-
matched = set.any { $0.matches(Character(c), with: options) }
227155
}
228156
if isInverted {
229157
matched.toggle()
@@ -286,23 +214,6 @@ extension _CharacterClassModel {
286214
public static var word: _CharacterClassModel {
287215
.init(cc: .word, matchLevel: .graphemeCluster)
288216
}
289-
290-
public static func custom(
291-
_ components: [_CharacterClassModel.CharacterSetComponent]
292-
) -> _CharacterClassModel {
293-
.init(cc: .custom(components), matchLevel: .graphemeCluster)
294-
}
295-
}
296-
297-
extension _CharacterClassModel.CharacterSetComponent: CustomStringConvertible {
298-
public var description: String {
299-
switch self {
300-
case .range(let range): return "<range \(range)>"
301-
case .character(let character): return "<character \(character)>"
302-
case .characterClass(let custom): return "\(custom)"
303-
case .setOperation(let op): return "<\(op.lhs) \(op.op) \(op.rhs)>"
304-
}
305-
}
306217
}
307218

308219
extension _CharacterClassModel.Representation: CustomStringConvertible {
@@ -318,7 +229,6 @@ extension _CharacterClassModel.Representation: CustomStringConvertible {
318229
case .verticalWhitespace: return "vertical whitespace"
319230
case .whitespace: return "<whitespace>"
320231
case .word: return "<word>"
321-
case .custom(let set): return "<custom \(set)>"
322232
}
323233
}
324234
}
@@ -391,22 +301,6 @@ extension _CharacterClassModel {
391301
}
392302
}
393303

394-
extension DSLTree.Node {
395-
var characterClass: _CharacterClassModel? {
396-
switch self {
397-
case let .customCharacterClass(ccc):
398-
return ccc.modelCharacterClass
399-
case let .atom(a):
400-
return a.characterClass
401-
case .characterPredicate:
402-
// FIXME: Do we make one from this?
403-
return nil
404-
default:
405-
return nil
406-
}
407-
}
408-
}
409-
410304
extension _CharacterClassModel {
411305
func withMatchLevel(
412306
_ level: _CharacterClassModel.MatchLevel
@@ -417,17 +311,6 @@ extension _CharacterClassModel {
417311
}
418312
}
419313

420-
extension DSLTree.Atom {
421-
var characterClass: _CharacterClassModel? {
422-
switch self {
423-
case let .unconverted(a):
424-
return a.ast.characterClass
425-
426-
default: return nil
427-
}
428-
}
429-
}
430-
431314
extension AST.Atom {
432315
var characterClass: _CharacterClassModel? {
433316
switch kind {
@@ -489,81 +372,6 @@ extension AST.Atom.EscapedBuiltin {
489372
}
490373
}
491374

492-
extension DSLTree.CustomCharacterClass {
493-
// TODO: Refactor a bit, and... can we drop this type?
494-
var modelCharacterClass: _CharacterClassModel? {
495-
var result =
496-
Array<_CharacterClassModel.CharacterSetComponent>()
497-
for m in members {
498-
switch m {
499-
case let .atom(a):
500-
if let cc = a.characterClass {
501-
result.append(.characterClass(cc))
502-
} else if let c = a.literalCharacterValue {
503-
result.append(.character(c))
504-
} else {
505-
return nil
506-
}
507-
case let .range(low, high):
508-
guard let lhs = low.literalCharacterValue,
509-
let rhs = high.literalCharacterValue
510-
else {
511-
return nil
512-
}
513-
result.append(.range(lhs...rhs))
514-
515-
case let .custom(ccc):
516-
guard let cc = ccc.modelCharacterClass else {
517-
return nil
518-
}
519-
result.append(.characterClass(cc))
520-
521-
case let .intersection(lhs, rhs):
522-
guard let lhs = lhs.modelCharacterClass,
523-
let rhs = rhs.modelCharacterClass
524-
else {
525-
return nil
526-
}
527-
result.append(.setOperation(
528-
lhs: .characterClass(lhs),
529-
op: .intersection,
530-
rhs: .characterClass(rhs)))
531-
532-
case let .subtraction(lhs, rhs):
533-
guard let lhs = lhs.modelCharacterClass,
534-
let rhs = rhs.modelCharacterClass
535-
else {
536-
return nil
537-
}
538-
result.append(.setOperation(
539-
lhs: .characterClass(lhs),
540-
op: .subtraction,
541-
rhs: .characterClass(rhs)))
542-
543-
case let .symmetricDifference(lhs, rhs):
544-
guard let lhs = lhs.modelCharacterClass,
545-
let rhs = rhs.modelCharacterClass
546-
else {
547-
return nil
548-
}
549-
result.append(.setOperation(
550-
lhs: .characterClass(lhs),
551-
op: .symmetricDifference,
552-
rhs: .characterClass(rhs)))
553-
554-
case let .quotedLiteral(s):
555-
// Decompose quoted literal into literal characters.
556-
result += s.map { .character($0) }
557-
558-
case .trivia:
559-
break
560-
}
561-
}
562-
let cc = _CharacterClassModel.custom(result)
563-
return isInverted ? cc.inverted : cc
564-
}
565-
}
566-
567375
extension _CharacterClassModel {
568376
// FIXME: Calling on inverted sets wont be the same as the
569377
// inverse of a boundary if at the start or end of the

0 commit comments

Comments
 (0)