diff options
author | 最萌小汐 <sumneko@hotmail.com> | 2019-11-22 15:54:11 +0800 |
---|---|---|
committer | 最萌小汐 <sumneko@hotmail.com> | 2019-11-22 15:54:11 +0800 |
commit | 4d6f36e241d2bbda3fa28fb32e60d534e87a7ece (patch) | |
tree | a43c57f8e44d7e4ab6f3658f54304f420f3d0023 /server-beta/src/core/hover/name.lua | |
parent | fbd1394858972c92439d927fa30dabcfd55dc705 (diff) | |
download | lua-language-server-4d6f36e241d2bbda3fa28fb32e60d534e87a7ece.zip |
更新 hover
Diffstat (limited to 'server-beta/src/core/hover/name.lua')
-rw-r--r-- | server-beta/src/core/hover/name.lua | 38 |
1 files changed, 28 insertions, 10 deletions
diff --git a/server-beta/src/core/hover/name.lua b/server-beta/src/core/hover/name.lua index ef7fee02..9eb066fc 100644 --- a/server-beta/src/core/hover/name.lua +++ b/server-beta/src/core/hover/name.lua @@ -18,18 +18,36 @@ local function asMethod(source) return ('%s:%s'):format(node, method) end -return function (source) - local parent = source.parent - if not parent then - return '' +local function asField(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 + +local function buildName(source) + if source.type == 'local' + or source.type == 'getlocal' + or source.type == 'setlocal' then + return asLocal(source) or '' end - if parent.type == 'local' - or parent.type == 'getlocal' - or parent.type == 'setlocal' then - return asLocal(parent) or '' + if source.type == 'setmethod' then + return asMethod(source) or '' end - if parent.type == 'setmethod' then - return asMethod(parent) or '' + if source.type == 'setfield' then + return asField(source) or '' + end + local parent = source.parent + if parent then + return buildName(parent) end return '' end + +return buildName |