diff options
-rw-r--r-- | server-beta/src/core/hover/init.lua | 3 | ||||
-rw-r--r-- | server-beta/src/provider/init.lua | 23 | ||||
-rw-r--r-- | server-beta/src/provider/markdown.lua | 22 | ||||
-rw-r--r-- | server-beta/src/vm/getValue.lua | 5 |
4 files changed, 48 insertions, 5 deletions
diff --git a/server-beta/src/core/hover/init.lua b/server-beta/src/core/hover/init.lua index c47aee6d..9de5f4da 100644 --- a/server-beta/src/core/hover/init.lua +++ b/server-beta/src/core/hover/init.lua @@ -16,7 +16,8 @@ local function getHoverAsFunction(source) local label = table.concat(labels, '\n') return { - label = label, + label = label, + source = source, } end diff --git a/server-beta/src/provider/init.lua b/server-beta/src/provider/init.lua index 41a022da..95f4b3d1 100644 --- a/server-beta/src/provider/init.lua +++ b/server-beta/src/provider/init.lua @@ -8,6 +8,7 @@ local define = require 'proto.define' local workspace = require 'workspace' local config = require 'config' local library = require 'library' +local markdown = require 'provider.markdown' local function updateConfig() local configs = proto.awaitRequest('workspace/configuration', { @@ -143,12 +144,28 @@ proto.on('textDocument/didChange', function (params) end end) -proto.on('textDocument/hover', function () +proto.on('textDocument/hover', function (params) + local core = require 'core.hover' + local doc = params.textDocument + local uri = doc.uri + if not files.exists(uri) then + return nil + end + local lines = files.getLines(uri) + local text = files.getText(uri) + local offset = define.offset(lines, text, params.position) + local hover = core(uri, offset) + if not hover then + return nil + end + local md = markdown() + md:add('lua', hover.label) return { contents = { - value = 'Hello loli!', + value = md:string(), kind = 'markdown', - } + }, + range = define.range(lines, text, hover.source.start, hover.source.finish), } end) diff --git a/server-beta/src/provider/markdown.lua b/server-beta/src/provider/markdown.lua new file mode 100644 index 00000000..0f69ad87 --- /dev/null +++ b/server-beta/src/provider/markdown.lua @@ -0,0 +1,22 @@ +local mt = {} +mt.__index = mt +mt.__name = 'markdown' + +function mt:add(language, text) + if not text then + return + end + if language == 'lua' then + self[#self+1] = ('```lua\n%s\n```'):format(text) + else + self[#self+1] = text:gsub('\n', '\n\n') + end +end + +function mt:string() + return table.concat(self, '\n') +end + +return function () + return setmetatable({}, mt) +end diff --git a/server-beta/src/vm/getValue.lua b/server-beta/src/vm/getValue.lua index c8d62574..07ebe2a5 100644 --- a/server-beta/src/vm/getValue.lua +++ b/server-beta/src/vm/getValue.lua @@ -768,7 +768,10 @@ end function vm.isSameValue(a, b) local valuesA = vm.getValue(a) local valuesB = vm.getValue(b) - if valuesA == valuesB and valuesA ~= nil then + if not valuesA or not valuesB then + return false + end + if valuesA == valuesB then return true end local values = {} |