Merge pull request #12471 from mhilbrunner/autocomplete
Fix get_node() and $ autocompletion when using single quotes
This commit is contained in:
commit
4889b80698
4 changed files with 34 additions and 2 deletions
|
@ -2476,6 +2476,11 @@ bool String::begins_with(const char *p_string) const {
|
|||
return *p_string == 0;
|
||||
}
|
||||
|
||||
bool String::is_enclosed_in(const String &p_string) const {
|
||||
|
||||
return begins_with(p_string) && ends_with(p_string);
|
||||
}
|
||||
|
||||
bool String::is_subsequence_of(const String &p_string) const {
|
||||
|
||||
return _base_is_subsequence_of(p_string, false);
|
||||
|
@ -2486,6 +2491,11 @@ bool String::is_subsequence_ofi(const String &p_string) const {
|
|||
return _base_is_subsequence_of(p_string, true);
|
||||
}
|
||||
|
||||
bool String::is_quoted() const {
|
||||
|
||||
return is_enclosed_in("\"") || is_enclosed_in("'");
|
||||
}
|
||||
|
||||
bool String::_base_is_subsequence_of(const String &p_string, bool case_insensitive) const {
|
||||
|
||||
int len = length();
|
||||
|
@ -3906,6 +3916,18 @@ String String::sprintf(const Array &values, bool *error) const {
|
|||
return formatted;
|
||||
}
|
||||
|
||||
String String::quote(String quotechar) const {
|
||||
return quotechar + *this + quotechar;
|
||||
}
|
||||
|
||||
String String::unquote() const {
|
||||
if (!is_quoted()) {
|
||||
return *this;
|
||||
}
|
||||
|
||||
return substr(1, length() - 2);
|
||||
}
|
||||
|
||||
#include "translation.h"
|
||||
|
||||
#ifdef TOOLS_ENABLED
|
||||
|
|
|
@ -118,8 +118,10 @@ public:
|
|||
bool begins_with(const String &p_string) const;
|
||||
bool begins_with(const char *p_string) const;
|
||||
bool ends_with(const String &p_string) const;
|
||||
bool is_enclosed_in(const String &p_string) const;
|
||||
bool is_subsequence_of(const String &p_string) const;
|
||||
bool is_subsequence_ofi(const String &p_string) const;
|
||||
bool is_quoted() const;
|
||||
Vector<String> bigrams() const;
|
||||
float similarity(const String &p_string) const;
|
||||
String format(const Variant &values, String placeholder = "{_}") const;
|
||||
|
@ -132,6 +134,8 @@ public:
|
|||
String lpad(int min_length, const String &character = " ") const;
|
||||
String rpad(int min_length, const String &character = " ") const;
|
||||
String sprintf(const Array &values, bool *error) const;
|
||||
String quote(String quotechar = "\"") const;
|
||||
String unquote() const;
|
||||
static String num(double p_num, int p_decimals = -1);
|
||||
static String num_scientific(double p_num);
|
||||
static String num_real(double p_num);
|
||||
|
|
|
@ -2111,9 +2111,9 @@ Error GDScriptLanguage::complete_code(const String &p_code, const String &p_base
|
|||
for (List<String>::Element *E = opts.front(); E; E = E->next()) {
|
||||
|
||||
String opt = E->get().strip_edges();
|
||||
if (opt.begins_with("\"") && opt.ends_with("\"")) {
|
||||
if (opt.is_quoted()) {
|
||||
r_forced = true;
|
||||
String idopt = opt.substr(1, opt.length() - 2);
|
||||
String idopt = opt.unquote();
|
||||
if (idopt.replace("/", "_").is_valid_identifier()) {
|
||||
options.insert(idopt);
|
||||
} else {
|
||||
|
|
|
@ -4489,7 +4489,13 @@ void TextEdit::_update_completion_candidates() {
|
|||
completion_index = 0;
|
||||
completion_base = s;
|
||||
Vector<float> sim_cache;
|
||||
bool single_quote = s.begins_with("'");
|
||||
|
||||
for (int i = 0; i < completion_strings.size(); i++) {
|
||||
if (single_quote && completion_strings[i].is_quoted()) {
|
||||
completion_strings[i] = completion_strings[i].unquote().quote("'");
|
||||
}
|
||||
|
||||
if (s == completion_strings[i]) {
|
||||
// A perfect match, stop completion
|
||||
_cancel_completion();
|
||||
|
|
Loading…
Reference in a new issue