nushell/crates
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
..
nu_plugin_custom_values Bump version to 0.86.1 (#10755) 2023-10-18 13:00:51 -05:00
nu_plugin_example Use Record's public API in a bunch of places (#10927) 2023-11-08 14:24:00 +01:00
nu_plugin_formats Convert ShellError::UnsupportedInput to named fields (#10971) 2023-11-07 23:25:32 +01:00
nu_plugin_gstat Bump version to 0.86.1 (#10755) 2023-10-18 13:00:51 -05:00
nu_plugin_inc Bump version to 0.86.1 (#10755) 2023-10-18 13:00:51 -05:00
nu_plugin_python remove vectorize_over_list from python plugin (#9905) 2023-08-03 16:46:48 +02:00
nu_plugin_query Bump scraper from 0.17.1 to 0.18.1 (#10879) 2023-10-30 11:53:26 +00:00
nu-cli Refactor and fix Config<->Value mechanism (#10896) 2023-11-08 20:31:30 +01:00
nu-cmd-base Use Record's public API in a bunch of places (#10927) 2023-11-08 14:24:00 +01:00
nu-cmd-dataframe Convert ShellError::UnsupportedInput to named fields (#10971) 2023-11-07 23:25:32 +01:00
nu-cmd-extra Use Vec for Closure captures (#10940) 2023-11-08 00:43:28 +01:00
nu-cmd-lang Use Vec for Closure captures (#10940) 2023-11-08 00:43:28 +01:00
nu-color-config Use Vec for Closure captures (#10940) 2023-11-08 00:43:28 +01:00
nu-command Use Record's public API in a bunch of places (#10927) 2023-11-08 14:24:00 +01:00
nu-engine Use Record's public API in a bunch of places (#10927) 2023-11-08 14:24:00 +01:00
nu-explore Use Record's public API in a bunch of places (#10927) 2023-11-08 14:24:00 +01:00
nu-glob Allow filesystem commands to access files with glob metachars in name (#10694) 2023-10-18 13:31:15 -05:00
nu-json Bump version to 0.86.1 (#10755) 2023-10-18 13:00:51 -05:00
nu-lsp Integrated Language Server (#10723) 2023-11-02 10:18:57 -05:00
nu-parser redirect should have a target (#10835) 2023-10-25 11:19:35 +02:00
nu-path Bump version to 0.86.1 (#10755) 2023-10-18 13:00:51 -05:00
nu-plugin Show plugin extra usage and search terms (#10952) 2023-11-04 15:12:58 -05:00
nu-pretty-hex Bump version to 0.86.1 (#10755) 2023-10-18 13:00:51 -05:00
nu-protocol Refactor and fix Config<->Value mechanism (#10896) 2023-11-08 20:31:30 +01:00
nu-std Refactor error make (#10923) 2023-11-03 10:09:33 -05:00
nu-system Bump version to 0.86.1 (#10755) 2023-10-18 13:00:51 -05:00
nu-table Refactor and fix Config<->Value mechanism (#10896) 2023-11-08 20:31:30 +01:00
nu-term-grid Bump version to 0.86.1 (#10755) 2023-10-18 13:00:51 -05:00
nu-test-support Bump version to 0.86.1 (#10755) 2023-10-18 13:00:51 -05:00
nu-utils Add "shape_keyword" to default config (#10922) 2023-11-02 19:59:17 +01:00
README.md Remove old nushell/merge engine-q 2022-02-07 14:54:06 -05:00

Nushell core libraries and plugins

These sub-crates form both the foundation for Nu and a set of plugins which extend Nu with additional functionality.

Foundational libraries are split into two kinds of crates:

  • Core crates - those crates that work together to build the Nushell language engine
  • Support crates - a set of crates that support the engine with additional features like JSON support, ANSI support, and more.

Plugins are likewise also split into two types:

  • Core plugins - plugins that provide part of the default experience of Nu, including access to the system properties, processes, and web-connectivity features.
  • Extra plugins - these plugins run a wide range of different capabilities like working with different file types, charting, viewing binary data, and more.