aboutsummaryrefslogtreecommitdiff
path: root/src/cli.zig
diff options
context:
space:
mode:
authorGravatar Jarred Sumner <jarred@jarredsumner.com> 2021-12-19 23:30:25 -0800
committerGravatar Jarred Sumner <jarred@jarredsumner.com> 2021-12-19 23:30:25 -0800
commita0551a9b8bbe90569cb011ae299878797d3ad128 (patch)
treecaca0b865672a3b591b40e6a008841d2f3a7cfee /src/cli.zig
parentbe03fc273a487ac402f19ad897778d74b6d72963 (diff)
downloadbun-a0551a9b8bbe90569cb011ae299878797d3ad128.tar.gz
bun-a0551a9b8bbe90569cb011ae299878797d3ad128.tar.zst
bun-a0551a9b8bbe90569cb011ae299878797d3ad128.zip
Autocomplete popular package names (thanks @evanwashere)
Diffstat (limited to 'src/cli.zig')
-rw-r--r--src/cli.zig52
1 files changed, 50 insertions, 2 deletions
diff --git a/src/cli.zig b/src/cli.zig
index 12b110cc8..f221fefd0 100644
--- a/src/cli.zig
+++ b/src/cli.zig
@@ -536,6 +536,8 @@ pub const HelpCommand = struct {
}
};
+const AddCompletions = @import("./cli/add_completions.zig");
+
pub const PrintBundleCommand = struct {
pub fn exec(ctx: Command.Context) !void {
const entry_point = ctx.args.entry_points[0];
@@ -723,7 +725,7 @@ pub const Command = struct {
break;
}
}
-
+ var prefilled_completions: [AddCompletions.biggest_list]string = undefined;
var completions = ShellCompletions{};
if (filter.len == 0) {
@@ -742,8 +744,54 @@ pub const Command = struct {
completions = try RunCommand.completions(ctx, null, &reject_list, .bun_js);
} else if (strings.eqlComptime(filter[0], "z")) {
completions = try RunCommand.completions(ctx, null, &reject_list, .script_and_descriptions);
+ } else if (strings.eqlComptime(filter[0], "a")) {
+ const FirstLetter = AddCompletions.FirstLetter;
+ const index = AddCompletions.index;
+
+ outer: {
+ if (filter.len > 1) {
+ const first_letter: FirstLetter = switch (filter[1][0]) {
+ 'a' => FirstLetter.a,
+ 'b' => FirstLetter.b,
+ 'c' => FirstLetter.c,
+ 'd' => FirstLetter.d,
+ 'e' => FirstLetter.e,
+ 'f' => FirstLetter.f,
+ 'g' => FirstLetter.g,
+ 'h' => FirstLetter.h,
+ 'i' => FirstLetter.i,
+ 'j' => FirstLetter.j,
+ 'k' => FirstLetter.k,
+ 'l' => FirstLetter.l,
+ 'm' => FirstLetter.m,
+ 'n' => FirstLetter.n,
+ 'o' => FirstLetter.o,
+ 'p' => FirstLetter.p,
+ 'q' => FirstLetter.q,
+ 'r' => FirstLetter.r,
+ 's' => FirstLetter.s,
+ 't' => FirstLetter.t,
+ 'u' => FirstLetter.u,
+ 'v' => FirstLetter.v,
+ 'w' => FirstLetter.w,
+ 'x' => FirstLetter.x,
+ 'y' => FirstLetter.y,
+ 'z' => FirstLetter.z,
+ else => break :outer,
+ };
+ const results = index.get(first_letter);
+
+ var prefilled_i: usize = 0;
+ for (results) |cur| {
+ if (cur.len == 0 or !strings.hasPrefix(cur, filter[1])) continue;
+ prefilled_completions[prefilled_i] = cur;
+ prefilled_i += 1;
+ if (prefilled_i >= prefilled_completions.len) break;
+ }
+ completions.commands = prefilled_completions[0..prefilled_i];
+ }
+ }
}
-
completions.print();
return;