Improve documentation and error reporting for elseif.

This commit is contained in:
ridiculousfish
2012-09-01 02:14:13 -07:00
parent cc1395797e
commit de5223db66
3 changed files with 19 additions and 10 deletions

View File

@@ -1,7 +1,7 @@
\section if if - conditionally execute a command \section if if - conditionally execute a command
\subsection if-synopsis Synopsis \subsection if-synopsis Synopsis
<tt>if CONDITION; COMMANDS_TRUE...; [else; COMMANDS_FALSE...;] end</tt> <tt>if CONDITION; COMMANDS_TRUE...; [elseif CONDITION2; COMMANDS_TRUE2...;] [else; COMMANDS_FALSE...;] end</tt>
\subsection if-description Description \subsection if-description Description
@@ -24,10 +24,13 @@ variable.
<pre> <pre>
if test -f foo.txt if test -f foo.txt
echo foo.txt exists echo foo.txt exists
elseif test -f bar.txt
echo bar.txt exists
else else
echo foo.txt does not exist echo foo.txt and bar.txt do not exist
end end
</pre> </pre>will print <tt>foo.txt exists</tt> if the file foo.txt
will print <tt>foo.txt exists</tt> if the file foo.txt
exists and is a regular file, otherwise it will print exists and is a regular file, otherwise it will print
<tt>foo.txt does not exist</tt>. <tt>bar.txt exists</tt> if the file bar.txt exists
and is a regular file, otherwise it will print
<tt>foo.txt and bar.txt do not exist</tt>.

View File

@@ -146,7 +146,7 @@ The fish parser. Contains functions for parsing and evaluating code.
/** /**
Error when using else builtin outside of if block Error when using else builtin outside of if block
*/ */
#define INVALID_ELSE_ERR_MSG _( L"'else' builtin not inside of if block" ) #define INVALID_ELSE_OR_ELSEIF_ERR_MSG _( L"'%ls' builtin not inside of if block" )
/** /**
Error when using end builtin outside of block Error when using end builtin outside of block
@@ -3293,9 +3293,9 @@ int parser_t::test( const wchar_t * buff,
} }
/* /*
Test that else is only used directly in an if-block Test that else and elseif are only used directly in an if-block
*/ */
if( command == L"else" ) if( command == L"else" || command == L"elseif" )
{ {
if( !count || block_type[count-1]!=IF ) if( !count || block_type[count-1]!=IF )
{ {
@@ -3304,7 +3304,8 @@ int parser_t::test( const wchar_t * buff,
{ {
error( SYNTAX_ERROR, error( SYNTAX_ERROR,
tok_get_pos( &tok ), tok_get_pos( &tok ),
INVALID_ELSE_ERR_MSG ); INVALID_ELSE_OR_ELSEIF_ERR_MSG,
command.c_str());
print_errors( *out, prefix ); print_errors( *out, prefix );
} }

View File

@@ -8,6 +8,11 @@ function __fish_print_help --description "Print help message for the specified f
case '*' case '*'
set item $argv[1] set item $argv[1]
end end
# Do nothing if the file does not exist
if not test -e "$__fish_datadir/man/man1/$item.1"
return
end
# These two expressions take care of underlines (Should be italic) # These two expressions take care of underlines (Should be italic)
set -l cmd1 s/_\x08'\(.\)'/(set_color --underline)\\1(set_color normal)/g set -l cmd1 s/_\x08'\(.\)'/(set_color --underline)\\1(set_color normal)/g
@@ -32,4 +37,4 @@ function __fish_print_help --description "Print help message for the specified f
# Filter and print help # Filter and print help
printf "%s\n" $help| tail -n (expr $lines - 5) | head -n (expr $lines - 8) | sed $sed_cmd printf "%s\n" $help| tail -n (expr $lines - 5) | head -n (expr $lines - 8) | sed $sed_cmd
end end