Improve error when regex rejects pattern. Resolution of #8037 (#8050)

# Description

Improve error when `str replace <pattern>` detects a problem with
<pattern>.

# User-Facing Changes

New "Incorrect value" error:
```
〉 'C:\Users\kubouch' | str replace 'C:\Users' 'foo'
Error: nu:🐚:incorrect_value (link)

  × Incorrect value.
   ╭─[entry #1:1:1]
 1 │  'C:\Users\kubouch' | str replace 'C:\Users' 'foo'
   ·                                   ─────┬────
   ·                                        ╰── Regex error: Parsing error at position 4: Invalid hex escape
   ╰────
```

We could fruitfully replace some of the current uses of
`ShellError::UnsupportedInput` with this error. 'Incorrect value' is
different from 'wrong type'

# Tests + Formatting

Don't forget to add tests that cover your changes.
* none added / changed.

Make sure you've run and fixed any issues with these commands:

- [x] `cargo fmt --all -- --check` to check standard code formatting
(`cargo fmt --all` applies these changes)
- [x] `cargo clippy --workspace -- -D warnings -D clippy::unwrap_used -A
clippy::needless_collect` to check that you're using the standard code
style
- [x] `cargo test --workspace` to check that all tests pass

# After Submitting

If your PR had any user-facing changes, update [the
documentation](https://github.com/nushell/nushell.github.io) after the
PR is merged, if necessary. This will help us keep the docs up to date.
This commit is contained in:
Bob Hyman
2023-02-12 08:25:40 -05:00
committed by GitHub
parent 1096e653b0
commit 2894668b3e
3 changed files with 30 additions and 6 deletions

View File

@ -199,6 +199,26 @@ fn find_and_replaces_without_passing_field() {
})
}
#[test]
fn regex_error_in_pattern() {
Playground::setup("str_test_8", |dirs, _sandbox| {
let actual = nu!(
cwd: dirs.test(), pipeline(
r#"
'source string'
| str replace 'source \Ufoo' "destination"
"#
));
let err = actual.err;
let expecting_str = "Incorrect value";
assert!(
err.contains(expecting_str),
"Error should contain '{expecting_str}', but was: {err}"
);
})
}
#[test]
fn substrings_the_input() {
Playground::setup("str_test_8", |dirs, sandbox| {