Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit ab5e1b3

Browse files
committedDec 16, 2021
clean up
1 parent 8b0d382 commit ab5e1b3

File tree

9 files changed

+79
-55
lines changed

9 files changed

+79
-55
lines changed
 

‎script/core/definition.lua

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ local files = require 'files'
44
local vm = require 'vm'
55
local findSource = require 'core.find-source'
66
local guide = require 'parser.guide'
7+
local rpath = require 'workspace.require-path'
78

89
local function sortResults(results)
910
-- 先按照顺序排序
@@ -74,7 +75,7 @@ local function checkRequire(source, offset)
7475
return nil
7576
end
7677
if libName == 'require' then
77-
return workspace.findUrisByRequirePath(literal)
78+
return rpath.findUrisByRequirePath(literal)
7879
elseif libName == 'dofile'
7980
or libName == 'loadfile' then
8081
return workspace.findUrisByFilePath(literal)

‎script/core/diagnostics/different-requires.lua

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ local guide = require 'parser.guide'
33
local lang = require 'language'
44
local config = require 'config'
55
local vm = require 'vm'
6-
local ws = require 'workspace'
6+
local rpath = require 'workspace.require-path'
77

88
return function (uri, callback)
99
local state = files.getState(uri)
@@ -21,7 +21,7 @@ return function (uri, callback)
2121
return
2222
end
2323
local literal = arg1[1]
24-
local results = ws.findUrisByRequirePath(literal)
24+
local results = rpath.findUrisByRequirePath(literal)
2525
if not results or #results ~= 1 then
2626
return
2727
end

‎script/core/hover/description.lua

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,13 @@ local lang = require 'language'
99
local util = require 'utility'
1010
local guide = require 'parser.guide'
1111
local noder = require 'core.noder'
12+
local rpath = require 'workspace.require-path'
1213

1314
local function collectRequire(mode, literal)
1415
local rootPath = ws.path or ''
1516
local result, searchers
1617
if mode == 'require' then
17-
result, searchers = ws.findUrisByRequirePath(literal)
18+
result, searchers = rpath.findUrisByRequirePath(literal)
1819
elseif mode == 'dofile'
1920
or mode == 'loadfile' then
2021
result = ws.findUrisByFilePath(literal)

‎script/core/searcher.lua

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ local noder = require 'core.noder'
22
local guide = require 'parser.guide'
33
local files = require 'files'
44
local generic = require 'core.generic'
5-
local ws = require 'workspace'
5+
local rpath = require 'workspace.require-path'
66
local vm = require 'vm.vm'
77
local collector = require 'core.collector'
88
local util = require 'utility'
@@ -796,7 +796,7 @@ function m.searchRefsByID(status, suri, expect, mode)
796796
if not requireName then
797797
return
798798
end
799-
local uris = ws.findUrisByRequirePath(requireName)
799+
local uris = rpath.findUrisByRequirePath(requireName)
800800
footprint(status, 'require:', requireName)
801801
for i = 1, #uris do
802802
local ruri = uris[i]

‎script/core/type-definition.lua

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ local vm = require 'vm'
55
local findSource = require 'core.find-source'
66
local guide = require 'parser.guide'
77
local infer = require 'core.infer'
8+
local rpath = require 'workspace.require-path'
89

910
local function sortResults(results)
1011
-- 先按照顺序排序
@@ -75,7 +76,7 @@ local function checkRequire(source, offset)
7576
return nil
7677
end
7778
if libName == 'require' then
78-
return workspace.findUrisByRequirePath(literal)
79+
return rpath.findUrisByRequirePath(literal)
7980
elseif libName == 'dofile'
8081
or libName == 'loadfile' then
8182
return workspace.findUrisByFilePath(literal)

‎script/vm/getLinks.lua

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@ local guide = require 'parser.guide'
22
---@class vm
33
local vm = require 'vm.vm'
44
local files = require 'files'
5+
local rpath = require 'workspace.require-path'
56

67
local function getFileLinks(uri)
7-
local ws = require 'workspace'
88
local links = {}
99
local state = files.getState(uri)
1010
if not state then
@@ -20,7 +20,7 @@ local function getFileLinks(uri)
2020
if not args or not args[1] or args[1].type ~= 'string' then
2121
return
2222
end
23-
local uris = ws.findUrisByRequirePath(args[1][1])
23+
local uris = rpath.findUrisByRequirePath(args[1][1])
2424
for _, u in ipairs(uris) do
2525
if not links[u] then
2626
links[u] = {}

