mirror of
https://github.com/fish-shell/fish-shell
synced 2025-01-06 10:08:47 +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 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.
|
/// 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,
|
static inline parse_token_t next_parse_token(tokenizer_t *tok, maybe_t<tok_t> *out_token,
|
||||||
wcstring *storage) {
|
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,
|
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);
|
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.
|
/// Error message for improper use of the exec builtin.
|
||||||
#define EXEC_ERR_MSG _(L"The '%ls' command can not be used in a pipeline")
|
#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) {}
|
: state(0), style(syl) {}
|
||||||
|
|
||||||
void move_word_state_machine_t::reset() { state = 0; }
|
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();
|
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
|
#endif
|
||||||
|
|
Loading…
Reference in a new issue