diff options
Diffstat (limited to 'server/src')
-rw-r--r-- | server/src/matcher/compile.lua | 2 | ||||
-rw-r--r-- | server/src/matcher/hover.lua | 10 | ||||
-rw-r--r-- | server/src/matcher/init.lua | 1 | ||||
-rw-r--r-- | server/src/matcher/rename.lua | 2 | ||||
-rw-r--r-- | server/src/method/init.lua | 1 | ||||
-rw-r--r-- | server/src/method/initialize.lua | 2 | ||||
-rw-r--r-- | server/src/method/textDocument/hover.lua | 25 | ||||
-rw-r--r-- | server/src/service.lua | 2 |
8 files changed, 42 insertions, 3 deletions
diff --git a/server/src/matcher/compile.lua b/server/src/matcher/compile.lua index 4eddd594..68fdf9b6 100644 --- a/server/src/matcher/compile.lua +++ b/server/src/matcher/compile.lua @@ -259,7 +259,7 @@ function mt:markSimple(simple) var = self:searchCall(obj, simple, i) elseif tp == ':' then var = self:createLocal('self', simple[i-1], self:getVar(simple[i-1][1])) - var.disable_rename = true + var.disableRename = true elseif tp == 'name' then if obj.index then self:checkName(obj) diff --git a/server/src/matcher/hover.lua b/server/src/matcher/hover.lua new file mode 100644 index 00000000..e930c27e --- /dev/null +++ b/server/src/matcher/hover.lua @@ -0,0 +1,10 @@ +local findResult = require 'matcher.find_result' + +return function (results, pos) + local result = findResult(results, pos) + if not result then + return nil + end + + return nil +end diff --git a/server/src/matcher/init.lua b/server/src/matcher/init.lua index e0134c5b..99149582 100644 --- a/server/src/matcher/init.lua +++ b/server/src/matcher/init.lua @@ -3,6 +3,7 @@ local api = { implementation = require 'matcher.implementation', references = require 'matcher.references', rename = require 'matcher.rename', + hover = require 'matcher.hover', compile = require 'matcher.compile', } diff --git a/server/src/matcher/rename.lua b/server/src/matcher/rename.lua index 51613a72..1838960f 100644 --- a/server/src/matcher/rename.lua +++ b/server/src/matcher/rename.lua @@ -27,7 +27,7 @@ local function parseResult(result, newName) if tp == 'var' then local var = result.var local key = result.info.source[1] - if var.disable_rename and key == 'self' then + if var.disableRename and key == 'self' then return positions end if result.info.source.index then diff --git a/server/src/method/init.lua b/server/src/method/init.lua index 7a465f98..c01152a7 100644 --- a/server/src/method/init.lua +++ b/server/src/method/init.lua @@ -12,6 +12,7 @@ init 'textDocument/definition' init 'textDocument/didOpen' init 'textDocument/didChange' init 'textDocument/didClose' +init 'textDocument/hover' init 'textDocument/implementation' init 'textDocument/rename' init 'textDocument/references' diff --git a/server/src/method/initialize.lua b/server/src/method/initialize.lua index ac125ae8..161959d4 100644 --- a/server/src/method/initialize.lua +++ b/server/src/method/initialize.lua @@ -2,6 +2,8 @@ return function (lsp, data) lsp._inited = true return { capabilities = { + -- 支持“悬浮” + hoverProvider = true, -- 支持“转到定义” definitionProvider = true, -- 支持“转到实现” diff --git a/server/src/method/textDocument/hover.lua b/server/src/method/textDocument/hover.lua new file mode 100644 index 00000000..2fd7aaec --- /dev/null +++ b/server/src/method/textDocument/hover.lua @@ -0,0 +1,25 @@ +local parser = require 'parser' +local matcher = require 'matcher' + +return function (lsp, params) + local uri = params.textDocument.uri + local results, lines = lsp:loadText(uri) + if not results then + return nil + end + -- lua是从1开始的,因此都要+1 + local position = lines:position(params.position.line + 1, params.position.character + 1, 'utf8') + local text, kind = matcher.hover(results, position) + if not text then + return nil + end + + local response = { + contents = { + value = text, + kind = kind, + } + } + + return response +end diff --git a/server/src/service.lua b/server/src/service.lua index c5987150..267ac29e 100644 --- a/server/src/service.lua +++ b/server/src/service.lua @@ -88,7 +88,7 @@ function mt:_buildTextCache() local passed = os.clock() - clock log.debug(('\n\z Cache completion\n\z - Cost: [%.3f]秒\n\z + Cost: [%.3f] sec\n\z Num: [%d]\n\z Size: [%.3f]kb\n\z Speed:[%.3f]kb/s\n\z |