diff options
Diffstat (limited to 'lua/telescope/algos/string_distance.lua')
| -rw-r--r-- | lua/telescope/algos/string_distance.lua | 51 |
1 files changed, 27 insertions, 24 deletions
diff --git a/lua/telescope/algos/string_distance.lua b/lua/telescope/algos/string_distance.lua index de40e14..c2c5ead 100644 --- a/lua/telescope/algos/string_distance.lua +++ b/lua/telescope/algos/string_distance.lua @@ -1,12 +1,14 @@ - local function min(a, b, c) local min_val = a - if b < min_val then min_val = b end - if c < min_val then min_val = c end + if b < min_val then + min_val = b + end + if c < min_val then + min_val = c + end return min_val - end ---------------------------------- @@ -16,34 +18,35 @@ end -- @treturn number the levenshtein distance -- @within Metrics return function(s1, s2) - if s1 == s2 then return 0 end - if s1:len() == 0 then return s2:len() end - if s2:len() == 0 then return s1:len() end - if s1:len() < s2:len() then s1, s2 = s2, s1 end + if s1 == s2 then + return 0 + end + if s1:len() == 0 then + return s2:len() + end + if s2:len() == 0 then + return s1:len() + end + if s1:len() < s2:len() then + s1, s2 = s2, s1 + end local t = {} - for i=1, #s1+1 do - t[i] = {i-1} + for i = 1, #s1 + 1 do + t[i] = { i - 1 } end - for i=1, #s2+1 do - t[1][i] = i-1 + for i = 1, #s2 + 1 do + t[1][i] = i - 1 end local cost - for i=2, #s1+1 do - - for j=2, #s2+1 do - cost = (s1:sub(i-1,i-1) == s2:sub(j-1,j-1) and 0) or 1 - t[i][j] = min( - t[i-1][j] + 1, - t[i][j-1] + 1, - t[i-1][j-1] + cost) + for i = 2, #s1 + 1 do + for j = 2, #s2 + 1 do + cost = (s1:sub(i - 1, i - 1) == s2:sub(j - 1, j - 1) and 0) or 1 + t[i][j] = min(t[i - 1][j] + 1, t[i][j - 1] + 1, t[i - 1][j - 1] + cost) end - end - return t[#s1+1][#s2+1] - + return t[#s1 + 1][#s2 + 1] end - |
