summaryrefslogtreecommitdiff
path: root/script/core/searcher.lua
diff options
context:
space:
mode:
Diffstat (limited to 'script/core/searcher.lua')
-rw-r--r--script/core/searcher.lua24
1 files changed, 20 insertions, 4 deletions
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