int score = 0;
int fuzzy = (fuzzystr != NULL);
int funcsort = FALSE;
+ int match;
// do this loop twice:
// round == 0: count the number of matching names
if (*str == NUL) // skip empty strings
continue;
- if (vim_regexec(regmatch, str, (colnr_T)0) ||
- (fuzzy && ((score = fuzzy_match_str(str, fuzzystr)) != 0)))
+ if (!fuzzy)
+ match = vim_regexec(regmatch, str, (colnr_T)0);
+ else
+ {
+ score = fuzzy_match_str(str, fuzzystr);
+ match = (score != 0);
+ }
+
+ if (!match)
+ continue;
+
+ if (round)
{
- if (round)
+ if (escaped)
+ str = vim_strsave_escaped(str, (char_u *)" \t\\.");
+ else
+ str = vim_strsave(str);
+ if (str == NULL)
{
- if (escaped)
- str = vim_strsave_escaped(str, (char_u *)" \t\\.");
- else
- str = vim_strsave(str);
- if (str == NULL)
- {
- FreeWild(count, *matches);
- if (fuzzy)
- fuzmatch_str_free(fuzmatch, count);
- *numMatches = 0;
- *matches = NULL;
- return FAIL;
- }
if (fuzzy)
- {
- fuzmatch[count].idx = count;
- fuzmatch[count].str = str;
- fuzmatch[count].score = score;
- }
- else
- (*matches)[count] = str;
+ fuzmatch_str_free(fuzmatch, count);
+ else if (count > 0)
+ FreeWild(count, *matches);
+ *numMatches = 0;
+ *matches = NULL;
+ return FAIL;
+ }
+ if (fuzzy)
+ {
+ fuzmatch[count].idx = count;
+ fuzmatch[count].str = str;
+ fuzmatch[count].score = score;
+ }
+ else
+ (*matches)[count] = str;
# ifdef FEAT_MENU
- if (func == get_menu_names && str != NULL)
- {
- // test for separator added by get_menu_names()
- str += STRLEN(str) - 1;
- if (*str == '\001')
- *str = '.';
- }
-# endif
+ if (func == get_menu_names && str != NULL)
+ {
+ // test for separator added by get_menu_names()
+ str += STRLEN(str) - 1;
+ if (*str == '\001')
+ *str = '.';
}
- ++count;
+# endif
}
+ ++count;
}
if (round == 0)
{
call feedkeys(":let SVar\<Tab>\<C-B>\"\<CR>", 'tx')
call assert_equal('"let SomeVariable', @:)
+ " Test for sorting the results by the best match
+ %bw!
+ command T123format :
+ command T123goformat :
+ command T123TestFOrmat :
+ command T123fendoff :
+ command T123state :
+ command T123FendingOff :
+ set wildoptions=fuzzy
+ call feedkeys(":T123fo\<C-A>\<C-B>\"\<CR>", 'tx')
+ call assert_equal('"T123format T123TestFOrmat T123FendingOff T123goformat T123fendoff', @:)
+ delcommand T123format
+ delcommand T123goformat
+ delcommand T123TestFOrmat
+ delcommand T123fendoff
+ delcommand T123state
+ delcommand T123FendingOff
+ %bw
+
set wildoptions&
%bw!
endfunc