summaryrefslogtreecommitdiff
path: root/script-beta
diff options
context:
space:
mode:
author最萌小汐 <sumneko@hotmail.com>2020-10-26 15:44:20 +0800
committer最萌小汐 <sumneko@hotmail.com>2020-10-26 15:44:20 +0800
commit202d4199114b283abe3f38a63c3d845dd183ce11 (patch)
treec1032005f0cb04a1eaae3fc21cb91435b3347d42 /script-beta
parenta12fec5c00f8b6f77aac845977c6c8aab36518bb (diff)
downloadlua-language-server-202d4199114b283abe3f38a63c3d845dd183ce11.zip
doc.generic 的 hover
Diffstat (limited to 'script-beta')
-rw-r--r--script-beta/parser/guide.lua3
-rw-r--r--script-beta/parser/luadoc.lua22
2 files changed, 25 insertions, 0 deletions
diff --git a/script-beta/parser/guide.lua b/script-beta/parser/guide.lua
index f4bf65f2..90566865 100644
--- a/script-beta/parser/guide.lua
+++ b/script-beta/parser/guide.lua
@@ -2483,6 +2483,9 @@ local function getDocTypeUnitName(unit)
elseif unit.type == 'doc.type.function' then
typeName = 'function'
end
+ if unit.typeGeneric then
+ typeName = ('<%s>'):format(typeName)
+ end
if unit.array then
typeName = typeName .. '[]'
elseif unit.generic then
diff --git a/script-beta/parser/luadoc.lua b/script-beta/parser/luadoc.lua
index c55484cf..68fef250 100644
--- a/script-beta/parser/luadoc.lua
+++ b/script-beta/parser/luadoc.lua
@@ -678,6 +678,27 @@ local function isNextLine(lns, binded, doc)
return newRow - lastRow == 1
end
+local function bindGeneric(binded)
+ local generics = {}
+ for _, doc in ipairs(binded) do
+ if doc.type == 'doc.generic' then
+ for _, obj in ipairs(doc.generics) do
+ local name = obj.generic[1]
+ generics[name] = {}
+ end
+ elseif doc.type == 'doc.param'
+ or doc.type == 'doc.return' then
+ guide.eachSourceType(doc, 'doc.type.name', function (src)
+ local name = src[1]
+ if generics[name] then
+ generics[name][#generics[name]+1] = src
+ src.typeGeneric = generics
+ end
+ end)
+ end
+ end
+end
+
local function bindDoc(state, lns, binded)
if not binded then
return
@@ -691,6 +712,7 @@ local function bindDoc(state, lns, binded)
doc.bindGroup = binded
doc.bindSources = bindSources
end
+ bindGeneric(binded)
local row = guide.positionOf(lns, lastDoc.start)
local start, finish = guide.lineRange(lns, row + 1)
if start >= finish then