|
|
|
|
@ -916,15 +916,23 @@ Source::ClangViewAutocomplete::ClangViewAutocomplete(const boost::filesystem::pa
|
|
|
|
|
prev = prefix_start; |
|
|
|
|
prev.backward_char(); |
|
|
|
|
auto prevprev = prev; |
|
|
|
|
if(*prev == '.') { |
|
|
|
|
auto iter = prev; |
|
|
|
|
bool starts_with_num = false; |
|
|
|
|
size_t count = 0; |
|
|
|
|
|
|
|
|
|
auto valid_continuation_token = [this](Gtk::TextIter iter) { |
|
|
|
|
while(iter.backward_char() && is_whitespace_char(*iter)) { |
|
|
|
|
} |
|
|
|
|
if(!is_whitespace_char(*iter)) |
|
|
|
|
iter.forward_char(); |
|
|
|
|
bool found_token = false; |
|
|
|
|
bool starts_with_digit = false; |
|
|
|
|
while(iter.backward_char() && is_token_char(*iter)) { |
|
|
|
|
++count; |
|
|
|
|
starts_with_num = Glib::Unicode::isdigit(*iter); |
|
|
|
|
found_token = true; |
|
|
|
|
starts_with_digit = Glib::Unicode::isdigit(*iter); |
|
|
|
|
} |
|
|
|
|
if((count >= 1 || *iter == ')' || *iter == ']') && !starts_with_num) { |
|
|
|
|
return (found_token || *iter == ')' || *iter == ']' || *iter == '}') && !starts_with_digit; |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
if(*prev == '.') { |
|
|
|
|
if(valid_continuation_token(prev)) { |
|
|
|
|
{ |
|
|
|
|
LockGuard lock(autocomplete.prefix_mutex); |
|
|
|
|
autocomplete.prefix = get_buffer()->get_text(prefix_start, prefix_end); |
|
|
|
|
@ -932,8 +940,8 @@ Source::ClangViewAutocomplete::ClangViewAutocomplete(const boost::filesystem::pa
|
|
|
|
|
return true; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
else if((prevprev.backward_char() && ((*prevprev == ':' && *prev == ':') || (*prevprev == '-' && *prev == '>')))) { |
|
|
|
|
if(*prev == ':' || (prevprev.backward_char() && (is_token_char(*prevprev) || *prevprev == ')' || *prevprev == ']'))) { |
|
|
|
|
else if(prevprev.backward_char() && ((*prevprev == ':' && *prev == ':') || (*prevprev == '-' && *prev == '>'))) { |
|
|
|
|
if(*prev == ':' || valid_continuation_token(prevprev)) { |
|
|
|
|
{ |
|
|
|
|
LockGuard lock(autocomplete.prefix_mutex); |
|
|
|
|
autocomplete.prefix = get_buffer()->get_text(prefix_start, prefix_end); |
|
|
|
|
|