aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar ridiculousfish <corydoras@ridiculousfish.com>2016-02-27 18:37:59 -0800
committerGravatar ridiculousfish <corydoras@ridiculousfish.com>2016-02-27 18:37:59 -0800
commitd628fe0deaa134efa1205a25e538f3cb828661a0 (patch)
treeda788321b10efb8740607bf454857de10fb783c3
parentcbd3fa6b01bab709d0b6f5277a984685d8c45888 (diff)
Eliminate parser_t::show_errors
Errors are now unconditionally shown
-rw-r--r--src/complete.cpp9
-rw-r--r--src/fish_tests.cpp9
-rw-r--r--src/parse_execution.cpp31
-rw-r--r--src/parser.cpp24
-rw-r--r--src/parser.h9
5 files changed, 37 insertions, 45 deletions
diff --git a/src/complete.cpp b/src/complete.cpp
index be79b7eb..b5db905b 100644
--- a/src/complete.cpp
+++ b/src/complete.cpp
@@ -986,7 +986,6 @@ void completer_t::complete_from_args(const wcstring &str,
complete_flags_t flags)
{
bool is_autosuggest = (this->type() == COMPLETE_AUTOSUGGEST);
- parser_t parser(false /* don't show errors */);
/* If type is COMPLETE_AUTOSUGGEST, it means we're on a background thread, so don't call proc_push_interactive */
if (! is_autosuggest)
@@ -994,8 +993,14 @@ void completer_t::complete_from_args(const wcstring &str,
proc_push_interactive(0);
}
- expand_flags_t eflags = is_autosuggest ? EXPAND_SKIP_CMDSUBST : 0;
+ expand_flags_t eflags = 0;
+ if (is_autosuggest)
+ {
+ eflags |= EXPAND_NO_DESCRIPTIONS | EXPAND_SKIP_CMDSUBST;
+ }
+
std::vector<completion_t> possible_comp;
+ const parser_t parser;
parser.expand_argument_list(args, eflags, &possible_comp);
if (! is_autosuggest)
diff --git a/src/fish_tests.cpp b/src/fish_tests.cpp
index 871e5622..f6441ffd 100644
--- a/src/fish_tests.cpp
+++ b/src/fish_tests.cpp
@@ -593,7 +593,7 @@ static void test_parser()
{
say(L"Testing parser");
- parser_t parser(true);
+ parser_t parser;
say(L"Testing block nesting");
if (!parse_util_detect_errors(L"if; end"))
@@ -781,7 +781,6 @@ static void test_parser()
do_test(comps.at(0).completion == L"alpha");
do_test(comps.at(1).completion == L"beta gamma");
do_test(comps.at(2).completion == L"delta");
-
}
/* Wait a while and then SIGINT the main thread */
@@ -1954,7 +1953,7 @@ static void test_is_potential_path()
int builtin_test(parser_t &parser, io_streams_t &streams, wchar_t **argv);
static bool run_one_test_test(int expected, wcstring_list_t &lst, bool bracket)
{
- parser_t parser(true);
+ parser_t parser;
size_t i, count = lst.size();
wchar_t **argv = new wchar_t *[count+3];
argv[0] = (wchar_t *)(bracket ? L"[" : L"test");
@@ -1993,7 +1992,7 @@ static bool run_test_test(int expected, const wcstring &str)
static void test_test_brackets()
{
// Ensure [ knows it needs a ]
- parser_t parser(true);
+ parser_t parser;
io_streams_t streams;
const wchar_t *argv1[] = {L"[", L"foo", NULL};
@@ -4116,7 +4115,7 @@ static void test_wcstring_tok(void)
int builtin_string(parser_t &parser, io_streams_t &streams, wchar_t **argv);
static void run_one_string_test(const wchar_t **argv, int expected_rc, const wchar_t *expected_out)
{
- parser_t parser(true);
+ parser_t parser;
io_streams_t streams;
streams.stdin_is_directly_redirected = false; // read from argv instead of stdin
int rc = builtin_string(parser, streams, const_cast<wchar_t**>(argv));
diff --git a/src/parse_execution.cpp b/src/parse_execution.cpp
index 4ae09b29..c0c10a75 100644
--- a/src/parse_execution.cpp
+++ b/src/parse_execution.cpp
@@ -720,28 +720,25 @@ parse_execution_result_t parse_execution_context_t::run_while_statement(const pa
/* Reports an error. Always returns parse_execution_errored, so you can assign the result to an 'errored' variable */
parse_execution_result_t parse_execution_context_t::report_error(const parse_node_t &node, const wchar_t *fmt, ...) const
{
- if (parser->show_errors)
- {
- /* Create an error */
- parse_error_list_t error_list = parse_error_list_t(1);
- parse_error_t *error = &error_list.at(0);
- error->source_start = node.source_start;
- error->source_length = node.source_length;
- error->code = parse_error_syntax; //hackish
-
- va_list va;
- va_start(va, fmt);
- error->text = vformat_string(fmt, va);
- va_end(va);
-
- this->report_errors(error_list);
- }
+ /* Create an error */
+ parse_error_list_t error_list = parse_error_list_t(1);
+ parse_error_t *error = &error_list.at(0);
+ error->source_start = node.source_start;
+ error->source_length = node.source_length;
+ error->code = parse_error_syntax; //hackish
+
+ va_list va;
+ va_start(va, fmt);
+ error->text = vformat_string(fmt, va);
+ va_end(va);
+
+ this->report_errors(error_list);
return parse_execution_errored;
}
parse_execution_result_t parse_execution_context_t::report_errors(const parse_error_list_t &error_list) const
{
- if (parser->show_errors && ! parser->cancellation_requested)
+ if (! parser->cancellation_requested)
{
if (error_list.empty())
{
diff --git a/src/parser.cpp b/src/parser.cpp
index 325b053d..aa99a69b 100644
--- a/src/parser.cpp
+++ b/src/parser.cpp
@@ -162,8 +162,7 @@ static wcstring user_presentable_path(const wcstring &path)
}
-parser_t::parser_t(bool errors) :
- show_errors(errors),
+parser_t::parser_t() :
cancellation_requested(false),
is_within_fish_initialization(false)
{
@@ -176,7 +175,7 @@ parser_t &parser_t::principal_parser(void)
{
ASSERT_IS_NOT_FORKED_CHILD();
ASSERT_IS_MAIN_THREAD();
- static parser_t parser(true);
+ static parser_t parser;
if (! s_principal_parser)
{
s_principal_parser = &parser;
@@ -466,11 +465,9 @@ void parser_t::emit_profiling(const char *path) const
}
}
-void parser_t::expand_argument_list(const wcstring &arg_list_src, expand_flags_t eflags, std::vector<completion_t> *output_arg_list)
+void parser_t::expand_argument_list(const wcstring &arg_list_src, expand_flags_t eflags, std::vector<completion_t> *output_arg_list) const
{
assert(output_arg_list != NULL);
- if (! show_errors)
- eflags |= EXPAND_NO_DESCRIPTIONS;
/* Parse the string as an argument list */
parse_node_tree_t tree;
@@ -831,17 +828,14 @@ int parser_t::eval(const wcstring &cmd, const io_chain_t &io, enum block_type_t
/* Parse the source into a tree, if we can */
parse_node_tree_t tree;
parse_error_list_t error_list;
- if (! parse_tree_from_string(cmd, parse_flag_none, &tree, this->show_errors ? &error_list : NULL))
+ if (! parse_tree_from_string(cmd, parse_flag_none, &tree, &error_list))
{
- if (this->show_errors)
- {
- /* Get a backtrace */
- wcstring backtrace_and_desc;
- this->get_backtrace(cmd, error_list, &backtrace_and_desc);
+ /* Get a backtrace. This includes the message. */
+ wcstring backtrace_and_desc;
+ this->get_backtrace(cmd, error_list, &backtrace_and_desc);
- /* Print it */
- fprintf(stderr, "%ls", backtrace_and_desc.c_str());
- }
+ /* Print it */
+ fprintf(stderr, "%ls", backtrace_and_desc.c_str());
return 1;
}
diff --git a/src/parser.h b/src/parser.h
index df3df8ee..dfc4dcf1 100644
--- a/src/parser.h
+++ b/src/parser.h
@@ -228,9 +228,6 @@ class parser_t
{
friend class parse_execution_context_t;
private:
- /** Whether or not we output errors */
- const bool show_errors;
-
/** Indication that we should skip all blocks */
bool cancellation_requested;
@@ -283,8 +280,8 @@ public:
*/
static void skip_all_blocks();
- /** Create a parser of the given type */
- parser_t(bool show_errors);
+ /** Create a parser */
+ parser_t();
/** Global event blocks */
event_blockage_list_t global_event_blocks;
@@ -312,7 +309,7 @@ public:
\param flags Some expand flags to use
\param output List to insert output into
*/
- void expand_argument_list(const wcstring &arg_src, expand_flags_t flags, std::vector<completion_t> *output);
+ void expand_argument_list(const wcstring &arg_src, expand_flags_t flags, std::vector<completion_t> *output) const;
/**
Returns a string describing the current parser pisition in the format 'FILENAME (line LINE_NUMBER): LINE'.