mirror of
https://github.com/neovim/neovim.git
synced 2025-02-25 18:55:25 -06:00
fix(search): avoid quadratic time complexity when computing fuzzy score (#32153)
This commit is contained in:
parent
3a25995f30
commit
a8b6fa07c4
@ -2993,6 +2993,8 @@ static int fuzzy_match_compute_score(const char *const str, const int strSz,
|
|||||||
FUNC_ATTR_NONNULL_ALL FUNC_ATTR_WARN_UNUSED_RESULT FUNC_ATTR_PURE
|
FUNC_ATTR_NONNULL_ALL FUNC_ATTR_WARN_UNUSED_RESULT FUNC_ATTR_PURE
|
||||||
{
|
{
|
||||||
assert(numMatches > 0); // suppress clang "result of operation is garbage"
|
assert(numMatches > 0); // suppress clang "result of operation is garbage"
|
||||||
|
const char *p = str;
|
||||||
|
uint32_t sidx = 0;
|
||||||
// Initialize score
|
// Initialize score
|
||||||
int score = 100;
|
int score = 100;
|
||||||
bool is_exact_match = true;
|
bool is_exact_match = true;
|
||||||
@ -3026,12 +3028,12 @@ static int fuzzy_match_compute_score(const char *const str, const int strSz,
|
|||||||
// Check for bonuses based on neighbor character value
|
// Check for bonuses based on neighbor character value
|
||||||
if (currIdx > 0) {
|
if (currIdx > 0) {
|
||||||
// Camel case
|
// Camel case
|
||||||
const char *p = str;
|
|
||||||
int neighbor = ' ';
|
int neighbor = ' ';
|
||||||
|
|
||||||
for (uint32_t sidx = 0; sidx < currIdx; sidx++) {
|
while (sidx < currIdx) {
|
||||||
neighbor = utf_ptr2char(p);
|
neighbor = utf_ptr2char(p);
|
||||||
MB_PTR_ADV(p);
|
MB_PTR_ADV(p);
|
||||||
|
sidx++;
|
||||||
}
|
}
|
||||||
const int curr = utf_ptr2char(p);
|
const int curr = utf_ptr2char(p);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user