Don't set error offset for $status

This would break the location of any prior errors without doing
anything of value.

E.g.

```fish
echo foo | exec grep # this exec is not allowed!

$status

somethingelse # The error might be found here!
```

Would apply the offset of `$status` to the offset of `exec`, locating
the error for `exec` somewhere after $status!
This commit is contained in:
Fabian Homborg 2021-09-28 17:15:33 +02:00
parent d619d79117
commit 6774a514fa
2 changed files with 12 additions and 1 deletions

View File

@ -1111,7 +1111,6 @@ static bool detect_errors_in_decorated_statement(const wcstring &buff_src,
// We see this surprisingly regularly.
const wcstring &com = dst.command.source(buff_src, storage);
if (com == L"$status") {
parse_error_offset_source_start(parse_errors, source_start);
errored =
append_syntax_error(parse_errors, source_start,
_(L"$status is not valid as a command. See `help conditions`"));

View File

@ -0,0 +1,12 @@
#RUN: %fish -C 'set -g fish %fish' %s
# A $status used as a command should not impact the location of other errors.
echo 'echo foo | exec grep # this exec is not allowed!
$status
# The error might be found here!' | $fish 2>| string replace -r '(.*)' '<$1>'
# CHECK: <fish: The 'exec' command can not be used in a pipeline>
# CHECK: <echo foo | exec grep # this exec is not allowed!>
# CHECK: < ^>