Merge pull request #5507 from vnen/completion-sort-improve

Fix code completion sorting
This commit is contained in:
Rémi Verschelde 2016-07-03 19:14:49 +02:00 committed by GitHub
commit a801e28e46

View file

@ -4140,13 +4140,26 @@ void TextEdit::_update_completion_candidates() {
int ci_match=0;
Vector<float> sim_cache;
for(int i=0;i<completion_strings.size();i++) {
if (s == completion_strings[i]) {
// A perfect match, stop completion
_cancel_completion();
return;
}
if (s.is_subsequence_ofi(completion_strings[i])) {
// don't remove duplicates if no input is provided
if (s != "" && completion_options.find(completion_strings[i]) != -1) {
continue;
}
// Calculate the similarity to keep completions in good order
float similarity = s.similarity(completion_strings[i]);
float similarity;
if (completion_strings[i].to_lower().begins_with(s.to_lower())) {
// Substrings are the best candidates
similarity = 1.1;
} else {
// Otherwise compute the similarity
similarity = s.to_lower().similarity(completion_strings[i].to_lower());
}
int comp_size = completion_options.size();
if (comp_size == 0) {
completion_options.push_back(completion_strings[i]);
@ -4156,8 +4169,8 @@ void TextEdit::_update_completion_candidates() {
int pos = 0;
do {
comp_sim = sim_cache[pos++];
} while(pos < comp_size && similarity <= comp_sim);
pos--; // Pos will be off by one
} while(pos < comp_size && similarity < comp_sim);
pos = similarity > comp_sim ? pos - 1 : pos; // Pos will be off by one
completion_options.insert(pos, completion_strings[i]);
sim_cache.insert(pos, similarity);
}