summaryrefslogtreecommitdiff
path: root/script
diff options
context:
space:
mode:
Diffstat (limited to 'script')
-rw-r--r--script/core/reference.lua2
-rw-r--r--script/core/searcher.lua24
-rw-r--r--script/vm/eachRef.lua4
3 files changed, 25 insertions, 5 deletions
diff --git a/script/core/reference.lua b/script/core/reference.lua
index 6ea79f5f..fc8c01f1 100644
--- a/script/core/reference.lua
+++ b/script/core/reference.lua
@@ -65,7 +65,7 @@ return function (uri, offset)
local metaSource = vm.isMetaFile(uri)
- local refs = vm.getRefs(source)
+ local refs = vm.getAllRefs(source)
local values = {}
for _, src in ipairs(refs) do
local value = searcher.getObjectValue(src)
diff --git a/script/core/searcher.lua b/script/core/searcher.lua
index 74e57736..6c10f09a 100644
--- a/script/core/searcher.lua
+++ b/script/core/searcher.lua
@@ -27,7 +27,7 @@ local ignoredIDs = {
local m = {}
----@alias guide.searchmode '"ref"'|'"def"'
+---@alias guide.searchmode '"ref"'|'"def"'|'"field"'|'"allref"'
---添加结果
---@param status guide.status
@@ -82,7 +82,7 @@ function m.pushResult(status, mode, source, force)
results[#results+1] = source
end
end
- elseif mode == 'ref' or mode == 'field' then
+ elseif mode == 'ref' or mode == 'field' or mode == 'allref' then
if source.type == 'local'
or source.type == 'setlocal'
or source.type == 'getlocal'
@@ -423,7 +423,7 @@ function m.searchRefsByID(status, uri, expect, mode)
end
local function checkBackward(id, node, field)
- if mode ~= 'ref' and mode ~= 'field' and not field then
+ if mode ~= 'ref' and mode ~= 'field' and mode ~= 'allref' and not field then
return
end
for _, backwardID in ipairs(node.backward) do
@@ -562,7 +562,7 @@ function m.searchRefsByID(status, uri, expect, mode)
end
local function checkAnyField(id, field)
- if mode == 'ref' or mode == 'field' then
+ if mode == 'ref' or mode == 'field' or mode == 'allref' then
return
end
local lastID = noder.getLastID(id)
@@ -827,6 +827,22 @@ function m.requestReference(obj, field)
return status.results
end
+--- 请求对象的全部引用(深度搜索)
+---@param obj parser.guide.object
+---@param field? string
+---@return parser.guide.object[]
+function m.requestAllReference(obj, field)
+ local status = m.status('allref')
+
+ if field then
+ m.searchFields(status, obj, 'allref', field)
+ else
+ m.searchRefs(status, obj, 'allref')
+ end
+
+ return status.results
+end
+
--- 请求对象的定义
---@param obj parser.guide.object
---@param field? string
diff --git a/script/vm/eachRef.lua b/script/vm/eachRef.lua
index 5aca198e..35425818 100644
--- a/script/vm/eachRef.lua
+++ b/script/vm/eachRef.lua
@@ -5,3 +5,7 @@ local searcher = require 'core.searcher'
function vm.getRefs(source, field)
return searcher.requestReference(source, field)
end
+
+function vm.getAllRefs(source, field)
+ return searcher.requestAllReference(source, field)
+end