diff options
Diffstat (limited to 'server-beta/src')
-rw-r--r-- | server-beta/src/core/hover/name.lua | 23 | ||||
-rw-r--r-- | server-beta/src/vm/eachField.lua | 10 |
2 files changed, 29 insertions, 4 deletions
diff --git a/server-beta/src/core/hover/name.lua b/server-beta/src/core/hover/name.lua index d0caf885..ef7fee02 100644 --- a/server-beta/src/core/hover/name.lua +++ b/server-beta/src/core/hover/name.lua @@ -1,5 +1,21 @@ +local guide = require 'parser.guide' +local vm = require 'vm' + local function asLocal(source) - return source[1] + return guide.getName(source) +end + +local function asMethod(source) + local class = vm.eachField(source.node, function (info) + if info.key == 's|type' or info.key == 's|__name' then + if info.value and info.value.type == 'string' then + return info.value[1] + end + end + end) + local node = class or guide.getName(source.node) or '*' + local method = guide.getName(source) + return ('%s:%s'):format(node, method) end return function (source) @@ -10,7 +26,10 @@ return function (source) if parent.type == 'local' or parent.type == 'getlocal' or parent.type == 'setlocal' then - return asLocal(parent) + return asLocal(parent) or '' + end + if parent.type == 'setmethod' then + return asMethod(parent) or '' end return '' end diff --git a/server-beta/src/vm/eachField.lua b/server-beta/src/vm/eachField.lua index 549a7dec..1d3d222d 100644 --- a/server-beta/src/vm/eachField.lua +++ b/server-beta/src/vm/eachField.lua @@ -133,7 +133,10 @@ function vm.eachField(source, callback) local cache = vm.cache.eachField[source] if cache then for i = 1, #cache do - callback(cache[i]) + local res = callback(cache[i]) + if res ~= nil then + return res + end end return end @@ -158,6 +161,9 @@ function vm.eachField(source, callback) vm.cache.eachField[src] = cache end) for i = 1, #cache do - callback(cache[i]) + local res = callback(cache[i]) + if res ~= nil then + return res + end end end |