summaryrefslogtreecommitdiff
path: root/test/signature
diff options
context:
space:
mode:
author最萌小汐 <sumneko@hotmail.com>2019-11-23 00:05:30 +0800
committer最萌小汐 <sumneko@hotmail.com>2019-11-23 00:05:30 +0800
commit6da2b175e20ed3c03b0dfcfc9046de1e0e5d4444 (patch)
treefdc22d78150fd1c5edc46732c8b151ccfefb519f /test/signature
parentd0ff66c9abe9d6abbca12fd811e0c3cb69c1033a (diff)
downloadlua-language-server-6da2b175e20ed3c03b0dfcfc9046de1e0e5d4444.zip
正路目录
Diffstat (limited to 'test/signature')
-rw-r--r--test/signature/init.lua135
1 files changed, 135 insertions, 0 deletions
diff --git a/test/signature/init.lua b/test/signature/init.lua
new file mode 100644
index 00000000..d5bc19c0
--- /dev/null
+++ b/test/signature/init.lua
@@ -0,0 +1,135 @@
+local parser = require 'parser'
+local core = require 'core'
+local buildVM = require 'vm'
+
+rawset(_G, 'TEST', true)
+
+function TEST(script)
+ return function (expect)
+ local pos = script:find('$', 1, true)
+ local new_script = script:gsub('%$', '')
+ local ast = parser:parse(new_script, 'lua', 'Lua 5.3')
+ local vm = buildVM(ast)
+ assert(vm)
+ local hovers = core.signature(vm, pos)
+ if hovers then
+ assert(expect)
+ local hover = hovers[#hovers]
+
+ local label = hover.label:gsub('^[\r\n]*(.-)[\r\n]*$', '%1'):gsub('\r\n', '\n')
+ expect.label = expect.label:gsub('^[\r\n]*(.-)[\r\n]*$', '%1'):gsub('\r\n', '\n')
+ local arg = hover.argLabel
+
+ assert(expect.label == label)
+ assert(expect.arg[1] == arg[1])
+ assert(expect.arg[2] == arg[2])
+ else
+ assert(expect == nil)
+ end
+ end
+end
+
+TEST [[
+local function x(a, b)
+end
+
+x($
+]]
+{
+ label = "x(a: any, b: any)",
+ arg = {3, 8},
+}
+
+TEST [[
+local function x(a, b)
+end
+
+x($)
+]]
+{
+ label = "x(a: any, b: any)",
+ arg = {3, 8},
+}
+
+TEST [[
+local function x(a, b)
+end
+
+x(xxx$)
+]]
+{
+ label = "x(a: any, b: any)",
+ arg = {3, 8},
+}
+
+TEST [[
+local function x(a, b)
+end
+
+x(xxx, $)
+]]
+{
+ label = "x(a: any, b: any)",
+ arg = {11, 16},
+}
+
+TEST [[
+function mt:f(a)
+end
+
+mt:f($
+]]
+{
+ label = 'mt:f(a: any)',
+ arg = {6, 11},
+}
+
+TEST [[
+(''):sub($
+]]
+{
+ label = [[
+*string:sub(i: integer [, j: integer(-1)])
+]],
+ arg = {13, 22},
+}
+
+TEST [[
+(''):sub(1)$
+]]
+(nil)
+
+TEST [[
+local function f(a, b, c)
+end
+
+f(1, 'string$')
+]]
+(nil)
+
+TEST [[
+pcall(function () $ end)
+]]
+(nil)
+
+TEST [[
+table.unpack {$}
+]]
+(nil)
+
+TEST [[
+---@type fun(x: number, y: number):boolean
+local zzzz
+zzzz($)
+]]
+{
+ label = [[
+zzzz(x: number, y: number)
+]],
+ arg = {6, 14},
+}
+
+TEST [[
+('abc'):format(f($))
+]]
+(nil)