diff options
Diffstat (limited to 'script')
-rw-r--r-- | script/core/reference.lua | 2 | ||||
-rw-r--r-- | script/core/searcher.lua | 24 | ||||
-rw-r--r-- | script/vm/eachRef.lua | 4 |
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 |