diff options
| author | DanielGavin <danielgavin5@hotmail.com> | 2020-11-07 15:44:30 +0100 |
|---|---|---|
| committer | DanielGavin <danielgavin5@hotmail.com> | 2020-11-07 15:44:30 +0100 |
| commit | 6ec424ed8d34cf8a5f51e277a20429741b33ee96 (patch) | |
| tree | 6d0eed732e01d19effbae5cc525a9c2f6e28534f /src/server/log.odin | |
| parent | 3f1027bd4003cdb9fdc80665548181df2fb60810 (diff) | |
complete refractor of the project into packages
Diffstat (limited to 'src/server/log.odin')
| -rw-r--r-- | src/server/log.odin | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/src/server/log.odin b/src/server/log.odin new file mode 100644 index 0000000..5ed007e --- /dev/null +++ b/src/server/log.odin @@ -0,0 +1,64 @@ +package server + +import "core:fmt"; +import "core:strings"; +import "core:os"; +import "core:time"; +import "core:log"; + + +Default_Console_Logger_Opts :: log.Options{ + .Level, + .Terminal_Color, + .Short_File_Path, + .Line, + .Procedure, +} | log.Full_Timestamp_Opts; + + +Lsp_Logger_Data :: struct { + writer: ^Writer, +} + +create_lsp_logger :: proc(writer: ^Writer, lowest := log.Level.Debug, opt := Default_Console_Logger_Opts) -> log.Logger { + data := new(Lsp_Logger_Data); + data.writer = writer; + return log.Logger{lsp_logger_proc, data, lowest, opt}; +} + +destroy_lsp_logger :: proc(log: ^log.Logger) { + free(log.data); +} + +lsp_logger_proc :: proc(logger_data: rawptr, level: log.Level, text: string, options: log.Options, location := #caller_location) { + data := cast(^Lsp_Logger_Data)logger_data; + + backing: [1024]byte; //NOTE(Hoej): 1024 might be too much for a header backing, unless somebody has really long paths. + buf := strings.builder_from_slice(backing[:]); + + when time.IS_SUPPORTED { + if log.Full_Timestamp_Opts & options != nil { + fmt.sbprint(&buf, "["); + t := time.now(); + y, m, d := time.date(t); + h, min, s := time.clock(t); + if .Date in options { fmt.sbprintf(&buf, "%d-%02d-%02d ", y, m, d); } + if .Time in options { fmt.sbprintf(&buf, "%02d:%02d:%02d", h, min, s); } + fmt.sbprint(&buf, "] "); + } + } + + message := fmt.tprintf("%s", text); + + notification := Notification { + jsonrpc = "2.0", + method = "window/logMessage", + params = NotificationLoggingParams { + type = 1, + message = message, + } + }; + + send_notification(notification, data.writer); +} + |