@@ -3,15 +3,18 @@ local files = require 'files'
33local furi = require ' file-uri'
44local workspace = require " workspace"
55local config = require ' config'
6- local collector = require ' core.collector' ' require-path '
6+ local collector = require ' core.collector'
77
88--- @class require-path
99local m = {}
1010
1111local function addRequireName (suri , uri , name )
1212 local separator = config .get (uri , ' Lua.completion.requireSeparator' )
1313 local fsname = name :gsub (' %' .. separator , ' /' )
14- collector :subscribe (suri , fsname , uri )
14+ local scp = workspace .getScope (suri )
15+ --- @type collector
16+ local clt = scp :get (' requireName' ) or scp :set (' requireName' , collector ())
17+ clt :subscribe (uri , fsname , name )
1518end
1619
1720--- `aaa/bbb/ccc.lua` 与 `?.lua` 将返回 `aaa.bbb.cccc`
@@ -110,13 +113,17 @@ function m.findUrisByRequirePath(suri, path)
110113 end
111114 end
112115
113- for uri in collector :each (suri , fspath ) do
114- local infos = m .getVisiblePath (suri , furi .decode (uri ))
115- for _ , info in ipairs (infos ) do
116- local fsexpect = info .expect :gsub (' %' .. separator , ' /' )
117- if fsexpect == fspath then
118- results [# results + 1 ] = uri
119- searchers [uri ] = info .searcher
116+ --- @type collector
117+ local clt = workspace .getScope (suri ):get (' requireName' )
118+ if clt then
119+ for _ , uri in clt :each (suri , fspath ) do
120+ local infos = m .getVisiblePath (suri , furi .decode (uri ))
121+ for _ , info in ipairs (infos ) do
122+ local fsexpect = info .expect :gsub (' %' .. separator , ' /' )
123+ if fsexpect == fspath then
124+ results [# results + 1 ] = uri
125+ searchers [uri ] = info .searcher
126+ end
120127 end
121128 end
122129 end
@@ -132,12 +139,27 @@ local function createVisiblePath(uri)
132139 m .getVisiblePath (nil , furi .decode (uri ))
133140end
134141
142+ local function removeVisiblePath (uri )
143+ local path = furi .decode (uri )
144+ path = workspace .normalize (path )
145+ for _ , scp in ipairs (workspace .folders ) do
146+ scp :get (' visiblePath' )[path ] = nil
147+ scp :get (' requireName' ):dropUri (uri )
148+ end
149+ workspace .getScope (nil ):get (' visiblePath' )[path ] = nil
150+ workspace .getScope (nil ):get (' requireName' ):dropUri (uri )
151+ end
152+
135153function m .flush (suri )
136154 local scp = workspace .getScope (suri )
137155 scp :set (' visiblePath' , {})
138- collector :dropAll ()
156+ --- @type collector
157+ local clt = scp :get (' requireName' )
158+ if clt then
159+ clt :dropAll ()
160+ end
139161 for uri in files .eachFile () do
140- createVisiblePath ( uri )
162+ m . getVisiblePath ( scp . uri , furi . decode ( uri ) )
141163 end
142164end
143165
@@ -148,11 +170,7 @@ files.watch(function (ev, uri)
148170 createVisiblePath (uri )
149171 end
150172 if ev == ' remove' then
151- for _ , scp in ipairs (workspace .folders ) do
152- scp :get (' visiblePath' )[uri ] = nil
153- end
154- workspace .getScope (nil ):get (' visiblePath' )[uri ] = nil
155- collector :dropUri (uri )
173+ removeVisiblePath (uri )
156174 end
157175end )
158176
0 commit comments