diff options
author | 最萌小汐 <sumneko@hotmail.com> | 2019-11-22 16:28:46 +0800 |
---|---|---|
committer | 最萌小汐 <sumneko@hotmail.com> | 2019-11-22 16:28:46 +0800 |
commit | 2ed44f3cf2fa90f829b582d54c0b4d3abf692ff9 (patch) | |
tree | c2d31e654855a8cf82dc008a6fb3948f86f1b8bd /server-beta/src/core/hover/label.lua | |
parent | 4d6f36e241d2bbda3fa28fb32e60d534e87a7ece (diff) | |
download | lua-language-server-2ed44f3cf2fa90f829b582d54c0b4d3abf692ff9.zip |
更新 hover
Diffstat (limited to 'server-beta/src/core/hover/label.lua')
-rw-r--r-- | server-beta/src/core/hover/label.lua | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/server-beta/src/core/hover/label.lua b/server-beta/src/core/hover/label.lua index 759938d2..d90a19b0 100644 --- a/server-beta/src/core/hover/label.lua +++ b/server-beta/src/core/hover/label.lua @@ -25,6 +25,52 @@ local function asLocal(source) end end +local function asGlobal(source) + local name = buildName(source) + local type = vm.getType(source) + local literal = vm.getLiteral(source) + if literal == nil then + return ('global %s: %s'):format(name, type) + else + return ('global %s: %s = %s'):format(name, type, util.viewLiteral(literal)) + end +end + +local function isGlobalField(source) + if source.type == 'field' + or source.type == 'method' then + source = source.parent + end + if source.type == 'setfield' + or source.type == 'getfield' + or source.type == 'setmethod' + or source.type == 'getmethod' + or source.type == 'tablefield' then + local node = source.node + if node.type == 'setglobal' + or node.type == 'getglobal' then + return true + end + return isGlobalField(node) + else + return false + end +end + +local function asField(source) + if isGlobalField(source) then + return asGlobal(source) + end + local name = buildName(source) + local type = vm.getType(source) + local literal = vm.getLiteral(source) + if literal == nil then + return ('field %s: %s'):format(name, type) + else + return ('field %s: %s = %s'):format(name, type, util.viewLiteral(literal)) + end +end + return function (source) if source.type == 'function' then return asFunction(source) @@ -32,5 +78,16 @@ return function (source) or source.type == 'getlocal' or source.type == 'setlocal' then return asLocal(source) + elseif source.type == 'setglobal' + or source.type == 'getglobal' then + return asGlobal(source) + elseif source.type == 'getfield' + or source.type == 'setfield' + or source.type == 'getmethod' + or source.type == 'setmethod' + or source.type == 'tablefield' + or source.type == 'field' + or source.type == 'method' then + return asField(source) end end |