Cuckoo/Generator/Sources/Internal/Tokens/Accessibility.swift

70 lines
1.5 KiB
Swift

import SwiftSyntax
enum Accessibility: String, Equatable {
case `open`
case `public`
case `internal`
case `private`
case `fileprivate`
var sourceName: String {
switch self {
case .open:
fallthrough
case .public:
return "public"
case .internal:
return ""
case .private:
return "private"
case .fileprivate:
return "fileprivate"
}
}
var isAccessible: Bool {
self != .private && self != .fileprivate
}
}
extension Accessibility {
init?(tokenKind: TokenKind) {
switch tokenKind {
case .publicKeyword:
self = .public
case .internalKeyword:
self = .internal
case .privateKeyword:
self = .private
case .fileprivateKeyword:
self = .fileprivate
case .identifier("open"):
self = .open
default:
return nil
}
}
}
extension Accessibility: Comparable {
static func < (lhs: Accessibility, rhs: Accessibility) -> Bool {
lhs.openness < rhs.openness
}
/// How open is this accessibility. The higher number the more accessible.
private var openness: Int {
switch self {
case .open:
return 4
case .public:
return 3
case .internal:
return 2
case .fileprivate:
return 1
case .private:
return 0
}
}
}