feat: colorize --list-languages output
This commit is contained in:
parent
72a40a6711
commit
595919c764
2 changed files with 22 additions and 11 deletions
|
@ -2,7 +2,7 @@ const std = @import("std");
|
|||
const syntax = @import("syntax");
|
||||
const builtin = @import("builtin");
|
||||
|
||||
pub fn list(allocator: std.mem.Allocator, writer: anytype) !void {
|
||||
pub fn list(allocator: std.mem.Allocator, writer: anytype, tty_config: std.io.tty.Config) !void {
|
||||
var max_language_len: usize = 0;
|
||||
var max_langserver_len: usize = 0;
|
||||
var max_formatter_len: usize = 0;
|
||||
|
@ -32,19 +32,19 @@ pub fn list(allocator: std.mem.Allocator, writer: anytype) !void {
|
|||
|
||||
for (syntax.FileType.file_types) |file_type| {
|
||||
try write_string(writer, file_type.name, max_language_len + 1);
|
||||
try write_segmented(writer, file_type.extensions, ",", max_extensions_len + 1);
|
||||
try write_segmented(writer, file_type.extensions, ",", max_extensions_len + 1, tty_config);
|
||||
|
||||
if (builtin.os.tag != .windows)
|
||||
if (file_type.language_server) |language_server|
|
||||
try write_checkmark(writer, try can_execute(allocator, bin_paths, language_server[0]));
|
||||
try write_checkmark(writer, try can_execute(allocator, bin_paths, language_server[0]), tty_config);
|
||||
|
||||
try write_segmented(writer, file_type.language_server, " ", max_langserver_len + 1);
|
||||
try write_segmented(writer, file_type.language_server, " ", max_langserver_len + 1, tty_config);
|
||||
|
||||
if (builtin.os.tag != .windows)
|
||||
if (file_type.formatter) |formatter|
|
||||
try write_checkmark(writer, try can_execute(allocator, bin_paths, formatter[0]));
|
||||
try write_checkmark(writer, try can_execute(allocator, bin_paths, formatter[0]), tty_config);
|
||||
|
||||
try write_segmented(writer, file_type.formatter, " ", max_formatter_len);
|
||||
try write_segmented(writer, file_type.formatter, " ", max_formatter_len, tty_config);
|
||||
try writer.writeAll("\n");
|
||||
}
|
||||
}
|
||||
|
@ -65,12 +65,19 @@ fn write_string(writer: anytype, string: []const u8, pad: usize) !void {
|
|||
try write_padding(writer, string.len, pad);
|
||||
}
|
||||
|
||||
fn write_checkmark(writer: anytype, value: bool) !void {
|
||||
if (value) try writer.writeAll("✓") else try writer.writeAll("✘");
|
||||
fn write_checkmark(writer: anytype, success: bool, tty_config: std.io.tty.Config) !void {
|
||||
try tty_config.setColor(writer, if (success) .green else .red);
|
||||
if (success) try writer.writeAll("✓") else try writer.writeAll("✘");
|
||||
try writer.writeAll(" ");
|
||||
}
|
||||
|
||||
fn write_segmented(writer: anytype, args_: ?[]const []const u8, sep: []const u8, pad: usize) !void {
|
||||
fn write_segmented(
|
||||
writer: anytype,
|
||||
args_: ?[]const []const u8,
|
||||
sep: []const u8,
|
||||
pad: usize,
|
||||
tty_config: std.io.tty.Config,
|
||||
) !void {
|
||||
const args = args_ orelse return;
|
||||
var len: usize = 0;
|
||||
var first: bool = true;
|
||||
|
@ -82,6 +89,7 @@ fn write_segmented(writer: anytype, args_: ?[]const []const u8, sep: []const u8,
|
|||
len += arg.len;
|
||||
try writer.writeAll(arg);
|
||||
}
|
||||
try tty_config.setColor(writer, .reset);
|
||||
try write_padding(writer, len, pad);
|
||||
}
|
||||
|
||||
|
|
|
@ -88,8 +88,11 @@ pub fn main() anyerror!void {
|
|||
if (res.args.version != 0)
|
||||
return std.io.getStdOut().writeAll(@embedFile("version_info"));
|
||||
|
||||
if (res.args.@"list-languages" != 0)
|
||||
return list_languages.list(a, std.io.getStdOut().writer());
|
||||
if (res.args.@"list-languages" != 0) {
|
||||
const stdout = std.io.getStdOut();
|
||||
const tty_config = std.io.tty.detectConfig(stdout);
|
||||
return list_languages.list(a, stdout.writer(), tty_config);
|
||||
}
|
||||
|
||||
if (builtin.os.tag != .windows)
|
||||
if (std.posix.getenv("JITDEBUG")) |_| thespian.install_debugger();
|
||||
|
|
Loading…
Add table
Reference in a new issue