Skip to content
This repository was archived by the owner on Dec 17, 2018. It is now read-only.

Commit 83fc749

Browse files
committed
Use Apple's Unified Logging framework on macOS 10.12
The old way of writing the buffers to a file was not a scaling solution and it was prone to breaking. This also is not a scalable solution (i.e., does not work on Linux) but it is at least stable.
1 parent 81ce2f0 commit 83fc749

File tree

4 files changed

+26
-3
lines changed

4 files changed

+26
-3
lines changed

Sources/JSONRPC/Types/Request.swift

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,10 @@ import Argo
1010
import Curry
1111
import Foundation
1212
import Runes
13+
import os.log
14+
15+
@available(macOS 10.12, *)
16+
private let log = OSLog(subsystem: "me.lovelett.langserver-swift", category: "Request")
1317

1418
/// A JSON-RPC
1519
public enum Request {
@@ -78,6 +82,10 @@ public enum Request {
7882
throw PredefinedError.parse
7983
}
8084

85+
if #available(macOS 10.12, *) {
86+
os_log("%{public}@", log: log, type: .default, String(bytes: data, encoding: .utf8)!)
87+
}
88+
8189
let json = JSON(serialized)
8290

8391
let dMethod: Decoded<String> = (json <| "method")

Sources/JSONRPC/Types/Response.swift

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,13 @@
99
import Argo
1010
import Foundation
1111
import Ogra
12+
import os.log
1213

1314
fileprivate let headerSeparator = "\r\n"
1415
fileprivate let headerTerminator = "\r\n\r\n"
1516
fileprivate let pattern = headerTerminator.data(using: .utf8)!
17+
@available(macOS 10.12, *)
18+
private let log = OSLog(subsystem: "me.lovelett.langserver-swift", category: "Response")
1619

1720
public struct Response {
1821

@@ -86,7 +89,11 @@ public struct Response {
8689

8790
headerData?.append(jsonData)
8891

89-
return headerData ?? pattern
92+
let response = headerData ?? pattern
93+
if #available(macOS 10.12, *), let msg = String(bytes: response, encoding: .utf8) {
94+
os_log("%{public}@", log: log, type: .default, msg)
95+
}
96+
return response
9097
}
9198

9299
}

Sources/LanguageServer/main.swift

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,6 @@ dataAvailable = NotificationCenter.default.addObserver(forName: .NSFileHandleDat
2626
let requests = AnySequence<Data>() { iterator }
2727

2828
for requestBuffer in requests {
29-
let str = String(data: buffer, encoding: .utf8) ?? "Expected UTF-8 encoding."
30-
3129
do {
3230
let request = try Request(requestBuffer)
3331
let response = handle(request)

Sources/LanguageServerProtocol/Types/RequestIterator.swift

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,10 @@
77
//
88

99
import Foundation
10+
import os.log
1011

12+
@available(macOS 10.12, *)
13+
private let log = OSLog(subsystem: "me.lovelett.langserver-swift", category: "RequestIterator")
1114
fileprivate let terminatorPattern = Data(bytes: [0x0D, 0x0A, 0x0D, 0x0A]) // "\r\n\r\n"
1215

1316
public struct RequestIterator {
@@ -21,7 +24,14 @@ public struct RequestIterator {
2124
}
2225

2326
mutating public func append(_ data: Data) {
27+
if #available(macOS 10.12, *) {
28+
os_log("Adding %{iec-bytes}d to the request buffer which has %{iec-bytes}d", log: log, type: .default, data.count, iterator.data.count)
29+
}
2430
iterator.append(data)
31+
if #available(macOS 10.12, *), let new = String(bytes: data, encoding: .utf8), let buffer = String(bytes: iterator.data, encoding: .utf8) {
32+
os_log("Added: %{public}@", log: log, type: .default, new)
33+
os_log("Buffer: %{public}@", log: log, type: .default, buffer)
34+
}
2535
}
2636

2737
}

0 commit comments

Comments
 (0)