-
Notifications
You must be signed in to change notification settings - Fork 263
/
ls.rs
83 lines (72 loc) · 2.1 KB
/
ls.rs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
use console::style;
use eyre::Result;
use itertools::Itertools;
use tabled::settings::object::Columns;
use tabled::settings::{Modify, Width};
use tabled::Tabled;
use crate::config::config_file::ConfigFile;
use crate::config::CONFIG;
use crate::file::display_path;
use crate::ui::table;
/// List config files currently in use
#[derive(Debug, clap::Args)]
#[clap(verbatim_doc_comment, after_long_help = AFTER_LONG_HELP)]
pub struct ConfigLs {
/// Do not print table header
#[clap(long, alias = "no-headers", verbatim_doc_comment)]
pub no_header: bool,
}
impl ConfigLs {
pub fn run(self) -> Result<()> {
let rows = CONFIG
.config_files
.values()
.map(|cf| cf.as_ref().into())
.collect::<Vec<Row>>();
let mut table = tabled::Table::new(rows);
table::default_style(&mut table, self.no_header);
table.with(Modify::new(Columns::last()).with(Width::truncate(40).suffix("…")));
miseprintln!("{table}");
Ok(())
}
}
fn format_plugin_cell(s: String) -> String {
match s.is_empty() {
true => style("(none)").italic().dim().to_string(),
false => style(s).dim().to_string(),
}
}
#[derive(Tabled)]
#[tabled(rename_all = "PascalCase")]
struct Row {
path: String,
plugins: String,
}
impl From<&dyn ConfigFile> for Row {
fn from(cf: &dyn ConfigFile) -> Self {
let path = display_path(cf.get_path());
let ts = cf.to_tool_request_set().unwrap();
let plugins = ts.list_plugins().into_iter().join(", ");
let plugins = format_plugin_cell(plugins);
Self { path, plugins }
}
}
// TODO: fill this out
static AFTER_LONG_HELP: &str = color_print::cstr!(
r#"<bold><underline>Examples:</underline></bold>
$ <bold>mise config ls</bold>
"#
);
#[cfg(test)]
mod tests {
use crate::test::reset;
#[test]
fn test_config_ls() {
reset();
assert_cli_snapshot!("cfg", "--no-headers", @r###"
~/cwd/.test-tool-versions tiny
~/.test-tool-versions tiny, dummy
~/config/config.toml (none)
"###);
}
}