fix incorrectly aligned carat in command expansion errors and more

- fix the carat position expanding e.g. `command $,`
- improve the error reporting for not-allowed command subtitutions
  by figuring out where the expansion failed instead of using
  SOURCE_LOCATION_UNKNOWN
- allow nullptr for parse_util_licate_brackets_range() out_string
  argument if we don't need it to do any work.

Fixes #5812
This commit is contained in:
Aaron Gyes
2019-04-11 14:28:27 -07:00
parent 4539a9db15
commit 75db3b4ff4
2 changed files with 15 additions and 9 deletions

View File

@@ -879,13 +879,16 @@ static expand_error_t expand_stage_cmdsubst(wcstring input, std::vector<completi
parse_error_list_t *errors) {
UNUSED(vars);
if (EXPAND_SKIP_CMDSUBST & flags) {
wchar_t *begin, *end;
if (parse_util_locate_cmdsubst(input.c_str(), &begin, &end, true) == 0) {
append_completion(out, std::move(input));
} else {
append_cmdsub_error(errors, SOURCE_LOCATION_UNKNOWN,
L"Command substitutions not allowed");
return EXPAND_ERROR;
size_t cur = 0, start = 0, end;
switch (parse_util_locate_cmdsubst_range(input, &cur, nullptr, &start, &end, true)) {
case 0:
append_completion(out, std::move(input));
break;
case 1: /* fallthroughs intentional */
append_cmdsub_error(errors, start, L"Command substitutions not allowed");
case -1:
default:
return EXPAND_ERROR;
}
} else {
bool cmdsubst_ok = expand_cmdsubst(std::move(input), out, errors);