Group LSP parameter navigation on language rail

This commit is contained in:
slhx agent
2026-06-21 22:47:29 +02:00
parent accbedbe4e
commit 4789cf79bc
5 changed files with 38 additions and 4 deletions
+29 -1
View File
@@ -36,6 +36,8 @@ pub const Action = union(enum) {
language_format_policy,
language_organize_imports,
language_code_actions,
language_parameter_next,
language_parameter_previous,
diagnostics_open,
diagnostics_next,
diagnostics_previous,
@@ -106,7 +108,7 @@ pub const Leader = struct {
.rail => "leader: w save q quit Q discard f files P Pi o open p symbols s search r repeat",
.symbol_rail => symbol_mod.rail_status,
.search_rail => "search: f current file p project s symbols",
.language_rail => "language: h hover s sig f fmt o imports a actions (Space path)",
.language_rail => "language: h hover s sig n/p param f fmt o imports a actions",
.diagnostic_rail => "diagnostics: d open n/p next/prev f source (arrows/Enter ok)",
.tool_rail => "tools: l/L lint b build t test c check x cancel j jump y yank",
.open_prompt => "open: type path, Enter opens, Esc cancels",
@@ -239,6 +241,8 @@ pub const Leader = struct {
if (std.mem.eql(u8, text, "F")) return .language_format_policy;
if (std.mem.eql(u8, text, "w")) return .language_format_policy;
if (std.mem.eql(u8, text, "a")) return .language_code_actions;
if (std.mem.eql(u8, text, "n")) return .language_parameter_next;
if (std.mem.eql(u8, text, "p")) return .language_parameter_previous;
self.message = "language action is not built in this profile yet";
return .{ .not_built = .lsp };
},
@@ -594,3 +598,27 @@ test "regular: leader exposes files and Pi panels" {
try expectActionTag(.none, try leader.handleEvent(input.normalize(" ")));
try expectActionTag(.pi_panel, try leader.handleEvent(input.normalize("P")));
}
test "regular: language rail groups hover signature and parameter navigation" {
var leader = Leader.init(std.testing.allocator);
defer leader.deinit();
try expectActionTag(.none, try leader.handleEvent(input.normalize(" ")));
try expectActionTag(.none, try leader.handleEvent(input.normalize("l")));
try std.testing.expect(std.mem.indexOf(u8, leader.status(), "h hover") != null);
try std.testing.expect(std.mem.indexOf(u8, leader.status(), "s sig") != null);
try std.testing.expect(std.mem.indexOf(u8, leader.status(), "n/p param") != null);
try expectActionTag(.hover, try leader.handleEvent(input.normalize("h")));
try expectActionTag(.none, try leader.handleEvent(input.normalize(" ")));
try expectActionTag(.none, try leader.handleEvent(input.normalize("l")));
try expectActionTag(.signature, try leader.handleEvent(input.normalize("s")));
try expectActionTag(.none, try leader.handleEvent(input.normalize(" ")));
try expectActionTag(.none, try leader.handleEvent(input.normalize("l")));
try expectActionTag(.language_parameter_next, try leader.handleEvent(input.normalize("n")));
try expectActionTag(.none, try leader.handleEvent(input.normalize(" ")));
try expectActionTag(.none, try leader.handleEvent(input.normalize("l")));
try expectActionTag(.language_parameter_previous, try leader.handleEvent(input.normalize("p")));
}
+2
View File
@@ -2477,6 +2477,8 @@ pub const Client = struct {
.language_format_policy => try self.showFormatPolicy(),
.language_organize_imports => try self.organizeImports(),
.language_code_actions => try self.openCodeActions(),
.language_parameter_next => try self.moveLspParameter(.next),
.language_parameter_previous => try self.moveLspParameter(.previous),
.diagnostics_open => try self.openDiagnosticsPanel(),
.diagnostics_next => try self.gotoDiagnostic(.next),
.diagnostics_previous => try self.gotoDiagnostic(.previous),