@@ -13,6 +13,7 @@ local m = {}
1313--- @field scp scope
1414--- @field nameMap table<string , string>
1515--- @field visibleCache table<string , require-manager.visibleResult[]>
16+ --- @field requireCache table<string , table>
1617local mt = {}
1718mt .__index = mt
1819
@@ -25,6 +26,7 @@ local function createRequireManager(scp)
2526 scp = scp ,
2627 nameMap = {},
2728 visibleCache = {},
29+ requireCache = {},
2830 }, mt )
2931end
3032
@@ -153,14 +155,10 @@ function mt:getVisiblePath(path)
153155end
154156
155157--- 查找符合指定require name的所有uri
156- --- @param suri uri
157158--- @param name string
158159--- @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 )
164162 local searchers = config .get (self .scp .uri , ' Lua.runtime.path' )
165163 local strict = config .get (self .scp .uri , ' Lua.runtime.pathStrict' )
166164 local separator = config .get (self .scp .uri , ' Lua.completion.requireSeparator' )
@@ -174,7 +172,6 @@ function mt:findUrisByRequireName(suri, name)
174172 local tail = ' /' .. furi .encode (fspath ):gsub (' ^file:[/]*' , ' ' )
175173 for uri in files .eachFile (self .scp .uri ) do
176174 if not searcherMap [uri ]
177- and suri ~= uri
178175 and util .stringEndWith (uri , tail ) then
179176 local parentUri = files .getLibraryUri (self .scp .uri , uri ) or self .scp .uri
180177 if parentUri == nil or parentUri == ' ' then
@@ -203,6 +200,35 @@ function mt:findUrisByRequireName(suri, name)
203200 return results , searcherMap
204201end
205202
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+
206232--- @param uri uri
207233--- @param path string
208234--- @return require-manager.visibleResult[]
0 commit comments