nushell/crates
Antoine Stevan 7ac5a01e2f
deprecate glob --not in favor of glob --exclude (#10827)
# Description
looking at the [Wax documentation about
`wax::Walk.not`](https://docs.rs/wax/latest/wax/struct.Walk.html#examples),
especially
> therefore does not read directory trees from the file system when a
directory matches an [exhaustive glob
expression](https://docs.rs/wax/latest/wax/trait.Pattern.html#tymethod.is_exhaustive)

> **Important**
> in the following of this PR description, i talk about *pruning* and a
`--prune` option, but this has been changed to *exclusion* and
`--exclude` after a discussion with @fdncred.

this looks like a *pruning* operation to me, right? 😮 
i wanted to make the `glob` option `--not` clearer about that, because
>   -n, --not <List(String)> - Patterns to exclude from the results

from `help glob` is not very explicit about whether the search is pruned
when entering a directory matching a pattern in `--not` or just removing
it from the output 😕

## changelog
this PR proposes to rename the `glob --not` option to `glob --prune` and
make it's documentation more explicit 😋

## benchmarking
to support the *pruning* behaviour put forward above, i've run a
benchmark
1. define two closures to compare the behaviour between removing
patterns manually or using `--not`
```nushell
let where = {
    [.*/\.local/.*, .*/documents/.*, .*/\.config/.*]
        | reduce --fold (glob **) {|pat, acc| $acc | where $it !~ $pat}
        | length
}
```
```nushell
let not = { glob ** --not [**/.local/**, **/documents/**, **/.config/**] | length }
```
2. run the two to make sure they give similar results
```nushell
> do $where
33424
```
```nushell
> do $not
33420
```
👌 
3. measure the performance
```nushell
use std bench
```
```nushell
> bench --verbose --pretty --rounds 25 $not
44ms 52µs 285ns +/- 977µs 571ns
```
```nushell
> bench --verbose --pretty --rounds 5 $where
1sec 250ms 187µs 99ns +/- 8ms 538µs 57ns
```

👉 we can see that the results are (almost) the same but
`--not` is much faster, looks like pruning 😋

# User-Facing Changes
- `--not` will give a warning message but still work
- `--prune` will work just as `--not` without warning and with a more
explicit doc
- `--prune` and `--not` at the same time will give an error

# Tests + Formatting
this PR fixes the examples of `glob` using the `--not` option.

# After Submitting
prepare the removal PR and mention in release notes.
2023-10-25 17:11:57 +02:00
..
nu-cli Bump uuid from 1.4.1 to 1.5.0 (#10810) 2023-10-23 14:14:08 +08:00
nu-cmd-base Allow filesystem commands to access files with glob metachars in name (#10694) 2023-10-18 13:31:15 -05:00
nu-cmd-dataframe Dataframe support for small int types (#10828) 2023-10-24 21:25:21 -05:00
nu-cmd-extra Finish removing profile command and related data (#10807) 2023-10-22 14:06:53 +03:00
nu-cmd-lang Fix describe -d for lazy records (#10836) 2023-10-25 08:04:37 -05:00
nu-color-config Bump version to 0.86.1 (#10755) 2023-10-18 13:00:51 -05:00
nu-command deprecate glob --not in favor of glob --exclude (#10827) 2023-10-25 17:11:57 +02:00
nu-engine redirection: fix internal commands error with o+e> redirection (#10816) 2023-10-25 16:35:51 +02:00
nu-explore Finish removing profile command and related data (#10807) 2023-10-22 14:06:53 +03: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-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 Bump version to 0.86.1 (#10755) 2023-10-18 13:00:51 -05:00
nu-pretty-hex Bump version to 0.86.1 (#10755) 2023-10-18 13:00:51 -05:00
nu-protocol Support pattern matching null literals (#10829) 2023-10-25 06:30:45 +08:00
nu-std expand paths and split PATH in std path add (#10710) 2023-10-25 16:43:27 +02:00
nu-system Bump version to 0.86.1 (#10755) 2023-10-18 13:00:51 -05:00
nu-table Bump version to 0.86.1 (#10755) 2023-10-18 13:00:51 -05: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 sync $env.config.filesize.metric (#10277) 2023-10-25 16:42:24 +02:00
nu_plugin_custom_values Bump version to 0.86.1 (#10755) 2023-10-18 13:00:51 -05:00
nu_plugin_example Bump version to 0.86.1 (#10755) 2023-10-18 13:00:51 -05:00
nu_plugin_formats Bump version to 0.86.1 (#10755) 2023-10-18 13:00:51 -05: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 Add long options for misc and network (#10753) 2023-10-19 18:16:44 +02: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.