‎script/workspace/require-path.lua

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,51 @@ function m.getVisiblePath(path)
8181
return m.cache[path]
8282
end
8383

84+
--- 查找符合指定require path的所有uri
85+
---@param path string
86+
function m.findUrisByRequirePath(path)
87+
if type(path) ~= 'string' then
88+
return {}
89+
end
90+
local vm = require 'vm'
91+
local cache = vm.getCache 'findUrisByRequirePath'
92+
if cache[path] then
93+
return cache[path].results, cache[path].searchers
94+
end
95+
tracy.ZoneBeginN('findUrisByRequirePath')
96+
local results = {}
97+
local mark = {}
98+
local searchers = {}
99+
for uri in files.eachDll() do
100+
local opens = files.getDllOpens(uri) or {}
101+
for _, open in ipairs(opens) do
102+
if open == path then
103+
results[#results+1] = uri
104+
end
105+
end
106+
end
107+
108+
local input = path:gsub('%.', '/')
109+
:gsub('%%', '%%%%')
110+
for _, luapath in ipairs(config.get 'Lua.runtime.path') do
111+
local part = workspace.normalize(luapath:gsub('%?', input))
112+
local uris, posts = workspace.findUrisByFilePath(part)
113+
for _, uri in ipairs(uris) do
114+
if not mark[uri] then
115+
mark[uri] = true
116+
results[#results+1] = uri
117+
searchers[uri] = posts[uri] .. luapath
118+
end
119+
end
120+
end
121+
tracy.ZoneEnd()
122+
cache[path] = {
123+
results = results,
124+
searchers = searchers,
125+
}
126+
return results, searchers
127+
end
128+
84129
function m.flush()
85130
m.cache = {}
86131
end

‎script/workspace/workspace.lua

Lines changed: 0 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -429,51 +429,6 @@ function m.findUrisByFilePath(path)
429429
return results, posts
430430
end
431431

432-
--- 查找符合指定require path的所有uri
433-
---@param path string
434-
function m.findUrisByRequirePath(path)
435-
if type(path) ~= 'string' then
436-
return {}
437-
end
438-
local vm = require 'vm'
439-
local cache = vm.getCache 'findUrisByRequirePath'
440-
if cache[path] then
441-
return cache[path].results, cache[path].searchers
442-
end
443-
tracy.ZoneBeginN('findUrisByRequirePath')
444-
local results = {}
445-
local mark = {}
446-
local searchers = {}
447-
for uri in files.eachDll() do
448-
local opens = files.getDllOpens(uri) or {}
449-
for _, open in ipairs(opens) do
450-
if open == path then
451-
results[#results+1] = uri
452-
end
453-
end
454-
end
455-
456-
local input = path:gsub('%.', '/')
457-
:gsub('%%', '%%%%')
458-
for _, luapath in ipairs(config.get 'Lua.runtime.path') do
459-
local part = m.normalize(luapath:gsub('%?', input))
460-
local uris, posts = m.findUrisByFilePath(part)
461-
for _, uri in ipairs(uris) do
462-
if not mark[uri] then
463-
mark[uri] = true
464-
results[#results+1] = uri
465-
searchers[uri] = posts[uri] .. luapath
466-
end
467-
end
468-
end
469-
tracy.ZoneEnd()
470-
cache[path] = {
471-
results = results,
472-
searchers = searchers,
473-
}
474-
return results, searchers
475-
end
476-
477432
function m.normalize(path)
478433
if not path then
479434
return nil

‎test/crossfile/definition.lua

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -869,10 +869,10 @@ print(t.<?x?>)
869869
}
870870

871871
local originRuntimePath = config.get 'Lua.runtime.path'
872+
872873
config.set('Lua.runtime.path', {
873874
'./?.lua'
874875
})
875-
876876
TEST {
877877
{
878878
path = 'a.lua',
@@ -891,4 +891,25 @@ print(t.<?x?>)
891891
}
892892
}
893893

894+
--config.set('Lua.runtime.path', {
895+
-- '/home/?.lua'
896+
--})
897+
--TEST {
898+
-- {
899+
-- path = '/home/a.lua',
900+
-- content = [[
901+
--return {
902+
-- <!x!> = 1,
903+
--}
904+
--]],
905+
-- },
906+
-- {
907+
-- path = 'b.lua',
908+
-- content = [[
909+
--local t = require 'a'
910+
--print(t.<?x?>)
911+
-- ]]
912+
-- }
913+
--}
914+
894915
config.set('Lua.runtime.path', originRuntimePath)

0 commit comments

Comments
 (0)
Please sign in to comment.