Add support for fish_trace variable to trace execution

This adds support for `fish_trace`, a new variable intended to serve the
same purpose as `set -x` as in bash. Setting this variable to anything
non-empty causes execution to be traced. In the future we may give more
specific meaning to the value of the variable.

The user's prompt is not traced unless you run it explicitly. Events are
also not traced because it is noisy; however autoloading is.

Fixes #3427
This commit is contained in:
ridiculousfish
2019-10-18 18:08:22 -07:00
parent dd1f8489a7
commit a7f1d2c0c7
15 changed files with 189 additions and 6 deletions

72
tests/checks/trace.fish Normal file
View File

@@ -0,0 +1,72 @@
# RUN: %fish %s
echo untraced
# CHECK: untraced
set fish_trace 1
for i in 1 2 3
echo $i
end
# CHECK: 1
# CHECK: 2
# CHECK: 3
# CHECKERR: + for 1 2 3
# CHECKERR: ++ echo 1
# CHECKERR: ++ echo 2
# CHECKERR: ++ echo 3
# CHECKERR: + end for
while true
and true
echo inside
break
end
# CHECK: inside
# CHECKERR: + while
# CHECKERR: + true
# CHECKERR: + true
# CHECKERR: ++ echo inside
# CHECKERR: ++ break
# CHECKERR: + end while
while true && true
echo inside2
break
end
# CHECK: inside2
# CHECKERR: + while
# CHECKERR: + true
# CHECKERR: + true
# CHECKERR: ++ echo inside2
# CHECKERR: ++ break
# CHECKERR: + end while
if true && false
else if false || true
echo inside3
else if will_not_execute
end
# CHECK: inside3
# CHECKERR: + if
# CHECKERR: + true
# CHECKERR: + false
# CHECKERR: + else if
# CHECKERR: + false
# CHECKERR: + true
# CHECKERR: ++ echo inside3
# CHECKERR: + end if
set -e fish_trace
# CHECKERR: + set -e fish_trace
echo untraced
# CHECK: untraced