forked from extern/nushell
ab480856a5
# Description Lint: `clippy::uninlined_format_args` More readable in most situations. (May be slightly confusing for modifier format strings https://doc.rust-lang.org/std/fmt/index.html#formatting-parameters) Alternative to #7865 # User-Facing Changes None intended # Tests + Formatting (Ran `cargo +stable clippy --fix --workspace -- -A clippy::all -D clippy::uninlined_format_args` to achieve this. Depends on Rust `1.67`)
106 lines
2.5 KiB
Rust
106 lines
2.5 KiB
Rust
use nu_color_config::TextStyle;
|
|
use nu_table::{Table, TableConfig, TableTheme};
|
|
use tabled::papergrid::records::{cell_info::CellInfo, tcell::TCell};
|
|
|
|
fn main() {
|
|
let args: Vec<_> = std::env::args().collect();
|
|
let mut width = 0;
|
|
|
|
if args.len() > 1 {
|
|
// Width in terminal characters
|
|
width = args[1].parse::<usize>().expect("Need a width in columns");
|
|
}
|
|
|
|
if width < 4 {
|
|
println!("Width must be greater than or equal to 4, setting width to 80");
|
|
width = 80;
|
|
}
|
|
|
|
// The mocked up table data
|
|
let (table_headers, row_data) = make_table_data();
|
|
|
|
// The table headers
|
|
let headers = vec_of_str_to_vec_of_styledstr(&table_headers, true);
|
|
|
|
// The table rows
|
|
let rows = vec_of_str_to_vec_of_styledstr(&row_data, false);
|
|
|
|
// The table itself
|
|
let count_cols = std::cmp::max(rows.len(), headers.len());
|
|
let mut rows = vec![rows; 3];
|
|
rows.insert(0, headers);
|
|
|
|
let theme = TableTheme::rounded();
|
|
let table_cfg = TableConfig::new(theme, true, false, false);
|
|
|
|
let table = Table::new(rows, (3, count_cols));
|
|
|
|
// Capture the table as a string
|
|
let output_table = table
|
|
.draw(table_cfg, width)
|
|
.unwrap_or_else(|| format!("Couldn't fit table into {width} columns!"));
|
|
|
|
// Draw the table
|
|
println!("{output_table}")
|
|
}
|
|
|
|
fn make_table_data() -> (Vec<&'static str>, Vec<&'static str>) {
|
|
let table_headers = vec![
|
|
"category",
|
|
"description",
|
|
"emoji",
|
|
"ios_version",
|
|
"unicode_version",
|
|
"aliases",
|
|
"tags",
|
|
"category2",
|
|
"description2",
|
|
"emoji2",
|
|
"ios_version2",
|
|
"unicode_version2",
|
|
"aliases2",
|
|
"tags2",
|
|
];
|
|
|
|
let row_data = vec![
|
|
"Smileys & Emotion",
|
|
"grinning face",
|
|
"😀",
|
|
"6",
|
|
"6.1",
|
|
"grinning",
|
|
"smile",
|
|
"Smileys & Emotion",
|
|
"grinning face",
|
|
"😀",
|
|
"6",
|
|
"6.1",
|
|
"grinning",
|
|
"smile",
|
|
];
|
|
|
|
(table_headers, row_data)
|
|
}
|
|
|
|
fn vec_of_str_to_vec_of_styledstr(
|
|
data: &[&str],
|
|
is_header: bool,
|
|
) -> Vec<TCell<CellInfo<'static>, TextStyle>> {
|
|
let mut v = vec![];
|
|
|
|
for x in data {
|
|
if is_header {
|
|
v.push(Table::create_cell(
|
|
String::from(*x),
|
|
TextStyle::default_header(),
|
|
))
|
|
} else {
|
|
v.push(Table::create_cell(
|
|
String::from(*x),
|
|
TextStyle::basic_left(),
|
|
))
|
|
}
|
|
}
|
|
v
|
|
}
|