feat(LSP): add some logging of LSP start/stop
This commit is contained in:
parent
f60ccd7c37
commit
f9bbc7f582
2 changed files with 32 additions and 0 deletions
|
@ -3,6 +3,7 @@ const tp = @import("thespian");
|
||||||
const cbor = @import("cbor");
|
const cbor = @import("cbor");
|
||||||
const root = @import("root");
|
const root = @import("root");
|
||||||
const tracy = @import("tracy");
|
const tracy = @import("tracy");
|
||||||
|
const log = @import("log");
|
||||||
|
|
||||||
a: std.mem.Allocator,
|
a: std.mem.Allocator,
|
||||||
pid: tp.pid,
|
pid: tp.pid,
|
||||||
|
@ -233,6 +234,8 @@ const Process = struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn handle_terminated(self: *Process, err: []const u8, code: u32) tp.result {
|
fn handle_terminated(self: *Process, err: []const u8, code: u32) tp.result {
|
||||||
|
const logger = log.logger("LSP");
|
||||||
|
logger.print("terminated: {s} {d}", .{ err, code });
|
||||||
self.write_log("### subprocess terminated {s} {d} ###\n", .{ err, code });
|
self.write_log("### subprocess terminated {s} {d} ###\n", .{ err, code });
|
||||||
try self.parent.send(.{ sp_tag, self.tag, "done" });
|
try self.parent.send(.{ sp_tag, self.tag, "done" });
|
||||||
return tp.exit_normal();
|
return tp.exit_normal();
|
||||||
|
|
|
@ -88,6 +88,8 @@ pub fn restore_state(self: *Self, data: []const u8) !void {
|
||||||
|
|
||||||
fn get_lsp(self: *Self, language_server: []const u8) !LSP {
|
fn get_lsp(self: *Self, language_server: []const u8) !LSP {
|
||||||
if (self.language_servers.get(language_server)) |lsp| return lsp;
|
if (self.language_servers.get(language_server)) |lsp| return lsp;
|
||||||
|
const logger = log.logger("lsp");
|
||||||
|
errdefer |e| logger.print_err("get_lsp", "failed to initialize LSP: {s} -> {any}", .{ fmt_lsp_name_func(language_server), e });
|
||||||
const lsp = try LSP.open(self.a, self.name, .{ .buf = language_server });
|
const lsp = try LSP.open(self.a, self.name, .{ .buf = language_server });
|
||||||
try self.language_servers.put(try self.a.dupe(u8, language_server), lsp);
|
try self.language_servers.put(try self.a.dupe(u8, language_server), lsp);
|
||||||
const uri = try self.make_URI(null);
|
const uri = try self.make_URI(null);
|
||||||
|
@ -97,10 +99,13 @@ fn get_lsp(self: *Self, language_server: []const u8) !LSP {
|
||||||
const response = try self.send_lsp_init_request(lsp, self.name, basename, uri);
|
const response = try self.send_lsp_init_request(lsp, self.name, basename, uri);
|
||||||
defer self.a.free(response.buf);
|
defer self.a.free(response.buf);
|
||||||
try lsp.send_notification("initialized", .{});
|
try lsp.send_notification("initialized", .{});
|
||||||
|
logger.print("initialized LSP: {s}", .{fmt_lsp_name_func(language_server)});
|
||||||
return lsp;
|
return lsp;
|
||||||
}
|
}
|
||||||
|
|
||||||
fn get_file_lsp(self: *Self, file_path: []const u8) !LSP {
|
fn get_file_lsp(self: *Self, file_path: []const u8) !LSP {
|
||||||
|
const logger = log.logger("lsp");
|
||||||
|
errdefer logger.print_err("get_file_lsp", "no LSP found for file: {s}", .{std.fmt.fmtSliceEscapeLower(file_path)});
|
||||||
const lsp = self.file_language_server.get(file_path) orelse return tp.exit("no language server");
|
const lsp = self.file_language_server.get(file_path) orelse return tp.exit("no language server");
|
||||||
if (lsp.pid.expired()) return tp.exit("no language server");
|
if (lsp.pid.expired()) return tp.exit("no language server");
|
||||||
return lsp;
|
return lsp;
|
||||||
|
@ -915,3 +920,27 @@ fn send_lsp_init_request(self: *Self, lsp: LSP, project_path: []const u8, projec
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn fmt_lsp_name_func(bytes: []const u8) std.fmt.Formatter(format_lsp_name_func) {
|
||||||
|
return .{ .data = bytes };
|
||||||
|
}
|
||||||
|
|
||||||
|
fn format_lsp_name_func(
|
||||||
|
bytes: []const u8,
|
||||||
|
comptime fmt: []const u8,
|
||||||
|
options: std.fmt.FormatOptions,
|
||||||
|
writer: anytype,
|
||||||
|
) !void {
|
||||||
|
_ = fmt;
|
||||||
|
_ = options;
|
||||||
|
var iter: []const u8 = bytes;
|
||||||
|
var len = cbor.decodeArrayHeader(&iter) catch return;
|
||||||
|
var first: bool = true;
|
||||||
|
while (len > 0) : (len -= 1) {
|
||||||
|
var value: []const u8 = undefined;
|
||||||
|
if (!(cbor.matchValue(&iter, cbor.extract(&value)) catch return))
|
||||||
|
return;
|
||||||
|
if (first) first = false else try writer.writeAll(" ");
|
||||||
|
try writer.writeAll(value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue