summaryrefslogtreecommitdiff
path: root/script/parser
diff options
context:
space:
mode:
author最萌小汐 <sumneko@hotmail.com>2021-03-15 15:54:18 +0800
committer最萌小汐 <sumneko@hotmail.com>2021-03-15 15:54:18 +0800
commit4e68872ea96a53f9c7ad5e11c83794b92f477fb4 (patch)
treee18475aefccae62be35ba93d6a600e036fd0cdab /script/parser
parentba041ed17bac8a00a0e83ee289e7a257bf6f3d8b (diff)
downloadlua-language-server-4e68872ea96a53f9c7ad5e11c83794b92f477fb4.zip
#close 289
Diffstat (limited to 'script/parser')
-rw-r--r--script/parser/luadoc.lua42
1 files changed, 42 insertions, 0 deletions
diff --git a/script/parser/luadoc.lua b/script/parser/luadoc.lua
index dad32378..1b48719d 100644
--- a/script/parser/luadoc.lua
+++ b/script/parser/luadoc.lua
@@ -1103,6 +1103,47 @@ local function bindDocsBetween(sources, binded, bindSources, start, finish)
end
end
+local function bindParamAndReturnIndex(binded)
+ local func
+ for _, source in ipairs(binded[1].bindSources) do
+ if source.type == 'function' then
+ func = source
+ break
+ end
+ end
+ if not func then
+ return
+ end
+ if not func.args then
+ return
+ end
+ local paramIndex = 0
+ local parent = func.parent
+ if parent.type == 'setmethod' then
+ paramIndex = paramIndex + 1
+ end
+ local paramMap = {}
+ for _, param in ipairs(func.args) do
+ paramIndex = paramIndex + 1
+ if param[1] then
+ paramMap[param[1]] = paramIndex
+ end
+ end
+ local returnIndex = 0
+ for _, doc in ipairs(binded) do
+ if doc.type == 'doc.param' then
+ if doc.extends then
+ doc.extends.paramIndex = paramMap[doc.param[1]]
+ end
+ elseif doc.type == 'doc.return' then
+ for _, rtn in ipairs(doc.returns) do
+ returnIndex = returnIndex + 1
+ rtn.returnIndex = returnIndex
+ end
+ end
+ end
+end
+
local function bindDoc(sources, lns, binded)
if not binded then
return
@@ -1124,6 +1165,7 @@ local function bindDoc(sources, lns, binded)
if #bindSources == 0 then
bindDocsBetween(sources, binded, bindSources, nstart, nfinish)
end
+ bindParamAndReturnIndex(binded)
end
local function bindDocs(state)