nushell/crates/nu-protocol/src
Stefan Holderbach 86cd387439
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`
2023-11-08 20:31:30 +01:00
..
ast Allow operator in constants (#10212) 2023-09-05 16:35:58 +02:00
config Refactor and fix Config<->Value mechanism (#10896) 2023-11-08 20:31:30 +01:00
engine Refactor and fix Config<->Value mechanism (#10896) 2023-11-08 20:31:30 +01:00
value Use Vec for Closure captures (#10940) 2023-11-08 00:43:28 +01:00
alias.rs Refactor scope commands (#10023) 2023-08-17 11:58:38 +03:00
cli_error.rs Refactor and fix Config<->Value mechanism (#10896) 2023-11-08 20:31:30 +01:00
did_you_mean.rs Suggest existing variables on not found (#8902) 2023-05-02 18:17:14 +03:00
eval_const.rs Use Record APIs in nu-protocol/nu-engine (#10917) 2023-11-01 23:19:58 +01:00
example.rs remove unused imports: Deserialize, Serialize compiler warning for nu-protocol/src/example.rs (#8514) 2023-03-18 11:45:12 -07:00
exportable.rs Module: support defining const and use const variables inside of function (#9773) 2023-08-01 07:09:52 +08:00
id.rs Add virtual path abstraction layer (#9245) 2023-05-23 23:48:50 +03:00
lev_distance.rs Suggest existing variables on not found (#8902) 2023-05-02 18:17:14 +03:00
lib.rs remove the $nothing variable (#10567) 2023-10-19 18:41:38 +02:00
module.rs Create Record type (#10103) 2023-08-25 07:50:29 +12:00
parse_error.rs better help message for MissingPositional error (#10949) 2023-11-04 12:24:21 -05:00
pipeline_data.rs Finish removing profile command and related data (#10807) 2023-10-22 14:06:53 +03:00
plugin_signature.rs Rename main to script name when running scripts (#9948) 2023-08-12 05:58:49 +12:00
shell_error.rs Convert ShellError::DatetimeParseError to named fields (#10991) 2023-11-08 13:04:02 +01:00
signature.rs Rename misused "deprecation" to removal (#10000) 2023-08-15 07:17:31 +12:00
span.rs Use variable names directly in the format strings (#7906) 2023-01-29 19:37:54 -06:00
syntax_shape.rs Rename SyntaxShape::Custom to CompleterWrapper (#10548) 2023-09-29 19:22:58 +02:00
ty.rs change Type::Float => SyntaxShape::Number to SyntaxShape::Float (#10689) 2023-10-11 12:27:09 -05:00
util.rs move BufferedReader out of nu-command (#7697) 2023-01-06 15:22:17 -08:00
variable.rs Fix broken constants in scopes (#9679) 2023-07-14 00:02:05 +03:00