@@ -4,110 +4,93 @@ import Logging
44
55
66
7- internal enum EmojiSet : String {
7+ internal enum EmojiSet : String , CaseIterable {
88
99 /**
1010 The original set of emoji used in clt-logger.
1111 These work well in Terminal and Xcode (and on macOS generally, though not in VSCode). */
12- case original = " ORIGINAL "
13- case originalForWindowsTerminal = " ORIGINAL+WINDOWS_TERMINAL "
14- case originalForVSCodeMacOS = " ORIGINAL+VSCODE_MACOS "
15- case originalForVSCodeWindows = " ORIGINAL+VSCODE_WINDOWS "
12+ case original = " ORIGINAL "
13+ case swiftyBeaver = " SWIFTY_BEAVER "
14+ case cleanroomLogger = " CLEANROOM_LOGGER "
15+ case vaibhavsingh97EmojiLogger = " VAIBHAVSINGH97_EMOJI_LOGGER "
1616
17- case vaibhavsingh97EmojiLogger = " VAIBHAVSINGH97_EMOJI_LOGGER "
18- case vaibhavsingh97EmojiLoggerForVSCodeMacOS = " VAIBHAVSINGH97_EMOJI_LOGGER+VSCODE_MACOS "
17+ /** The emoji set that works on all platforms (no need for a replacement emoji because the original renders as text). */
18+ case noAlternates = " NO_ALTERNATES "
1919
2020 static func `default`( for environment: OutputEnvironment , _ envVars: [ String : String ] = ProcessInfo . processInfo. environment) -> EmojiSet {
2121 if let envStr = envVars [ " CLTLOGGER_EMOJI_SET_NAME " ] , let ret = EmojiSet ( rawValue: envStr) {
2222 return ret
2323 }
24- switch environment {
25- case . xcode, . macOSTerminal, . macOSiTerm2, . macOSUnknown:
26- return . original
27-
28- case . macOSVSCode, . unknownVSCode, . unknown:
29- return . originalForVSCodeMacOS
30-
31- case . windowsTerminal, . windowsConsole, . windowsUnknown:
32- return . originalForWindowsTerminal
33-
34- case . windowsVSCode:
35- return . originalForVSCodeWindows
36- }
24+ return . original
3725 }
3826
39- /* Exceptions:
40- * - ⚙️ on VSCode macOS renders as text
41- * - ⚠️ on VSCode macOS renders as text
42- * - ‼️ on VSCode macOS renders as text
43- * - ❤️ on VSCode macOS renders as text
44- * - 🗣 on VSCode Windows renders as text (I think)
45- * - ‼️ on VSCode Windows renders as text
46- * - ❗️ on Windows Terminal is larger than the rest (negative padding would be needed)
47- * - ‼️ on Windows Terminal renders as text */
48- func emoji( for logLevel: Logger . Level ) -> Emoji {
49- let original : ( Logger . Level ) -> Emoji = {
50- switch $0 {
51- case . critical: return . doubleExclamationPoint
52- case . error: return . exclamationPoint
53- case . warning: return . warning
54- case . notice: return . speaker
55- case . info: return . notebook
56- case . debug: return . cog
57- case . trace: return . poo
58- }
59- }
60- let vaibhavsingh97 : ( Logger . Level ) -> Emoji = {
61- switch $0 {
62- case . critical: return . ambulance
63- case . error: return . fearFace
64- case . warning: return . warning
65- case . notice: return . greenCheck /* Called success in upstream. */
66- case . info: return . monocle
67- case . debug: return . ladybug
68- case . trace: return . poo /* Does not exist in upstream. */
69- }
70- }
71-
27+ func emoji( for logLevel: Logger . Level , in environment: OutputEnvironment ) -> Emoji {
28+ let ret : Emoji
7229 switch self {
7330 case . original:
74- return original ( logLevel)
75-
76- case . originalForWindowsTerminal:
7731 switch logLevel {
78- case . critical: return . policeLight
79- case . error: return . redCross
80- default : return original ( logLevel)
32+ case . critical: ret = . doubleExclamationPoint
33+ case . error: ret = . exclamationPoint
34+ case . warning: ret = . warning
35+ case . notice: ret = . speaker
36+ case . info: ret = . notebook
37+ case . debug: ret = . cog
38+ case . trace: ret = . poo
8139 }
8240
83- case . originalForVSCodeMacOS :
41+ case . swiftyBeaver :
8442 switch logLevel {
85- case . critical: return . policeLight
86- case . warning: return . orangeDiamond
87- case . debug: return . worm
88- default : return original ( logLevel)
43+ case . critical: ret = . redSquare
44+ case . error: ret = . redSquare
45+ case . warning: ret = . yellowSquare
46+ case . notice: ret = . blueSquare /* Log level does not exist in upstream. */
47+ case . info: ret = . blueSquare
48+ case . debug: ret = . greenSquare
49+ case . trace: ret = . whiteSquare
8950 }
9051
91- case . originalForVSCodeWindows :
52+ case . cleanroomLogger :
9253 switch logLevel {
93- case . critical: return . policeLight
94- case . notice: return . eyebrow
95- default : return original ( logLevel)
54+ case . critical: ret = . redCross /* Log level does not exist in upstream. */
55+ case . error: ret = . redCross
56+ case . warning: ret = . orangeDiamond
57+ case . notice: ret = . blueDiamond /* Log level does not exist in upstream. */
58+ case . info: ret = . blueDiamond
59+ case . debug: ret = . blackSmallSquare
60+ case . trace: ret = . greySmallSquare
9661 }
9762
9863 case . vaibhavsingh97EmojiLogger:
99- return vaibhavsingh97 ( logLevel)
64+ switch logLevel {
65+ case . critical: ret = . ambulance
66+ case . error: ret = . fearFace
67+ case . warning: ret = . warning
68+ case . notice: ret = . greenCheck /* Called success in upstream. */
69+ case . info: ret = . monocle
70+ case . debug: ret = . ladybug
71+ case . trace: ret = . ladybug /* Log level does not exist in upstream. */
72+ }
10073
101- case . vaibhavsingh97EmojiLoggerForVSCodeMacOS :
74+ case . noAlternates :
10275 switch logLevel {
103- case . warning: return . orangeDiamond
104- default : return vaibhavsingh97 ( logLevel)
76+ case . critical: return . redCross
77+ case . error: return . redCircle
78+ case . warning: return . orangeCircle
79+ case . notice: return . yellowCircle
80+ case . info: return . greenCircle
81+ case . debug: return . purpleCircle
82+ case . trace: return . whiteCircle
10583 }
10684 }
85+ guard ret. rendersAsText ( in: environment) else {
86+ return ret
87+ }
88+ /* The no alternates emoji set will not check if its returned emojis render as text so there will never be an infinite loop here. */
89+ return EmojiSet . noAlternates. emoji ( for: logLevel, in: environment)
10790 }
10891
10992 func paddedEmoji( for logLevel: Logger . Level , in environment: OutputEnvironment ) -> String {
110- return emoji ( for: logLevel) . valueWithPadding ( for: environment)
93+ return emoji ( for: logLevel, in : environment ) . valueWithPadding ( for: environment)
11194 }
11295
11396}
0 commit comments