@@ -7,76 +7,18 @@ local rpath = require 'workspace.require-path'
7
7
local jumpSource = require ' core.jump-source'
8
8
local wssymbol = require ' core.workspace-symbol'
9
9
10
- --- @param s string
11
- --- @return string[]
12
- local function split (s )
13
- local r = {}
14
- s :gsub (' [^/]+' , function (w )
15
- r [# r + 1 ] = w :gsub (" ~1" , " /" ):gsub (" ~0" , " ~" )
16
- end )
17
- return r
18
- end
19
-
20
- --- Returns the Levenshtein distance between the two given string arrays
21
- --- @param a string[]
22
- --- @param b string[]
23
- --- @return number
24
- local function levenshteinDistance (a , b )
25
- local a_len , b_len = # a , # b
26
- local matrix = {} --- @type integer[][]
27
-
28
- -- Initialize the matrix
29
- for i = 1 , a_len + 1 do
30
- matrix [i ] = { [1 ] = i }
31
- end
32
-
33
- for j = 1 , b_len + 1 do
34
- matrix [1 ][j ] = j
35
- end
36
-
37
- -- Compute the Levenshtein distance
38
- for i = 1 , a_len do
39
- for j = 1 , b_len do
40
- local cost = (a [i ] == b [j ]) and 0 or 1
41
- matrix [i + 1 ][j + 1 ] =
42
- math.min (matrix [i ][j + 1 ] + 1 , matrix [i + 1 ][j ] + 1 , matrix [i ][j ] + cost )
43
- end
44
- end
45
-
46
- -- Return the Levenshtein distance
47
- return matrix [a_len + 1 ][b_len + 1 ]
48
- end
49
-
50
- --- @param path1 string
51
- --- @param path2 string
52
- --- @return number
53
- local function pathSimilarityRatio (path1 , path2 )
54
- if path1 == path2 then
55
- return 0
56
- end
57
- local parts1 = split (path1 )
58
- local parts2 = split (path2 )
59
- local distance = levenshteinDistance (parts1 , parts2 )
60
- return distance * 2 / (# parts1 + # parts2 )
61
- end
62
-
63
- local function sortResults (results , uri )
10
+ local function sortResults (results )
64
11
-- 先按照顺序排序
65
- -- Sort in order first
66
- local simularity_cache = {} --- @type table<string,number>
67
12
table.sort (results , function (a , b )
68
13
local u1 = guide .getUri (a .target )
69
14
local u2 = guide .getUri (b .target )
70
15
if u1 == u2 then
71
16
return a .target .start < b .target .start
72
17
else
73
- simularity_cache [u1 ] = simularity_cache [u1 ] or pathSimilarityRatio (uri , u1 )
74
- simularity_cache [u2 ] = simularity_cache [u2 ] or pathSimilarityRatio (uri , u2 )
75
- return simularity_cache [u1 ] < simularity_cache [u2 ]
18
+ return u1 < u2
76
19
end
77
20
end )
78
21
-- 如果2个结果处于嵌套状态,则取范围小的那个
79
- -- If two results are nested, take the one with the smaller range
80
22
local lf , lu
81
23
for i = # results , 1 , - 1 do
82
24
local res = results [i ].target
@@ -199,7 +141,7 @@ return function (uri, offset)
199
141
local results = {}
200
142
local uris = checkRequire (source )
201
143
if uris then
202
- for _ , uri in ipairs (uris ) do
144
+ for i , uri in ipairs (uris ) do
203
145
results [# results + 1 ] = {
204
146
uri = uri ,
205
147
source = source ,
@@ -288,7 +230,7 @@ return function (uri, offset)
288
230
return nil
289
231
end
290
232
291
- sortResults (results , uri )
233
+ sortResults (results )
292
234
jumpSource (results )
293
235
294
236
return results
0 commit comments