summaryrefslogtreecommitdiff
path: root/script/parser/guide.lua
diff options
context:
space:
mode:
authorLei Zhu <uhziel@gmail.com>2020-12-28 15:44:08 +0800
committerLei Zhu <uhziel@gmail.com>2020-12-28 15:44:08 +0800
commit9586b303e9b76d5da19352bd42599480c0f2c0d1 (patch)
tree141eed833e7195e7f1b80a615bc6478b7bd515a5 /script/parser/guide.lua
parent01688aa0248388feb0fbd0c618f2f02bc3a5de96 (diff)
downloadlua-language-server-9586b303e9b76d5da19352bd42599480c0f2c0d1.zip
使用 ---@param arg `T` 来完成'类型参数允许是字符串字面值来表达类型'
Diffstat (limited to 'script/parser/guide.lua')
-rw-r--r--script/parser/guide.lua35
1 files changed, 17 insertions, 18 deletions
diff --git a/script/parser/guide.lua b/script/parser/guide.lua
index cc21f5fa..ec78dbea 100644
--- a/script/parser/guide.lua
+++ b/script/parser/guide.lua
@@ -101,6 +101,7 @@ m.childMap = {
['doc.vararg'] = {'vararg', 'comment'},
['doc.type.table'] = {'key', 'value', 'comment'},
['doc.type.function'] = {'#args', '#returns', 'comment'},
+ ['doc.type.typeliteral'] = {'node'},
['doc.overload'] = {'overload', 'comment'},
['doc.see'] = {'name', 'field'},
}
@@ -1503,25 +1504,23 @@ function m.checkSameSimpleInSpecialBranch(status, obj, start, queue)
end
end
-local function toValidGenericType(status, obj)
- if obj.type ~= 'string' then
- return obj
- end
-
- if not status.interface.docType then
- return obj
- end
-
- local docs = status.interface.docType(obj[1])
- for i = 1, #docs do
- local doc = docs[i]
- if doc.type == 'doc.class.name'
- or doc.type == 'doc.alias.name' then
- return doc
+local function appendValidGenericType(results, status, typeName, obj)
+ if typeName.parent.type == 'doc.type.typeliteral' then
+ if obj.type == 'string' and status.interface.docType then
+ local docs = status.interface.docType(obj[1])
+ for i = 1, #docs do
+ local doc = docs[i]
+ if doc.type == 'doc.class.name'
+ or doc.type == 'doc.alias.name' then
+ results[#results+1] = doc
+ break
+ end
+ end
end
+ else
+ -- 发现没有使用 `T`,则沿用既有逻辑直接返回实参
+ results[#results+1] = obj
end
-
- return obj
end
local function stepRefOfGeneric(status, typeUnit, args, mode)
@@ -1548,7 +1547,7 @@ local function stepRefOfGeneric(status, typeUnit, args, mode)
and source.parent.type == 'funcargs' then
for index, arg in ipairs(source.parent) do
if arg == source then
- results[#results+1] = toValidGenericType(status, args[index])
+ appendValidGenericType(results, status, typeName, args[index])
end
end
end