diff options
author | 2021-12-19 23:30:25 -0800 | |
---|---|---|
committer | 2021-12-19 23:30:25 -0800 | |
commit | a0551a9b8bbe90569cb011ae299878797d3ad128 (patch) | |
tree | caca0b865672a3b591b40e6a008841d2f3a7cfee /src/cli.zig | |
parent | be03fc273a487ac402f19ad897778d74b6d72963 (diff) | |
download | bun-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.zig | 52 |
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; |