diff options
author | 最萌小汐 <sumneko@hotmail.com> | 2019-03-25 14:28:13 +0800 |
---|---|---|
committer | 最萌小汐 <sumneko@hotmail.com> | 2019-03-25 14:28:13 +0800 |
commit | 9d8bd2d1964dc28d30837eafeec7389e26c6fa98 (patch) | |
tree | 851d1877c86355831b5f9dbba067a0f95744ffbe /server | |
parent | e76dd6108712200905e05edef73f6e71bcab40ff (diff) | |
download | lua-language-server-9d8bd2d1964dc28d30837eafeec7389e26c6fa98.zip |
支持查找匿名函数的引用
Diffstat (limited to 'server')
-rw-r--r-- | server/src/core/references.lua | 10 | ||||
-rw-r--r-- | server/src/vm/value.lua | 3 | ||||
-rw-r--r-- | server/test/references/init.lua | 9 |
3 files changed, 22 insertions, 0 deletions
diff --git a/server/src/core/references.lua b/server/src/core/references.lua index dfd26575..4bd26b07 100644 --- a/server/src/core/references.lua +++ b/server/src/core/references.lua @@ -24,6 +24,16 @@ local function parseResult(vm, source, declarat, callback) end) return end + if source:bindFunction() then + if declarat then + callback(source:bindFunction():getSource()) + end + source:bindFunction():eachInfo(function (info, src) + if (declarat and (info.type == 'set' or info.type == 'local')) or info.type == 'get' then + callback(src) + end + end) + end if source:bindValue() then source:bindValue():eachInfo(function (info, src) if (declarat and (info.type == 'set' or info.type == 'local')) or info.type == 'get' then diff --git a/server/src/vm/value.lua b/server/src/vm/value.lua index 4cbc47f9..c0f55b9d 100644 --- a/server/src/vm/value.lua +++ b/server/src/vm/value.lua @@ -315,6 +315,9 @@ function mt:addInfo(tp, source, ...) if not id then error('Not instanted source') end + if not tp then + error('Miss info type') + end if self._info[id] then return end diff --git a/server/test/references/init.lua b/server/test/references/init.lua index bcaafbbc..6a8b42db 100644 --- a/server/test/references/init.lua +++ b/server/test/references/init.lua @@ -85,3 +85,12 @@ function <!mt!>:a() <?self?>:remove() end ]] + +TEST [[ +local function f() + return <?function () + end?> +end + +local <!f2!> = f() +]] |