diff options
author | 最萌小汐 <sumneko@hotmail.com> | 2020-10-26 15:44:20 +0800 |
---|---|---|
committer | 最萌小汐 <sumneko@hotmail.com> | 2020-10-26 15:44:20 +0800 |
commit | 202d4199114b283abe3f38a63c3d845dd183ce11 (patch) | |
tree | c1032005f0cb04a1eaae3fc21cb91435b3347d42 /script-beta | |
parent | a12fec5c00f8b6f77aac845977c6c8aab36518bb (diff) | |
download | lua-language-server-202d4199114b283abe3f38a63c3d845dd183ce11.zip |
doc.generic 的 hover
Diffstat (limited to 'script-beta')
-rw-r--r-- | script-beta/parser/guide.lua | 3 | ||||
-rw-r--r-- | script-beta/parser/luadoc.lua | 22 |
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 |