feat: show diagnostics in the file list view if they refer to another file

This commit is contained in:
CJ van den Berg 2024-08-18 16:21:38 +02:00
parent 28640633be
commit 4127cf8bcf
4 changed files with 115 additions and 53 deletions

View file

@ -164,7 +164,7 @@ pub const Diagnostic = struct {
a.free(self.message);
}
const Severity = enum { Error, Warning, Information, Hint };
pub const Severity = enum { Error, Warning, Information, Hint };
pub fn get_severity(self: Diagnostic) Severity {
return to_severity(self.severity);
}
@ -3314,7 +3314,7 @@ pub const Editor = struct {
}
pub fn goto_next_diagnostic(self: *Self, _: Context) Result {
if (self.diagnostics.items.len == 0) return;
if (self.diagnostics.items.len == 0) return command.executeName("goto_next_file", .{});
self.sort_diagnostics();
const primary = self.get_primary();
for (self.diagnostics.items) |*diag| {
@ -3325,7 +3325,7 @@ pub const Editor = struct {
}
pub fn goto_prev_diagnostic(self: *Self, _: Context) Result {
if (self.diagnostics.items.len == 0) return;
if (self.diagnostics.items.len == 0) return command.executeName("goto_prev_file", .{});
self.sort_diagnostics();
const primary = self.get_primary();
var i = self.diagnostics.items.len - 1;
@ -3440,21 +3440,6 @@ pub const Editor = struct {
return project_manager.completion(file_path, primary.cursor.row, primary.cursor.col);
}
pub fn clear_diagnostics(self: *Self, ctx: Context) Result {
var file_path: []const u8 = undefined;
if (!try ctx.args.match(.{tp.extract(&file_path)})) return error.InvalidArgument;
file_path = project_manager.normalize_file_path(file_path);
if (!std.mem.eql(u8, file_path, self.file_path orelse return)) return;
for (self.diagnostics.items) |*d| d.deinit(self.diagnostics.allocator);
self.diagnostics.clearRetainingCapacity();
self.diag_errors = 0;
self.diag_warnings = 0;
self.diag_info = 0;
self.diag_hints = 0;
self.send_editor_diagnostics() catch {};
self.need_render();
}
pub fn add_diagnostic(
self: *Self,
file_path: []const u8,
@ -3484,6 +3469,16 @@ pub const Editor = struct {
self.need_render();
}
pub fn clear_diagnostics(self: *Self) void {
self.diagnostics.clearRetainingCapacity();
self.diag_errors = 0;
self.diag_warnings = 0;
self.diag_info = 0;
self.diag_hints = 0;
self.send_editor_diagnostics() catch {};
self.need_render();
}
pub fn select(self: *Self, ctx: Context) Result {
var sel: Selection = .{};
if (!try ctx.args.match(.{ tp.extract(&sel.begin.row), tp.extract(&sel.begin.col), tp.extract(&sel.end.row), tp.extract(&sel.end.col) }))