mirror of
https://github.com/fish-shell/fish-shell
synced 2025-01-13 13:39:02 +00:00
Fix for wrong syntax highlighting in the face of tokenizer errors, e.g.
"echo 'hi"
This commit is contained in:
parent
c8eec109b2
commit
bf75731bbe
2 changed files with 12 additions and 2 deletions
|
@ -2638,8 +2638,15 @@ static void test_highlighting(void)
|
||||||
{NULL, -1}
|
{NULL, -1}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const highlight_component_t components10[] =
|
||||||
|
{
|
||||||
|
{L"echo", HIGHLIGHT_COMMAND},
|
||||||
|
{L"'single_quote", HIGHLIGHT_ERROR},
|
||||||
|
{NULL, -1}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
const highlight_component_t *tests[] = {components1, components2, components3, components4, components5, components6, components7, components8, components9};
|
const highlight_component_t *tests[] = {components1, components2, components3, components4, components5, components6, components7, components8, components9, components10};
|
||||||
for (size_t which = 0; which < sizeof tests / sizeof *tests; which++)
|
for (size_t which = 0; which < sizeof tests / sizeof *tests; which++)
|
||||||
{
|
{
|
||||||
const highlight_component_t *components = tests[which];
|
const highlight_component_t *components = tests[which];
|
||||||
|
|
|
@ -1109,8 +1109,11 @@ bool parse_t::parse_internal(const wcstring &str, parse_tree_flags_t parse_flags
|
||||||
{
|
{
|
||||||
if (parse_flags & parse_flag_continue_after_error)
|
if (parse_flags & parse_flag_continue_after_error)
|
||||||
{
|
{
|
||||||
|
/* Hack hack hack. Typically the parse error is due to the first token. However, if it's a tokenizer error, then has_fatal_error was set due to the check above; in that case the second token is what matters. */
|
||||||
|
size_t error_token_idx = (queue[1].type == parse_special_type_tokenizer_error ? 1 : 0);
|
||||||
|
|
||||||
/* Mark a special error token, and then keep going */
|
/* Mark a special error token, and then keep going */
|
||||||
const parse_token_t token = {parse_special_type_parse_error, parse_keyword_none, false, queue[0].source_start, queue[0].source_length};
|
const parse_token_t token = {parse_special_type_parse_error, parse_keyword_none, false, queue[error_token_idx].source_start, queue[error_token_idx].source_length};
|
||||||
this->parser->accept_tokens(token, kInvalidToken);
|
this->parser->accept_tokens(token, kInvalidToken);
|
||||||
this->parser->reset_symbols();
|
this->parser->reset_symbols();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue