nushell/crates/nu_plugin_textview/src/config.rs
JT 383e874166
Fix a bunch of future clippy warnings (#3586)
* Fix a bunch of future clippy warnings

* Fix a bunch of future clippy warnings
2021-06-10 07:08:12 +12:00

112 lines
4.2 KiB
Rust

use nu_protocol::Value;
pub struct Config {
pub term_width: usize,
pub tab_width: u64,
pub colored_output: bool,
pub true_color: bool,
pub header: bool,
pub line_numbers: bool,
pub grid: bool,
pub vcs_modification_markers: bool,
pub snip: bool,
pub wrapping_mode: bat::WrappingMode,
pub use_italics: bool,
pub paging_mode: bat::PagingMode,
pub pager: String,
pub line_ranges: bat::line_range::LineRanges,
// TODO: Not configurable
#[allow(unused)]
highlight_range: String,
// TODO: Not configurable
pub highlight_range_from: u64,
// TODO: Not configurable
pub highlight_range_to: u64,
pub theme: String,
}
impl From<&Value> for Config {
fn from(value: &Value) -> Self {
let mut config = Config::default();
for (idx, entry) in value.row_entries() {
match idx.as_ref() {
"term_width" => {
config.term_width = entry.as_u64().unwrap_or(config.term_width as u64) as usize;
}
"tab_width" => {
config.tab_width = entry.as_u64().unwrap_or(4_u64);
}
"colored_output" => config.colored_output = entry.as_bool().unwrap_or(true),
"true_color" => config.true_color = entry.as_bool().unwrap_or(true),
"header" => config.header = entry.as_bool().unwrap_or(true),
"line_numbers" => config.line_numbers = entry.as_bool().unwrap_or(true),
"grid" => config.grid = entry.as_bool().unwrap_or(true),
"vcs_modification_markers" => {
config.vcs_modification_markers = entry.as_bool().unwrap_or(true)
}
"snip" => config.snip = entry.as_bool().unwrap_or(true),
"wrapping_mode" => {
config.wrapping_mode = match entry.as_string() {
Ok(s) if s.to_lowercase() == "nowrapping" => {
bat::WrappingMode::NoWrapping(true)
}
Ok(s) if s.to_lowercase() == "character" => bat::WrappingMode::Character,
_ => bat::WrappingMode::NoWrapping(true),
}
}
"use_italics" => config.use_italics = entry.as_bool().unwrap_or(true),
"paging_mode" => {
config.paging_mode = match entry.as_string() {
Ok(s) if s.to_lowercase() == "always" => bat::PagingMode::Always,
Ok(s) if s.to_lowercase() == "never" => bat::PagingMode::Never,
Ok(s) if s.to_lowercase() == "quitifonescreen" => {
bat::PagingMode::QuitIfOneScreen
}
_ => bat::PagingMode::QuitIfOneScreen,
}
}
"pager" => config.pager = entry.as_string().unwrap_or_else(|_| "less".to_string()),
// TODO: not real sure what to do with this
"line_ranges" => config.line_ranges = bat::line_range::LineRanges::all(),
"highlight_range" => config.highlight_range = "0,0".into(),
"theme" => {
config.theme = value
.as_string()
.unwrap_or_else(|_| "OneDarkHalf".to_string())
}
_ => (),
}
}
config
}
}
impl Default for Config {
fn default() -> Self {
let (term_width, _) = term_size::dimensions().unwrap_or((80, 20));
Self {
term_width,
tab_width: 4,
colored_output: true,
true_color: true,
header: true,
line_numbers: true,
grid: true,
vcs_modification_markers: true,
snip: true,
wrapping_mode: bat::WrappingMode::NoWrapping(true),
use_italics: true,
paging_mode: bat::PagingMode::QuitIfOneScreen,
pager: "less".into(),
line_ranges: bat::line_range::LineRanges::all(),
highlight_range: "0.0".into(),
highlight_range_from: 0,
highlight_range_to: 0,
theme: "OneHalfDark".into(),
}
}
}