Better log levels

This commit is contained in:
Alexandros Naskos 2020-07-07 22:16:29 +03:00
parent 39c0cf429b
commit f55d5a25aa

View File

@ -961,20 +961,20 @@ fn loadConfig(folder_path: []const u8) ?Config {
const file_buf = folder.readFileAlloc(allocator, "zls.json", 0x1000000) catch |err| { const file_buf = folder.readFileAlloc(allocator, "zls.json", 0x1000000) catch |err| {
if (err != error.FileNotFound) if (err != error.FileNotFound)
std.log.debug(.main, "Error while reading configuration file: {}\n", .{err}); std.log.warn(.main, "Error while reading configuration file: {}\n", .{err});
return null; return null;
}; };
defer allocator.free(file_buf); defer allocator.free(file_buf);
// TODO: Better errors? Doesn't seem like std.json can provide us positions or context. // TODO: Better errors? Doesn't seem like std.json can provide us positions or context.
var config = std.json.parse(Config, &std.json.TokenStream.init(file_buf), std.json.ParseOptions{ .allocator = allocator }) catch |err| { var config = std.json.parse(Config, &std.json.TokenStream.init(file_buf), std.json.ParseOptions{ .allocator = allocator }) catch |err| {
std.log.debug(.main, "Error while parsing configuration file: {}\n", .{err}); std.log.warn(.main, "Error while parsing configuration file: {}\n", .{err});
return null; return null;
}; };
if (config.zig_lib_path) |zig_lib_path| { if (config.zig_lib_path) |zig_lib_path| {
if (!std.fs.path.isAbsolute(zig_lib_path)) { if (!std.fs.path.isAbsolute(zig_lib_path)) {
std.log.debug(.main, "zig library path is not absolute, defaulting to null.\n", .{}); std.log.warn(.main, "zig library path is not absolute, defaulting to null.\n", .{});
allocator.free(zig_lib_path); allocator.free(zig_lib_path);
config.zig_lib_path = null; config.zig_lib_path = null;
} }
@ -1051,8 +1051,6 @@ fn initializeHandler(arena: *std.heap.ArenaAllocator, id: types.RequestId, req:
try loadWorkspaceConfigs(); try loadWorkspaceConfigs();
} }
std.log.debug(.main, "{}\n", .{client_capabilities});
std.log.debug(.main, "Using offset encoding: {}\n", .{std.meta.tagName(offset_encoding)});
if (!send_encoding) { if (!send_encoding) {
try respondGeneric(id, initialize_response); try respondGeneric(id, initialize_response);
} else { } else {
@ -1063,6 +1061,8 @@ fn initializeHandler(arena: *std.heap.ArenaAllocator, id: types.RequestId, req:
try respondGeneric(id, response_str); try respondGeneric(id, response_str);
} }
std.log.notice(.main, "zls initialized", .{}); std.log.notice(.main, "zls initialized", .{});
std.log.info(.main, "{}\n", .{client_capabilities});
std.log.notice(.main, "Using offset encoding: {}\n", .{std.meta.tagName(offset_encoding)});
} }
var keep_running = true; var keep_running = true;
@ -1115,7 +1115,7 @@ fn changeDocumentHandler(arena: *std.heap.ArenaAllocator, id: types.RequestId, r
fn saveDocumentHandler(arena: *std.heap.ArenaAllocator, id: types.RequestId, req: requests.SaveDocument, config: Config) error{OutOfMemory}!void { fn saveDocumentHandler(arena: *std.heap.ArenaAllocator, id: types.RequestId, req: requests.SaveDocument, config: Config) error{OutOfMemory}!void {
const handle = document_store.getHandle(req.params.textDocument.uri) orelse { const handle = document_store.getHandle(req.params.textDocument.uri) orelse {
std.log.debug(.main, "Trying to save non existent document {}", .{req.params.textDocument.uri}); std.log.warn(.main, "Trying to save non existent document {}", .{req.params.textDocument.uri});
return; return;
}; };
try document_store.applySave(handle); try document_store.applySave(handle);
@ -1129,7 +1129,7 @@ fn semanticTokensHandler(arena: *std.heap.ArenaAllocator, id: types.RequestId, r
const this_config = configFromUriOr(req.params.textDocument.uri, config); const this_config = configFromUriOr(req.params.textDocument.uri, config);
if (this_config.enable_semantic_tokens) { if (this_config.enable_semantic_tokens) {
const handle = document_store.getHandle(req.params.textDocument.uri) orelse { const handle = document_store.getHandle(req.params.textDocument.uri) orelse {
std.log.debug(.main, "Trying to get semantic tokens of non existent document {}", .{req.params.textDocument.uri}); std.log.warn(.main, "Trying to get semantic tokens of non existent document {}", .{req.params.textDocument.uri});
return try respondGeneric(id, no_semantic_tokens_response); return try respondGeneric(id, no_semantic_tokens_response);
}; };
@ -1147,7 +1147,7 @@ fn semanticTokensHandler(arena: *std.heap.ArenaAllocator, id: types.RequestId, r
fn completionHandler(arena: *std.heap.ArenaAllocator, id: types.RequestId, req: requests.Completion, config: Config) !void { fn completionHandler(arena: *std.heap.ArenaAllocator, id: types.RequestId, req: requests.Completion, config: Config) !void {
const handle = document_store.getHandle(req.params.textDocument.uri) orelse { const handle = document_store.getHandle(req.params.textDocument.uri) orelse {
std.log.debug(.main, "Trying to complete in non existent document {}", .{req.params.textDocument.uri}); std.log.warn(.main, "Trying to complete in non existent document {}", .{req.params.textDocument.uri});
return try respondGeneric(id, no_completions_response); return try respondGeneric(id, no_completions_response);
}; };
@ -1204,7 +1204,7 @@ fn signatureHelperHandler(arena: *std.heap.ArenaAllocator, id: types.RequestId,
fn gotoHandler(arena: *std.heap.ArenaAllocator, id: types.RequestId, req: requests.GotoDefinition, config: Config, resolve_alias: bool) !void { fn gotoHandler(arena: *std.heap.ArenaAllocator, id: types.RequestId, req: requests.GotoDefinition, config: Config, resolve_alias: bool) !void {
const handle = document_store.getHandle(req.params.textDocument.uri) orelse { const handle = document_store.getHandle(req.params.textDocument.uri) orelse {
std.log.debug(.main, "Trying to go to definition in non existent document {}", .{req.params.textDocument.uri}); std.log.warn(.main, "Trying to go to definition in non existent document {}", .{req.params.textDocument.uri});
return try respondGeneric(id, null_result_response); return try respondGeneric(id, null_result_response);
}; };
@ -1235,7 +1235,7 @@ fn gotoDeclarationHandler(arena: *std.heap.ArenaAllocator, id: types.RequestId,
fn hoverHandler(arena: *std.heap.ArenaAllocator, id: types.RequestId, req: requests.Hover, config: Config) !void { fn hoverHandler(arena: *std.heap.ArenaAllocator, id: types.RequestId, req: requests.Hover, config: Config) !void {
const handle = document_store.getHandle(req.params.textDocument.uri) orelse { const handle = document_store.getHandle(req.params.textDocument.uri) orelse {
std.log.debug(.main, "Trying to get hover in non existent document {}", .{req.params.textDocument.uri}); std.log.warn(.main, "Trying to get hover in non existent document {}", .{req.params.textDocument.uri});
return try respondGeneric(id, null_result_response); return try respondGeneric(id, null_result_response);
}; };
@ -1257,7 +1257,7 @@ fn hoverHandler(arena: *std.heap.ArenaAllocator, id: types.RequestId, req: reque
fn documentSymbolsHandler(arena: *std.heap.ArenaAllocator, id: types.RequestId, req: requests.DocumentSymbols, config: Config) !void { fn documentSymbolsHandler(arena: *std.heap.ArenaAllocator, id: types.RequestId, req: requests.DocumentSymbols, config: Config) !void {
const handle = document_store.getHandle(req.params.textDocument.uri) orelse { const handle = document_store.getHandle(req.params.textDocument.uri) orelse {
std.log.debug(.main, "Trying to get document symbols in non existent document {}", .{req.params.textDocument.uri}); std.log.warn(.main, "Trying to get document symbols in non existent document {}", .{req.params.textDocument.uri});
return try respondGeneric(id, null_result_response); return try respondGeneric(id, null_result_response);
}; };
try documentSymbol(arena, id, handle); try documentSymbol(arena, id, handle);
@ -1266,7 +1266,7 @@ fn documentSymbolsHandler(arena: *std.heap.ArenaAllocator, id: types.RequestId,
fn formattingHandler(arena: *std.heap.ArenaAllocator, id: types.RequestId, req: requests.Formatting, config: Config) !void { fn formattingHandler(arena: *std.heap.ArenaAllocator, id: types.RequestId, req: requests.Formatting, config: Config) !void {
if (config.zig_exe_path) |zig_exe_path| { if (config.zig_exe_path) |zig_exe_path| {
const handle = document_store.getHandle(req.params.textDocument.uri) orelse { const handle = document_store.getHandle(req.params.textDocument.uri) orelse {
std.log.debug(.main, "Trying to got to definition in non existent document {}", .{req.params.textDocument.uri}); std.log.warn(.main, "Trying to got to definition in non existent document {}", .{req.params.textDocument.uri});
return try respondGeneric(id, null_result_response); return try respondGeneric(id, null_result_response);
}; };
@ -1276,7 +1276,7 @@ fn formattingHandler(arena: *std.heap.ArenaAllocator, id: types.RequestId, req:
process.stdout_behavior = .Pipe; process.stdout_behavior = .Pipe;
process.spawn() catch |err| { process.spawn() catch |err| {
std.log.debug(.main, "Failed to spawn zig fmt process, error: {}\n", .{err}); std.log.warn(.main, "Failed to spawn zig fmt process, error: {}\n", .{err});
return try respondGeneric(id, null_result_response); return try respondGeneric(id, null_result_response);
}; };
try process.stdin.?.writeAll(handle.document.text); try process.stdin.?.writeAll(handle.document.text);
@ -1308,7 +1308,7 @@ fn formattingHandler(arena: *std.heap.ArenaAllocator, id: types.RequestId, req:
fn renameHandler(arena: *std.heap.ArenaAllocator, id: types.RequestId, req: requests.Rename, config: Config) !void { fn renameHandler(arena: *std.heap.ArenaAllocator, id: types.RequestId, req: requests.Rename, config: Config) !void {
const handle = document_store.getHandle(req.params.textDocument.uri) orelse { const handle = document_store.getHandle(req.params.textDocument.uri) orelse {
std.log.debug(.main, "Trying to rename in non existent document {}", .{req.params.textDocument.uri}); std.log.warn(.main, "Trying to rename in non existent document {}", .{req.params.textDocument.uri});
return try respondGeneric(id, null_result_response); return try respondGeneric(id, null_result_response);
}; };
@ -1330,7 +1330,7 @@ fn renameHandler(arena: *std.heap.ArenaAllocator, id: types.RequestId, req: requ
fn referencesHandler(arena: *std.heap.ArenaAllocator, id: types.RequestId, req: requests.References, config: Config) !void { fn referencesHandler(arena: *std.heap.ArenaAllocator, id: types.RequestId, req: requests.References, config: Config) !void {
const handle = document_store.getHandle(req.params.textDocument.uri) orelse { const handle = document_store.getHandle(req.params.textDocument.uri) orelse {
std.log.debug(.main, "Trying to get references in non existent document {}", .{req.params.textDocument.uri}); std.log.warn(.main, "Trying to get references in non existent document {}", .{req.params.textDocument.uri});
return try respondGeneric(id, null_result_response); return try respondGeneric(id, null_result_response);
}; };
@ -1414,7 +1414,7 @@ fn processJsonRpc(arena: *std.heap.ArenaAllocator, parser: *std.json.Parser, jso
done = extractErr(method_info[2](arena, id, request_obj, config)); done = extractErr(method_info[2](arena, id, request_obj, config));
} else |err| { } else |err| {
if (err == error.MalformedJson) { if (err == error.MalformedJson) {
std.log.debug(.main, "Could not create request type {} from JSON {}\n", .{ @typeName(ReqT), json }); std.log.warn(.main, "Could not create request type {} from JSON {}\n", .{ @typeName(ReqT), json });
} }
done = err; done = err;
} }
@ -1433,7 +1433,6 @@ fn processJsonRpc(arena: *std.heap.ArenaAllocator, parser: *std.json.Parser, jso
}; };
const unimplemented_map = std.ComptimeStringMap(void, .{ const unimplemented_map = std.ComptimeStringMap(void, .{
.{"textDocument/references"},
.{"textDocument/documentHighlight"}, .{"textDocument/documentHighlight"},
.{"textDocument/codeAction"}, .{"textDocument/codeAction"},
.{"textDocument/codeLens"}, .{"textDocument/codeLens"},
@ -1531,7 +1530,7 @@ pub fn main() anyerror!void {
const env_path = std.process.getEnvVarOwned(allocator, "PATH") catch |err| switch (err) { const env_path = std.process.getEnvVarOwned(allocator, "PATH") catch |err| switch (err) {
error.EnvironmentVariableNotFound => { error.EnvironmentVariableNotFound => {
std.log.debug(.main, "Could not get PATH.\n", .{}); std.log.warn(.main, "Could not get PATH.\n", .{});
break :find_zig; break :find_zig;
}, },
else => return err, else => return err,
@ -1552,21 +1551,21 @@ pub fn main() anyerror!void {
var buf: [std.fs.MAX_PATH_BYTES]u8 = undefined; var buf: [std.fs.MAX_PATH_BYTES]u8 = undefined;
zig_exe_path = try std.mem.dupe(allocator, u8, std.os.realpath(full_path, &buf) catch continue); zig_exe_path = try std.mem.dupe(allocator, u8, std.os.realpath(full_path, &buf) catch continue);
std.log.debug(.main, "Found zig in PATH: {}\n", .{zig_exe_path}); std.log.info(.main, "Found zig in PATH: {}\n", .{zig_exe_path});
break :find_zig; break :find_zig;
} }
} }
if (zig_exe_path) |exe_path| { if (zig_exe_path) |exe_path| {
config.zig_exe_path = exe_path; config.zig_exe_path = exe_path;
std.log.debug(.main, "Using zig executable {}\n", .{exe_path}); std.log.info(.main, "Using zig executable {}\n", .{exe_path});
if (config.zig_lib_path == null) { if (config.zig_lib_path == null) {
// Set the lib path relative to the executable path. // Set the lib path relative to the executable path.
config.zig_lib_path = try std.fs.path.resolve(allocator, &[_][]const u8{ config.zig_lib_path = try std.fs.path.resolve(allocator, &[_][]const u8{
std.fs.path.dirname(exe_path).?, "./lib/zig", std.fs.path.dirname(exe_path).?, "./lib/zig",
}); });
std.log.debug(.main, "Resolved standard library from executable: {}\n", .{config.zig_lib_path}); std.log.info(.main, "Resolved standard library from executable: {}\n", .{config.zig_lib_path});
} }
} }
@ -1579,7 +1578,6 @@ pub fn main() anyerror!void {
const build_runner_path = try std.fs.path.resolve(allocator, &[_][]const u8{ exe_dir_path, "build_runner.zig" }); const build_runner_path = try std.fs.path.resolve(allocator, &[_][]const u8{ exe_dir_path, "build_runner.zig" });
try document_store.init(allocator, zig_exe_path, build_runner_path, config.zig_lib_path); try document_store.init(allocator, zig_exe_path, build_runner_path, config.zig_lib_path);
} }
defer document_store.deinit(); defer document_store.deinit();
workspace_folder_configs = std.StringHashMap(?Config).init(allocator); workspace_folder_configs = std.StringHashMap(?Config).init(allocator);
@ -1604,7 +1602,7 @@ pub fn main() anyerror!void {
while (keep_running) { while (keep_running) {
const headers = readRequestHeader(&arena.allocator, reader) catch |err| { const headers = readRequestHeader(&arena.allocator, reader) catch |err| {
std.log.debug(.main, "{}; exiting!", .{@errorName(err)}); std.log.crit(.main, "{}; exiting!", .{@errorName(err)});
return; return;
}; };
const buf = try arena.allocator.alloc(u8, headers.content_length); const buf = try arena.allocator.alloc(u8, headers.content_length);
@ -1616,7 +1614,7 @@ pub fn main() anyerror!void {
arena.state.buffer_list = .{}; arena.state.buffer_list = .{};
if (debug_alloc) |dbg| { if (debug_alloc) |dbg| {
std.log.debug(.main, "\n{}\n", .{dbg.info}); std.log.notice(.main, "\n{}\n", .{dbg.info});
} }
} }
} }