mirror of
https://github.com/fish-shell/fish-shell
synced 2025-01-14 05:53:59 +00:00
Migrate errors from array_list_t to wcstring_list_t
This commit is contained in:
parent
18bb64cd43
commit
9b1930588f
6 changed files with 38 additions and 31 deletions
26
complete.cpp
26
complete.cpp
|
@ -428,6 +428,15 @@ void complete_remove( const wchar_t *cmd,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Formats an error string by prepending the prefix and then appending the str in single quotes */
|
||||||
|
static wcstring format_error(const wchar_t *prefix, const wcstring &str) {
|
||||||
|
wcstring result = prefix;
|
||||||
|
result.push_back(L'\'');
|
||||||
|
result.append(str);
|
||||||
|
result.push_back(L'\'');
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Find the full path and commandname from a command string 'str'.
|
Find the full path and commandname from a command string 'str'.
|
||||||
*/
|
*/
|
||||||
|
@ -448,7 +457,7 @@ static void parse_cmd_string(const wcstring &str, wcstring &path, wcstring &cmd)
|
||||||
|
|
||||||
int complete_is_valid_option( const wchar_t *str,
|
int complete_is_valid_option( const wchar_t *str,
|
||||||
const wchar_t *opt,
|
const wchar_t *opt,
|
||||||
array_list_t *errors,
|
wcstring_list_t *errors,
|
||||||
bool allow_autoload )
|
bool allow_autoload )
|
||||||
{
|
{
|
||||||
wcstring cmd, path;
|
wcstring cmd, path;
|
||||||
|
@ -493,9 +502,7 @@ int complete_is_valid_option( const wchar_t *str,
|
||||||
if( opt[0] != L'-' )
|
if( opt[0] != L'-' )
|
||||||
{
|
{
|
||||||
if( errors )
|
if( errors )
|
||||||
{
|
errors->push_back(L"Option does not begin with a '-'");
|
||||||
al_push( errors, wcsdup(L"Option does not begin with a '-'") );
|
|
||||||
}
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -642,8 +649,7 @@ int complete_is_valid_option( const wchar_t *str,
|
||||||
wchar_t str[2];
|
wchar_t str[2];
|
||||||
str[0] = opt[j];
|
str[0] = opt[j];
|
||||||
str[1]=0;
|
str[1]=0;
|
||||||
al_push( errors,
|
errors->push_back(format_error(_(L"Unknown option: "), str));
|
||||||
wcsdupcat(_( L"Unknown option: " ), L"'", str, L"'" ) );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
opt_found = 0;
|
opt_found = 0;
|
||||||
|
@ -658,16 +664,16 @@ int complete_is_valid_option( const wchar_t *str,
|
||||||
opt_found = is_gnu_exact || (gnu_match_set.size() == 1);
|
opt_found = is_gnu_exact || (gnu_match_set.size() == 1);
|
||||||
if( errors && !opt_found )
|
if( errors && !opt_found )
|
||||||
{
|
{
|
||||||
|
const wchar_t *prefix;
|
||||||
if( gnu_match_set.empty())
|
if( gnu_match_set.empty())
|
||||||
{
|
{
|
||||||
al_push( errors,
|
prefix = _(L"Unknown option: ");
|
||||||
wcsdupcat( _(L"Unknown option: "), L"'", opt, L"\'" ) );
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
al_push( errors,
|
prefix = _(L"Multiple matches for option: ");
|
||||||
wcsdupcat( _(L"Multiple matches for option: "), L"'", opt, L"\'" ) );
|
|
||||||
}
|
}
|
||||||
|
errors->push_back(format_error(prefix, opt));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -235,7 +235,7 @@ void complete_print( string_buffer_t *out );
|
||||||
*/
|
*/
|
||||||
int complete_is_valid_option( const wchar_t *str,
|
int complete_is_valid_option( const wchar_t *str,
|
||||||
const wchar_t *opt,
|
const wchar_t *opt,
|
||||||
array_list_t *errors,
|
wcstring_list_t *inErrorsOrNull,
|
||||||
bool allow_autoload );
|
bool allow_autoload );
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -224,7 +224,7 @@ int highlight_get_color( int highlight, bool is_background )
|
||||||
static void highlight_param( const wchar_t * buff,
|
static void highlight_param( const wchar_t * buff,
|
||||||
int *color,
|
int *color,
|
||||||
int pos,
|
int pos,
|
||||||
array_list_t *error )
|
wcstring_list_t *error )
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
||||||
|
@ -532,8 +532,8 @@ static int has_expand_reserved( const wchar_t *str )
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// PCA DOES_IO
|
// This function does I/O
|
||||||
static void tokenize( const wchar_t * const buff, int * const color, const int pos, array_list_t *error, const env_vars &vars) {
|
static void tokenize( const wchar_t * const buff, int * const color, const int pos, wcstring_list_t *error, const env_vars &vars) {
|
||||||
ASSERT_IS_BACKGROUND_THREAD();
|
ASSERT_IS_BACKGROUND_THREAD();
|
||||||
|
|
||||||
wcstring cmd;
|
wcstring cmd;
|
||||||
|
@ -728,8 +728,9 @@ static void tokenize( const wchar_t * const buff, int * const color, const int p
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if( error )
|
if( error ) {
|
||||||
al_push( error, wcsdupcat ( L"Unknown command \'", cmd.c_str(), L"\'" ));
|
error->push_back(format_string(L"Unknown command \'%ls\'", cmd.c_str()));
|
||||||
|
}
|
||||||
color[ tok_get_pos( &tok ) ] = (HIGHLIGHT_ERROR);
|
color[ tok_get_pos( &tok ) ] = (HIGHLIGHT_ERROR);
|
||||||
}
|
}
|
||||||
had_cmd = 1;
|
had_cmd = 1;
|
||||||
|
@ -755,7 +756,7 @@ static void tokenize( const wchar_t * const buff, int * const color, const int p
|
||||||
{
|
{
|
||||||
color[ tok_get_pos( &tok ) ] = HIGHLIGHT_ERROR;
|
color[ tok_get_pos( &tok ) ] = HIGHLIGHT_ERROR;
|
||||||
if( error )
|
if( error )
|
||||||
al_push( error, wcsdup ( L"Redirection without a command" ) );
|
error->push_back(L"Redirection without a command");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -787,7 +788,7 @@ static void tokenize( const wchar_t * const buff, int * const color, const int p
|
||||||
{
|
{
|
||||||
color[ tok_get_pos( &tok ) ] = HIGHLIGHT_ERROR;
|
color[ tok_get_pos( &tok ) ] = HIGHLIGHT_ERROR;
|
||||||
if( error )
|
if( error )
|
||||||
al_push( error, wcsdup ( L"Invalid redirection" ) );
|
error->push_back(L"Invalid redirection");
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -808,7 +809,7 @@ static void tokenize( const wchar_t * const buff, int * const color, const int p
|
||||||
{
|
{
|
||||||
color[ tok_get_pos( &tok ) ] = HIGHLIGHT_ERROR;
|
color[ tok_get_pos( &tok ) ] = HIGHLIGHT_ERROR;
|
||||||
if( error )
|
if( error )
|
||||||
al_push( error, wcsdupcat( L"Directory \'", dir.c_str(), L"\' does not exist" ) );
|
error->push_back(format_string(L"Directory \'%ls\' does not exist", dir.c_str()));
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -824,7 +825,7 @@ static void tokenize( const wchar_t * const buff, int * const color, const int p
|
||||||
{
|
{
|
||||||
color[ tok_get_pos( &tok ) ] = HIGHLIGHT_ERROR;
|
color[ tok_get_pos( &tok ) ] = HIGHLIGHT_ERROR;
|
||||||
if( error )
|
if( error )
|
||||||
al_push( error, wcsdupcat( L"File \'", target, L"\' does not exist" ) );
|
error->push_back(format_string(L"File \'%ls\' does not exist", target));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if( last_type == TOK_REDIRECT_NOCLOB )
|
if( last_type == TOK_REDIRECT_NOCLOB )
|
||||||
|
@ -833,7 +834,7 @@ static void tokenize( const wchar_t * const buff, int * const color, const int p
|
||||||
{
|
{
|
||||||
color[ tok_get_pos( &tok ) ] = HIGHLIGHT_ERROR;
|
color[ tok_get_pos( &tok ) ] = HIGHLIGHT_ERROR;
|
||||||
if( error )
|
if( error )
|
||||||
al_push( error, wcsdupcat( L"File \'", target, L"\' exists" ) );
|
error->push_back(format_string(L"File \'%ls\' exists", target));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -856,7 +857,7 @@ static void tokenize( const wchar_t * const buff, int * const color, const int p
|
||||||
{
|
{
|
||||||
color[ tok_get_pos( &tok ) ] = HIGHLIGHT_ERROR;
|
color[ tok_get_pos( &tok ) ] = HIGHLIGHT_ERROR;
|
||||||
if( error )
|
if( error )
|
||||||
al_push( error, wcsdup ( L"No job to put in background" ) );
|
error->push_back(L"No job to put in background" );
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
@ -886,7 +887,7 @@ static void tokenize( const wchar_t * const buff, int * const color, const int p
|
||||||
If the tokenizer reports an error, highlight it as such.
|
If the tokenizer reports an error, highlight it as such.
|
||||||
*/
|
*/
|
||||||
if( error )
|
if( error )
|
||||||
al_push( error, wcsdup ( tok_last( &tok) ) );
|
error->push_back(tok_last( &tok));
|
||||||
color[ tok_get_pos( &tok ) ] = HIGHLIGHT_ERROR;
|
color[ tok_get_pos( &tok ) ] = HIGHLIGHT_ERROR;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -897,7 +898,7 @@ static void tokenize( const wchar_t * const buff, int * const color, const int p
|
||||||
|
|
||||||
|
|
||||||
// PCA DOES_IO (calls is_potential_path, path_get_path, maybe others)
|
// PCA DOES_IO (calls is_potential_path, path_get_path, maybe others)
|
||||||
void highlight_shell( const wchar_t * const buff, int *color, int pos, array_list_t *error, const env_vars &vars )
|
void highlight_shell( const wchar_t * const buff, int *color, int pos, wcstring_list_t *error, const env_vars &vars )
|
||||||
{
|
{
|
||||||
ASSERT_IS_BACKGROUND_THREAD();
|
ASSERT_IS_BACKGROUND_THREAD();
|
||||||
|
|
||||||
|
@ -1116,7 +1117,7 @@ static void highlight_universal_internal( const wchar_t * buff,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void highlight_universal( const wchar_t *buff, int *color, int pos, array_list_t *error, const env_vars &vars )
|
void highlight_universal( const wchar_t *buff, int *color, int pos, wcstring_list_t *error, const env_vars &vars )
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
|
|
|
@ -78,7 +78,7 @@
|
||||||
\param pos the cursor position. Used for quote matching, etc.
|
\param pos the cursor position. Used for quote matching, etc.
|
||||||
\param error a list in which a description of each error will be inserted. May be 0, in whcich case no error descriptions will be generated.
|
\param error a list in which a description of each error will be inserted. May be 0, in whcich case no error descriptions will be generated.
|
||||||
*/
|
*/
|
||||||
void highlight_shell( const wchar_t *buff, int *color, int pos, array_list_t *error, const env_vars &vars );
|
void highlight_shell( const wchar_t *buff, int *color, int pos, wcstring_list_t *error, const env_vars &vars );
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Perform syntax highlighting for the text in buff. Matching quotes and paranthesis are highlighted. The result is
|
Perform syntax highlighting for the text in buff. Matching quotes and paranthesis are highlighted. The result is
|
||||||
|
@ -90,7 +90,7 @@ void highlight_shell( const wchar_t *buff, int *color, int pos, array_list_t *er
|
||||||
\param pos the cursor position. Used for quote matching, etc.
|
\param pos the cursor position. Used for quote matching, etc.
|
||||||
\param error a list in which a description of each error will be inserted. May be 0, in whcich case no error descriptions will be generated.
|
\param error a list in which a description of each error will be inserted. May be 0, in whcich case no error descriptions will be generated.
|
||||||
*/
|
*/
|
||||||
void highlight_universal( const wchar_t *buff, int *color, int pos, array_list_t *error, const env_vars &vars );
|
void highlight_universal( const wchar_t *buff, int *color, int pos, wcstring_list_t *error, const env_vars &vars );
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Translate from HIGHLIGHT_* to FISH_COLOR_* according to environment
|
Translate from HIGHLIGHT_* to FISH_COLOR_* according to environment
|
||||||
|
|
|
@ -2402,7 +2402,6 @@ static void highlight_complete(void *ctx_ptr, int result) {
|
||||||
|
|
||||||
static int threaded_highlight(void *ctx_ptr) {
|
static int threaded_highlight(void *ctx_ptr) {
|
||||||
background_highlight_context_t *ctx = (background_highlight_context_t *)ctx_ptr;
|
background_highlight_context_t *ctx = (background_highlight_context_t *)ctx_ptr;
|
||||||
array_list_t *error = 0;
|
|
||||||
const wchar_t *delayer = ctx->vars.get(L"HIGHLIGHT_DELAY");
|
const wchar_t *delayer = ctx->vars.get(L"HIGHLIGHT_DELAY");
|
||||||
double secDelay = 0;
|
double secDelay = 0;
|
||||||
if (delayer) {
|
if (delayer) {
|
||||||
|
@ -2411,7 +2410,7 @@ static int threaded_highlight(void *ctx_ptr) {
|
||||||
}
|
}
|
||||||
if (secDelay > 0) usleep((useconds_t)(secDelay * 1E6));
|
if (secDelay > 0) usleep((useconds_t)(secDelay * 1E6));
|
||||||
//write(0, "Start", 5);
|
//write(0, "Start", 5);
|
||||||
ctx->highlight_function( ctx->string_to_highlight.c_str(), ctx->color, ctx->match_highlight_pos, error, ctx->vars );
|
ctx->highlight_function( ctx->string_to_highlight.c_str(), ctx->color, ctx->match_highlight_pos, NULL /* error */, ctx->vars );
|
||||||
//write(0, "End", 3);
|
//write(0, "End", 3);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
3
reader.h
3
reader.h
|
@ -14,6 +14,7 @@
|
||||||
|
|
||||||
#include "util.h"
|
#include "util.h"
|
||||||
#include "io.h"
|
#include "io.h"
|
||||||
|
#include "common.h"
|
||||||
|
|
||||||
class parser_t;
|
class parser_t;
|
||||||
class completion_t;
|
class completion_t;
|
||||||
|
@ -137,7 +138,7 @@ void reader_set_complete_function( void (*f)( const wchar_t *, std::vector<compl
|
||||||
The type of a highlight function.
|
The type of a highlight function.
|
||||||
*/
|
*/
|
||||||
class env_vars;
|
class env_vars;
|
||||||
typedef void (*highlight_function_t)( const wchar_t *, int *, int, array_list_t *, const env_vars &vars );
|
typedef void (*highlight_function_t)( const wchar_t *, int *, int, wcstring_list_t *, const env_vars &vars );
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Specify function for syntax highlighting. The function must take these arguments:
|
Specify function for syntax highlighting. The function must take these arguments:
|
||||||
|
|
Loading…
Reference in a new issue