summaryrefslogtreecommitdiff
path: root/server/src/method
diff options
context:
space:
mode:
author最萌小汐 <sumneko@hotmail.com>2018-12-06 10:23:19 +0800
committer最萌小汐 <sumneko@hotmail.com>2018-12-06 10:23:19 +0800
commit81913034c6481c95ace92b647370e80dcee954bb (patch)
treed69ebafe085f393429b3809fbd7675838c1b9f92 /server/src/method
parentcd57345c054659f27e7b9fdf91d30074a6dca997 (diff)
downloadlua-language-server-81913034c6481c95ace92b647370e80dcee954bb.zip
hover定义
Diffstat (limited to 'server/src/method')
-rw-r--r--server/src/method/init.lua1
-rw-r--r--server/src/method/initialize.lua2
-rw-r--r--server/src/method/textDocument/hover.lua25
3 files changed, 28 insertions, 0 deletions
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