mirror of
https://github.com/nushell/nushell.git
synced 2025-08-10 00:48:59 +02:00
Refactor and fix Config
<->Value
mechanism (#10896)
# Description Our config exists both as a `Config` struct for internal consumption and as a `Value`. The latter is exposed through `$env.config` and can be both set and read. Thus we have a complex bug-prone mechanism, that reads a `Value` and then tries to plug anything where the value is unrepresentable in `Config` with the correct state from `Config`. The parsing involves therefore mutation of the `Value` in a nested `Record` structure. Previously this was wholy done manually, with indices. To enable deletion for example, things had to be iterated over from the back. Also things were indexed in a bunch of places. This was hard to read and an invitation for bugs. With #10876 we can now use `Record::retain_mut` to traverse the records, modify anything that needs fixing, and drop invalid fields. # Parts: - Error messages now consistently use the correct spans pointing to the problematic value and the paths displayed in some messages are also aligned with the keys used for lookup. - Reconstruction of values has been fixed for: - `table.padding` - `buffer_editor` - `hooks.command_not_found` - `datetime_format` (partial solution) - Fix validation of `table.padding` input so value is not set (and underflows `usize` causing `table` to run forever with negative values) - New proper types for settings. Fully validated enums instead of strings: - `config.edit_mode` -> `EditMode` - Don't fall back to vi-mode on invalid string - `config.table.mode` -> `TableMode` - there is still a fall back to `rounded` if given an invalid `TableMode` as argument to the `nu` binary - `config.completions.algorithm` -> `CompletionAlgorithm` - `config.error_style` -> `ErrorStyle` - don't implicitly fall back to `fancy` when given an invalid value. - This should also shrink the size of `Config` as instead of 4x24 bytes those fields now need only 4x1 bytes in `Config` - Completely removed macros relying on the scope of `Value::into_config` so we can break it up into smaller parts in the future. - Factored everything into smaller files with the types and helpers for particular topics. - `NuCursorShape` now explicitly expresses the `Inherit` setting. conversion to option only happens at the interface to `reedline`
This commit is contained in:
committed by
GitHub
parent
edbf3aaccb
commit
86cd387439
@ -1,6 +1,6 @@
|
||||
use nu_color_config::{Alignment, StyleComputer, TextStyle};
|
||||
use nu_protocol::TrimStrategy;
|
||||
use nu_protocol::{Config, FooterMode, ShellError, Span, Value};
|
||||
use nu_protocol::{TableMode, TrimStrategy};
|
||||
|
||||
use crate::{
|
||||
clean_charset, colorize_space_str, string_wrap, NuTableConfig, TableOutput, TableTheme,
|
||||
@ -174,24 +174,23 @@ fn is_cfg_trim_keep_words(config: &Config) -> bool {
|
||||
}
|
||||
|
||||
pub fn load_theme_from_config(config: &Config) -> TableTheme {
|
||||
match config.table_mode.as_str() {
|
||||
"basic" => TableTheme::basic(),
|
||||
"thin" => TableTheme::thin(),
|
||||
"light" => TableTheme::light(),
|
||||
"compact" => TableTheme::compact(),
|
||||
"with_love" => TableTheme::with_love(),
|
||||
"compact_double" => TableTheme::compact_double(),
|
||||
"rounded" => TableTheme::rounded(),
|
||||
"reinforced" => TableTheme::reinforced(),
|
||||
"heavy" => TableTheme::heavy(),
|
||||
"none" => TableTheme::none(),
|
||||
"psql" => TableTheme::psql(),
|
||||
"markdown" => TableTheme::markdown(),
|
||||
"dots" => TableTheme::dots(),
|
||||
"restructured" => TableTheme::restructured(),
|
||||
"ascii_rounded" => TableTheme::ascii_rounded(),
|
||||
"basic_compact" => TableTheme::basic_compact(),
|
||||
_ => TableTheme::rounded(),
|
||||
match config.table_mode {
|
||||
TableMode::Basic => TableTheme::basic(),
|
||||
TableMode::Thin => TableTheme::thin(),
|
||||
TableMode::Light => TableTheme::light(),
|
||||
TableMode::Compact => TableTheme::compact(),
|
||||
TableMode::WithLove => TableTheme::with_love(),
|
||||
TableMode::CompactDouble => TableTheme::compact_double(),
|
||||
TableMode::Rounded => TableTheme::rounded(),
|
||||
TableMode::Reinforced => TableTheme::reinforced(),
|
||||
TableMode::Heavy => TableTheme::heavy(),
|
||||
TableMode::None => TableTheme::none(),
|
||||
TableMode::Psql => TableTheme::psql(),
|
||||
TableMode::Markdown => TableTheme::markdown(),
|
||||
TableMode::Dots => TableTheme::dots(),
|
||||
TableMode::Restructured => TableTheme::restructured(),
|
||||
TableMode::AsciiRounded => TableTheme::ascii_rounded(),
|
||||
TableMode::BasicCompact => TableTheme::basic_compact(),
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user