mirror of
https://github.com/fish-shell/fish-shell
synced 2025-01-04 09:08:46 +00:00
move variable_assignment_equal_pos to tokenizer
we'll need it for tok_command
(cherry picked from commit ebde9a6a44
)
This commit is contained in:
parent
676a97cf0b
commit
6b6dc7ad20
4 changed files with 23 additions and 23 deletions
|
@ -1073,26 +1073,6 @@ static inline bool is_help_argument(const wcstring &txt) {
|
|||
return txt == L"-h" || txt == L"--help";
|
||||
}
|
||||
|
||||
// Return the location of the equals sign, or npos if the string does
|
||||
// not look like a variable assignment like FOO=bar. The detection
|
||||
// works similar as in some POSIX shells: only letters and numbers qre
|
||||
// allowed on the left hand side, no quotes or escaping.
|
||||
maybe_t<size_t> variable_assignment_equals_pos(const wcstring &txt) {
|
||||
enum { init, has_some_variable_identifier } state = init;
|
||||
// TODO bracket indexing
|
||||
for (size_t i = 0; i < txt.size(); i++) {
|
||||
wchar_t c = txt[i];
|
||||
if (state == init) {
|
||||
if (!valid_var_name_char(c)) return {};
|
||||
state = has_some_variable_identifier;
|
||||
} else {
|
||||
if (c == '=') return {i};
|
||||
if (!valid_var_name_char(c)) return {};
|
||||
}
|
||||
}
|
||||
return {};
|
||||
}
|
||||
|
||||
/// Return a new parse token, advancing the tokenizer.
|
||||
static inline parse_token_t next_parse_token(tokenizer_t *tok, maybe_t<tok_t> *out_token,
|
||||
wcstring *storage) {
|
||||
|
|
|
@ -235,9 +235,6 @@ using parsed_source_ref_t = std::shared_ptr<const parsed_source_t>;
|
|||
parsed_source_ref_t parse_source(wcstring src, parse_tree_flags_t flags, parse_error_list_t *errors,
|
||||
parse_token_type_t goal = symbol_job_list);
|
||||
|
||||
/// The position of the equal sign in a variable assignment like foo=bar.
|
||||
maybe_t<size_t> variable_assignment_equals_pos(const wcstring &txt);
|
||||
|
||||
/// Error message for improper use of the exec builtin.
|
||||
#define EXEC_ERR_MSG _(L"The '%ls' command can not be used in a pipeline")
|
||||
|
||||
|
|
|
@ -864,3 +864,23 @@ move_word_state_machine_t::move_word_state_machine_t(move_word_style_t syl)
|
|||
: state(0), style(syl) {}
|
||||
|
||||
void move_word_state_machine_t::reset() { state = 0; }
|
||||
|
||||
// Return the location of the equals sign, or npos if the string does
|
||||
// not look like a variable assignment like FOO=bar. The detection
|
||||
// works similar as in some POSIX shells: only letters and numbers qre
|
||||
// allowed on the left hand side, no quotes or escaping.
|
||||
maybe_t<size_t> variable_assignment_equals_pos(const wcstring &txt) {
|
||||
enum { init, has_some_variable_identifier } state = init;
|
||||
// TODO bracket indexing
|
||||
for (size_t i = 0; i < txt.size(); i++) {
|
||||
wchar_t c = txt[i];
|
||||
if (state == init) {
|
||||
if (!valid_var_name_char(c)) return {};
|
||||
state = has_some_variable_identifier;
|
||||
} else {
|
||||
if (c == '=') return {i};
|
||||
if (!valid_var_name_char(c)) return {};
|
||||
}
|
||||
}
|
||||
return {};
|
||||
}
|
||||
|
|
|
@ -213,4 +213,7 @@ class move_word_state_machine_t {
|
|||
void reset();
|
||||
};
|
||||
|
||||
/// The position of the equal sign in a variable assignment like foo=bar.
|
||||
maybe_t<size_t> variable_assignment_equals_pos(const wcstring &txt);
|
||||
|
||||
#endif
|
||||
|
|
Loading…
Reference in a new issue