nushell/crates
Christopher Durham 0f600bc3f5
Improve case insensitivity consistency (#10884)
# Description

Add an extension trait `IgnoreCaseExt` to nu_utils which adds some case
insensitivity helpers, and use them throughout nu to improve the
handling of case insensitivity. Proper case folding is done via unicase,
which is already a dependency via mime_guess from nu-command.

In actuality a lot of code still does `to_lowercase`, because unicase
only provides immediate comparison and doesn't expose a `to_folded_case`
yet. And since we do a lot of `contains`/`starts_with`/`ends_with`, it's
not sufficient to just have `eq_ignore_case`. But if we get access in
the future, this makes us ready to use it with a change in one place.

Plus, it's clearer what the purpose is at the call site to call
`to_folded_case` instead of `to_lowercase` if it's exclusively for the
purpose of case insensitive comparison, even if it just does
`to_lowercase` still.

# User-Facing Changes

- Some commands that were supposed to be case insensitive remained only
insensitive to ASCII case (a-z), and now are case insensitive w.r.t.
non-ASCII characters as well.

# Tests + Formatting

- 🟢 `toolkit fmt`
- 🟢 `toolkit clippy`
- 🟢 `toolkit test`
- 🟢 `toolkit test stdlib`

---------

Co-authored-by: Stefan Holderbach <sholderbach@users.noreply.github.com>
2023-11-08 23:58:54 +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 Improve case insensitivity consistency (#10884) 2023-11-08 23:58:54 +01:00
nu-cmd-base Use Record::get instead of Value functions (#10925) 2023-11-08 21:47:37 +01:00
nu-cmd-dataframe Improve case insensitivity consistency (#10884) 2023-11-08 23:58:54 +01:00
nu-cmd-extra Improve case insensitivity consistency (#10884) 2023-11-08 23:58:54 +01:00
nu-cmd-lang Use Record::get instead of Value functions (#10925) 2023-11-08 21:47:37 +01:00
nu-color-config Improve case insensitivity consistency (#10884) 2023-11-08 23:58:54 +01:00
nu-command Improve case insensitivity consistency (#10884) 2023-11-08 23:58:54 +01:00
nu-engine Refactor env conversion, yeet Value::follow_cell_path_not... (#10926) 2023-11-08 23:57:24 +01:00
nu-explore Use Record::get instead of Value functions (#10925) 2023-11-08 21:47:37 +01:00
nu-glob Improve case insensitivity consistency (#10884) 2023-11-08 23:58:54 +01: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 Improve case insensitivity consistency (#10884) 2023-11-08 23:58:54 +01: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 Improve case insensitivity consistency (#10884) 2023-11-08 23:58:54 +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 Use Record::get instead of Value functions (#10925) 2023-11-08 21:47:37 +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 Improve case insensitivity consistency (#10884) 2023-11-08 23:58:54 +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.