@@ -13,6 +13,7 @@ local m = {}
13
13
--- @field scp scope
14
14
--- @field nameMap table<string , string>
15
15
--- @field visibleCache table<string , require-manager.visibleResult[]>
16
+ --- @field requireCache table<string , table>
16
17
local mt = {}
17
18
mt .__index = mt
18
19
@@ -25,6 +26,7 @@ local function createRequireManager(scp)
25
26
scp = scp ,
26
27
nameMap = {},
27
28
visibleCache = {},
29
+ requireCache = {},
28
30
}, mt )
29
31
end
30
32
@@ -153,14 +155,10 @@ function mt:getVisiblePath(path)
153
155
end
154
156
155
157
--- 查找符合指定require name的所有uri
156
- --- @param suri uri
157
158
--- @param name string
158
159
--- @return uri[]
159
- --- @return table<uri , string> ?
160
- function mt :findUrisByRequireName (suri , name )
161
- if type (name ) ~= ' string' then
162
- return {}
163
- end
160
+ --- @return table<uri , string>
161
+ function mt :searchUrisByRequireName (name )
164
162
local searchers = config .get (self .scp .uri , ' Lua.runtime.path' )
165
163
local strict = config .get (self .scp .uri , ' Lua.runtime.pathStrict' )
166
164
local separator = config .get (self .scp .uri , ' Lua.completion.requireSeparator' )
@@ -174,7 +172,6 @@ function mt:findUrisByRequireName(suri, name)
174
172
local tail = ' /' .. furi .encode (fspath ):gsub (' ^file:[/]*' , ' ' )
175
173
for uri in files .eachFile (self .scp .uri ) do
176
174
if not searcherMap [uri ]
177
- and suri ~= uri
178
175
and util .stringEndWith (uri , tail ) then
179
176
local parentUri = files .getLibraryUri (self .scp .uri , uri ) or self .scp .uri
180
177
if parentUri == nil or parentUri == ' ' then
@@ -203,6 +200,35 @@ function mt:findUrisByRequireName(suri, name)
203
200
return results , searcherMap
204
201
end
205
202
203
+ --- 查找符合指定require name的所有uri,并排除当前文件
204
+ --- @param suri uri
205
+ --- @param name string
206
+ --- @return uri[]
207
+ --- @return table<uri , string> ?
208
+ function mt :findUrisByRequireName (suri , name )
209
+ if type (name ) ~= ' string' then
210
+ return {}
211
+ end
212
+ local cache = self .requireCache [name ]
213
+ if not cache then
214
+ local results , searcherMap = self :searchUrisByRequireName (name )
215
+ cache = {
216
+ results = results ,
217
+ searcherMap = searcherMap ,
218
+ }
219
+ self .requireCache [name ] = cache
220
+ end
221
+ local results = {}
222
+ local searcherMap = {}
223
+ for _ , uri in ipairs (cache .results ) do
224
+ if uri ~= suri then
225
+ results [# results + 1 ] = uri
226
+ searcherMap [uri ] = cache .searcherMap [uri ]
227
+ end
228
+ end
229
+ return results , searcherMap
230
+ end
231
+
206
232
--- @param uri uri
207
233
--- @param path string
208
234
--- @return require-manager.visibleResult[]
0 commit comments