summaryrefslogtreecommitdiff
path: root/test/references/all.lua
diff options
context:
space:
mode:
author最萌小汐 <sumneko@hotmail.com>2021-06-09 18:09:49 +0800
committer最萌小汐 <sumneko@hotmail.com>2021-06-09 18:09:49 +0800
commitb21f5d2cd9eaf02986ba526f58f0c5fedbd1fde3 (patch)
treefe489b14cf31612fb9e85cb2e033c841d50dbe33 /test/references/all.lua
parent3945d61e1a7dd20b33f7bcd4d5c9c5f09d77b510 (diff)
downloadlua-language-server-b21f5d2cd9eaf02986ba526f58f0c5fedbd1fde3.zip
improve
Diffstat (limited to 'test/references/all.lua')
-rw-r--r--test/references/all.lua135
1 files changed, 135 insertions, 0 deletions
diff --git a/test/references/all.lua b/test/references/all.lua
index c27beb3c..a9442ae1 100644
--- a/test/references/all.lua
+++ b/test/references/all.lua
@@ -76,3 +76,138 @@ local function f() end
local a, b = f()
return a.x, b.<!x!>
]]
+
+TEST [[
+local <?mt?> = {}
+function <!mt!>:x()
+ <!self!>:x()
+end
+]]
+
+TEST [[
+local mt = {}
+function mt:<?x?>()
+ self:<!x!>()
+end
+]]
+
+TEST [[
+---@class Dog
+local mt = {}
+function mt:<?eat?>()
+end
+
+---@class Master
+local mt2 = {}
+function mt2:init()
+ ---@type Dog
+ local foo = self:doSomething()
+ ---@type Dog
+ self.dog = getDog()
+end
+function mt2:feed()
+ self.dog:<!eat!>()
+end
+function mt2:doSomething()
+end
+]]
+
+-- 泛型的反向搜索
+TEST [[
+---@class Dog
+local <?Dog?> = {}
+
+---@generic T
+---@param type1 T
+---@return T
+function foobar(type1)
+end
+
+local <!v1!> = foobar(<!Dog!>)
+]]
+
+TEST [[
+---@class Dog
+local Dog = {}
+function Dog:<?eat?>()
+end
+
+---@generic T
+---@param type1 T
+---@return T
+function foobar(type1)
+ return {}
+end
+
+local v1 = foobar(Dog)
+v1:<!eat!>()
+]]
+
+TEST [[
+---@class Dog
+local Dog = {}
+function Dog:<?eat?>()
+end
+
+---@class Master
+local Master = {}
+
+---@generic T
+---@param type1 string
+---@param type2 T
+---@return T
+function Master:foobar(type1, type2)
+ return {}
+end
+
+local v1 = Master:foobar("", Dog)
+v1.<!eat!>()
+]]
+
+TEST [[
+---@class A
+local <?A?>
+
+---@generic T
+---@param self T
+---@return T
+function m.f(self) end
+
+local <!b!> = m.f(<!A!>)
+]]
+
+TEST [[
+---@class A
+local <?A?>
+
+---@generic T
+---@param self T
+---@return T
+function m:f() end
+
+local <!b!> = m.f(<!A!>)
+]]
+
+TEST [[
+---@class A
+local <?A?>
+
+---@generic T
+---@param self T
+---@return T
+function <!A!>.f(self) end
+
+local <!b!> = <!A!>:f()
+]]
+
+TEST [[
+---@class A
+local <?A?>
+
+---@generic T
+---@param self T
+---@return T
+function <!A!>:f() end
+
+local <!b!> = <!A!>:f()
+]]