mirror of
https://github.com/fish-shell/fish-shell.git
synced 2026-04-28 16:01:15 -03:00
Our error marking code: ``` function foobar ^~~~~~~^ ``` runs fish_wcswidth to figure out how wide the squiggly line should be. That function returns -1 when it runs into a codepoint that wcwidth returns -1 for, so the marking would stop at a single `^`. In some cases, this happens because the error range includes a newline. Since we already find the end of the line, and can only mark one line, we clamp the squiggles at the end of that line. This improves some markings. See discussion in #12171
85 lines
1.7 KiB
Fish
85 lines
1.7 KiB
Fish
# RUN: %fish %s
|
|
# Regression test for issue #4443
|
|
eval set -l previously_undefined foo
|
|
echo $previously_undefined
|
|
# CHECK: foo
|
|
|
|
# Test redirection
|
|
eval "echo you can\\'t see this 1>&2" 2>/dev/null
|
|
|
|
# Test return statuses
|
|
false
|
|
eval true
|
|
echo $status
|
|
# CHECK: 0
|
|
false
|
|
eval false
|
|
echo $status
|
|
# CHECK: 1
|
|
|
|
# Test return status in case of parsing error
|
|
false
|
|
eval "("
|
|
echo $status
|
|
# CHECK: 123
|
|
# CHECKERR: {{.*}}checks/eval.fish (line {{\d+}}): Unexpected end of string, expecting ')'
|
|
# CHECKERR: (
|
|
# CHECKERR: ^
|
|
false
|
|
eval '""'
|
|
echo $status
|
|
# CHECK: 123
|
|
# CHECKERR: {{.*}}checks/eval.fish (line {{\d+}}): The expanded command was empty.
|
|
# CHECKERR: ""
|
|
# CHECKERR: ^^
|
|
|
|
function empty
|
|
end
|
|
|
|
# Regression tests for issue #5692
|
|
false
|
|
eval
|
|
echo blank eval: $status # 0
|
|
# CHECK: blank eval: 0
|
|
|
|
false
|
|
eval ""
|
|
echo empty arg eval: $status # 0
|
|
# CHECK: empty arg eval: 0
|
|
|
|
false
|
|
eval empty
|
|
echo empty function eval $status # 0
|
|
# CHECK: empty function eval 0
|
|
|
|
false
|
|
eval "begin; end;"
|
|
echo empty block eval: $status # 0
|
|
# CHECK: empty block eval: 0
|
|
|
|
source /banana/\t/foo
|
|
# CHECKERR: source: Error encountered while sourcing file '/banana/\t/foo':
|
|
# CHECKERR: source: No such file or directory
|
|
|
|
# See that eval can't be defined as a function
|
|
function eval
|
|
builtin eval $argv
|
|
end
|
|
# CHECKERR: {{.*}}checks/eval.fish (line {{\d+}}): function: eval: cannot use reserved keyword as function name
|
|
# CHECKERR: function eval
|
|
# CHECKERR: ^~~~~~~~~~~~^
|
|
|
|
|
|
function evil --no-scope-shadowing
|
|
eval $argv
|
|
end
|
|
|
|
# And this is why we do this: `eval` *can't* be cleanly shadowed with a function,
|
|
# because that would always introduce a new block or at the very least clobber $argv.
|
|
eval set -l argv this works
|
|
echo $argv
|
|
# CHECK: this works
|
|
evil set -l argv this does not
|
|
echo $argv
|
|
# CHECK: this works
|