diff options
Diffstat (limited to 'server/src/core/hover')
-rw-r--r-- | server/src/core/hover/hover.lua | 6 | ||||
-rw-r--r-- | server/src/core/hover/name.lua | 69 |
2 files changed, 12 insertions, 63 deletions
diff --git a/server/src/core/hover/hover.lua b/server/src/core/hover/hover.lua index c7aba17e..f09bfce4 100644 --- a/server/src/core/hover/hover.lua +++ b/server/src/core/hover/hover.lua @@ -220,5 +220,11 @@ return function (source, lsp, select) if source.type == 'name' and source:bindValue() then return hoverAsValue(source, lsp, select) end + if source.type == 'simple' then + source = source[#source] + if source.type == 'name' and source:bindValue() then + return hoverAsValue(source, lsp, select) + end + end return nil end diff --git a/server/src/core/hover/name.lua b/server/src/core/hover/name.lua index 52bcfef4..e5880884 100644 --- a/server/src/core/hover/name.lua +++ b/server/src/core/hover/name.lua @@ -1,4 +1,9 @@ +local getName = require 'core.name' + return function (source) + if not source then + return '' + end local value = source:bindValue() if not value then return '' @@ -22,67 +27,5 @@ return function (source) return name or '' end - local key - if declarat:get 'simple' then - local simple = declarat:get 'simple' - local chars = {} - for i, obj in ipairs(simple) do - if obj.type == 'name' then - chars[i] = obj[1] - elseif obj.type == 'index' then - chars[i] = '[?]' - elseif obj.type == 'call' then - chars[i] = '(?)' - elseif obj.type == ':' then - chars[i] = ':' - elseif obj.type == '.' then - chars[i] = '.' - else - chars[i] = '*' .. obj.type - end - if obj == declarat then - break - end - end - key = table.concat(chars) - elseif declarat.type == 'name' then - key = declarat[1] - elseif declarat.type == 'string' then - key = ('%q'):format(declarat[1]) - elseif declarat.type == 'number' or declarat.type == 'boolean' then - key = tostring(declarat[1]) - elseif declarat.type == 'simple' then - local chars = {} - for i, obj in ipairs(declarat) do - if obj.type == 'name' then - chars[i] = obj[1] - elseif obj.type == 'index' then - chars[i] = '[?]' - elseif obj.type == 'call' then - chars[i] = '(?)' - elseif obj.type == ':' then - chars[i] = ':' - elseif obj.type == '.' then - chars[i] = '.' - else - chars[i] = '*' .. obj.type - end - end - -- 这里有个特殊处理 - -- function mt:func() 以 mt.func 的形式调用时 - -- hover 显示为 mt.func(self) - if chars[#chars-1] == ':' then - if not source:get 'object' then - chars[#chars-1] = '.' - end - elseif chars[#chars-1] == '.' then - if source:get 'object' then - chars[#chars-1] = ':' - end - end - key = table.concat(chars) - else - key = '' - end - return key + return getName(declarat, source) end |