From dc7275ac9b56f26923c80c1e8bbce185c2d147a4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9C=80=E8=90=8C=E5=B0=8F=E6=B1=90?= Date: Fri, 22 Nov 2019 14:28:00 +0800 Subject: =?UTF-8?q?=E7=AE=80=E5=8D=95=E6=8E=A5=E5=85=A5=20hover=20?= =?UTF-8?q?=E5=8D=8F=E8=AE=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server-beta/src/core/hover/init.lua | 3 ++- server-beta/src/provider/init.lua | 23 ++++++++++++++++++++--- server-beta/src/provider/markdown.lua | 22 ++++++++++++++++++++++ server-beta/src/vm/getValue.lua | 5 ++++- 4 files changed, 48 insertions(+), 5 deletions(-) create mode 100644 server-beta/src/provider/markdown.lua 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 = {} -- cgit v1.2.3