diff options
Diffstat (limited to 'test-beta/hover')
-rw-r--r-- | test-beta/hover/init.lua | 1412 |
1 files changed, 0 insertions, 1412 deletions
diff --git a/test-beta/hover/init.lua b/test-beta/hover/init.lua deleted file mode 100644 index cb7d49f3..00000000 --- a/test-beta/hover/init.lua +++ /dev/null @@ -1,1412 +0,0 @@ -local core = require 'core.hover' -local files = require 'files' - -rawset(_G, 'TEST', true) - -function TEST(script) - return function (expect) - files.removeAll() - local start = script:find('<?', 1, true) - local finish = script:find('?>', 1, true) - local pos = (start + finish) // 2 + 1 - local new_script = script:gsub('<[!?]', ' '):gsub('[!?]>', ' ') - files.setText('', new_script) - local hover = core.byUri('', pos) - assert(hover) - expect = expect:gsub('^[\r\n]*(.-)[\r\n]*$', '%1'):gsub('\r\n', '\n') - local label = hover.label:gsub('^[\r\n]*(.-)[\r\n]*$', '%1'):gsub('\r\n', '\n') - assert(expect == label) - end -end - -TEST [[ -local function <?x?>(a, b) -end -]] -"function x(a: any, b: any)" - -TEST [[ -local function x(a, b) -end -<?x?>() -]] -"function x(a: any, b: any)" - -TEST [[ -local mt = {} -mt.__index = mt - -function mt:init(a, b, c) - return -end - -local obj = setmetatable({}, mt) - -obj:<?init?>(1, '测试') -]] -[[ -function mt:init(a: any, b: any, c: any) -]] - -TEST [[ -local mt = {} -mt.__index = mt -mt.type = 'Class' - -function mt:init(a, b, c) - return -end - -local obj = setmetatable({}, mt) - -obj:<?init?>(1, '测试') -]] -[[ -function Class:init(a: any, b: any, c: any) -]] - -TEST [[ -local mt = {} -mt.__index = mt -mt.__name = 'Class' - -function mt:init(a, b, c) - return -end - -local obj = setmetatable({}, mt) - -obj:<?init?>(1, '测试') -]] -[[ -function Class:init(a: any, b: any, c: any) -]] - -TEST [[ -local mt = {} -mt.__index = mt - -function mt:init(a, b, c) - return {} -end - -local obj = setmetatable({}, mt) - -obj:<?init?>(1, '测试') -]] -[[ -function mt:init(a: any, b: any, c: any) - -> table -]] - -TEST [[ -local mt = {} -mt.__index = mt - -function mt:init(a, b, c) - return {} -end - -local obj = setmetatable({}, mt) - -obj:init(1, '测试') -obj.<?init?>(obj, 1, '测试') -]] -[[ -function mt:init(a: any, b: any, c: any) - -> table -]] - -TEST [[ -function obj.xxx() -end - -obj.<?xxx?>() -]] -"function obj.xxx()" - -TEST [[ -obj.<?xxx?>() -]] -[[global obj.xxx: any]] - -TEST [[ -local <?x?> = 1 -]] -"local x: integer = 1" - -TEST [[ -<?x?> = 1 -]] -"global x: integer = 1" - -TEST [[ -local t = {} -t.<?x?> = 1 -]] -"field t.x: integer = 1" - -TEST [[ -t = {} -t.<?x?> = 1 -]] -"global t.x: integer = 1" - -TEST [[ -t = { - <?x?> = 1 -} -]] -"field x: integer = 1" - -TEST [[ -local <?obj?> = {} -]] -"local obj: {}" - -TEST [[ -local mt = {} -mt.__name = 'class' - -local <?obj?> = setmetatable({}, mt) -]] -"local obj: class {}" - -TEST [[ -local mt = {} -mt.name = 'class' -mt.__index = mt - -local <?obj?> = setmetatable({}, mt) -]] -[[ -local obj: class { - __index: table, - name: string = "class", -} -]] - -TEST [[ -local mt = {} -mt.TYPE = 'class' -mt.__index = mt - -local <?obj?> = setmetatable({}, mt) -]] -[[ -local obj: class { - TYPE: string = "class", - __index: table, -} -]] - -TEST [[ -local mt = {} -mt.Class = 'class' -mt.__index = mt - -local <?obj?> = setmetatable({}, mt) -]] -[[ -local obj: class { - Class: string = "class", - __index: table, -} -]] - --- TODO 支持自定义的函数库 ---TEST[[ ---local fs = require 'bee.filesystem' ---local <?root?> = fs.current_path() ---]] ---"local root: bee::filesystem" - -TEST [[ -<?print?>() -]] -[[ -function print(...) -]] - -TEST [[ -string.<?sub?>() -]] -[[ -function string.sub(s: string, i: integer, j?: integer) - -> string -]] - -TEST[[ -('xx'):<?sub?>() -]] -[[function string:sub(i: integer, j?: integer) - -> string]] - -TEST [[ -local <?v?> = collectgarbage() -]] -"local v: any" - -TEST [[ -local type -w2l:get_default()[<?type?>] -]] -"local type: any" - --- TODO 可选参数(或多原型) -TEST [[ -<?load?>() -]] -[=[ -function load(chunk: string|function, chunkname?: string, mode?: "b"|"t"|"bt", env?: table) - -> function - 2. error_message: string -]=] - -TEST [[ -string.<?lower?>() -]] -[[ -function string.lower(s: string) - -> string -]] - --- 不根据传入值推测参数类型 -TEST [[ -local function x(a, ...) -end - -<?x?>(1, 2, 3, 4, 5, 6, 7) -]] -[[ -function x(a: any, ...) -]] - -TEST [[ -local function x() - return y() -end - -<?x?>() -]] -[[ -function x() - -> any -]] - -TEST [[ -local mt = {} - -function mt:add(a, b) -end - -local function init() - return mt -end - -local t = init() -t:<?add?>() -]] -[[ -function mt:add(a: any, b: any) -]] - -TEST [[ -local mt = {} -mt.__index = mt - -function mt:add(a, b) -end - -local function init() - return setmetatable({}, mt) -end - -local t = init() -t:<?add?>() -]] -[[ -function mt:add(a: any, b: any) -]] - -TEST [[ -local <?t?> = - 1000 -]] -[[local t: integer = -1000]] - --- TODO 暂不支持 ---TEST [[ ---for <?c?> in io.lines() do ---end ---]] ---[[local c: string]] - -TEST [[ -local function f() - return ... -end -local <?n?> = f() -]] -[[local n: any]] - -TEST [[ -local <?n?> = table.unpack(t) -]] -[[local n: any]] - -TEST [[ -local <?n?> -table.pack(n) -]] -[[ -local n: any -]] - -TEST [[ -local s = <?'abc中文'?> -]] -[[9 个字节,5 个字符]] - -TEST [[ -local n = <?0xff?> -]] -[[255]] - -TEST [[ -local <?t?> = { - a = 1, - b = 2, - c = 3, -} -]] -[[ -local t: { - a: integer = 1, - b: integer = 2, - c: integer = 3, -} -]] - -TEST [[ -local <?t?> = {} -t.a = 1 -t.a = true -]] -[[ -local t: { - a: boolean|integer = 1|true, -} -]] - -TEST [[ -local <?t?> = { - a = 1, - [1] = 2, - [true] = 3, - [5.5] = 4, - [{}] = 5, - [function () end] = 6, - ["b"] = 7, - ["012"] = 8, -} -]] -[[ -local t: { - a: integer = 1, - [1]: integer = 2, - [true]: integer = 3, - [5.5]: integer = 4, - [table]: integer = 5, - [function]: integer = 6, - b: integer = 7, - ["012"]: integer = 8, -} -]] - -TEST [[ -local <?t?> = {} -t[#t+1] = 1 -t[#t+1] = 1 - -local any = collectgarbage() -t[any] = any -]] -[[ -local t: { - [integer]: integer = 1, -} -]] - -TEST[[ -local x = 1 -local y = x -print(<?y?>) -]] -[[ -local y: integer = 1 -]] - -TEST[[ -local mt = {} -mt.a = 1 -mt.b = 2 -mt.c = 3 -local <?obj?> = setmetatable({}, {__index = mt}) -]] -[[ -local obj: { - a: integer = 1, - b: integer = 2, - c: integer = 3, -} -]] - -TEST[[ -local mt = {} -mt.__index = {} - -function mt:test(a, b) - self:<?test?>() -end -]] -[[ -function mt:test(a: any, b: any) -]] - -TEST[[ -local mt = {} -mt.__index = mt -mt.__name = 'obj' - -function mt:remove() -end - -local <?self?> = setmetatable({ - id = 1, -}, mt) -]] -[[ -local self: obj { - __index: table, - __name: string = "obj", - id: integer = 1, - remove: function, -} -]] - -TEST [[ -print(<?utf8?>) -]] -[[ -global utf8: utf8* { - char: function, - charpattern: string, - codepoint: function, - codes: function, - len: function, - offset: function, -} -]] - -TEST [[ -print(io.<?stderr?>) -]] -[[ -global io.stderr: file* { - close: function, - flush: function, - lines: function, - read: function, - seek: function, - setvbuf: function, - write: function, -} -]] - -TEST [[ -print(<?io?>) -]] -[[ -global io: io* { - close: function, - flush: function, - input: function, - lines: function, - open: function, - output: function, - popen: function, - read: function, - stderr: file*, - stdin: file*, - stdout: file*, - tmpfile: function, - type: function, - write: function, -} -]] - -TEST [[ -local <?sssss?> = require 'utf8' -]] -[[ -local sssss: utf8* { - char: function, - charpattern: string, - codepoint: function, - codes: function, - len: function, - offset: function, -} -]] - -TEST [[ -function F(a) -end -function F(b) -end -function F(a) -end -<?F?>() -]] -[[ -(3 个定义,2 个原型) -(2) function F(a: any) -(1) function F(b: any) -]] - --- 不根据参数推断 ---TEST[[ ---function a(v) --- print(<?v?>) ---end ---a(1) ---]] ---[[ ---local v: number = 1 ---]] --- ---TEST[[ ---function a(v) --- print(<?v?>) ---end ---pcall(a, 1) ---]] ---[[ ---local v: number = 1 ---]] - ---TEST[[ ---function a(v) --- print(<?v?>) ---end ---xpcall(a, log.error, 1) ---]] ---[[ ---local v: number = 1 ---]] - -TEST[[ -function a(v) - return 'a' -end -local <?r?> = a(1) -]] -[[ -local r: string = "a" -]] - -TEST[[ -function a(v) - return 'a' -end -local _, <?r?> = pcall(a, 1) -]] -[[ -local r: string = "a" -]] - -TEST[[ -local <?n?> = rawlen() -]] -[[ -local n: integer -]] - -TEST[[ -<?next?>() -]] -[[ -function next(table: table, index?: any) - -> key: any - 2. value: any -]] - --- TODO 暂未实现 ---TEST[[ ---local <?n?> = pairs() ---]] ---[[ ---function n<next>(table: table [, index: any]) --- -> key: any, value: any ---]] - -TEST[[ -local <?x?> = '\a' -]] -[[local x: string = "\007"]] - -TEST [[ -local <?t?> = { - b = 1, - c = 2, - d = 3, - a = 4, - s = 5, - y = 6, - z = 7, - q = 8, - g = 9, - p = 10, - l = 11, -} -]] -[[ -local t: { - b: integer = 1, - c: integer = 2, - d: integer = 3, - a: integer = 4, - s: integer = 5, - y: integer = 6, - z: integer = 7, - q: integer = 8, - g: integer = 9, - p: integer = 10, - l: integer = 11, -} -]] - -TEST [[ -local function <?f?>() - return nil, nil -end -]] -[[ -function f() - -> nil - 2. nil -]] - -TEST [[ -local function f() - return nil -end -local <?x?> = f() -]] -[[ -local x: nil -]] - -TEST [[ -local function <?f?>() - return 1 - return nil -end -]] -[[ -function f() - -> integer|nil -]] - -TEST [[ -local <?t?> = { - b = 1, - c = 2, - d = 3, -} -local e = t.b -]] -[[ -local t: { - b: integer = 1, - c: integer = 2, - d: integer = 3, -} -]] - -TEST [[ -local <?t?> = { - b = 1, - c = 2, - d = 3, -} -g.e = t.b -]] -[[ -local t: { - b: integer = 1, - c: integer = 2, - d: integer = 3, -} -]] - -TEST [[ -local t = { - v = { - b = 1, - c = 2, - d = 3, - } -} -print(t.<?v?>) -]] -[[ -field t.v: { - b: integer = 1, - c: integer = 2, - d: integer = 3, -} -]] - -TEST [[ -local <?t?> = { - f = io.open(), -} -]] -[[ -local t: { - f: file*, -} -]] - -TEST [[ -io.<?popen?>() -]] -[[ -function io.popen(prog: string, mode?: "r"|"w") - -> file*? - 2. errmsg?: string -]] - -TEST [[ -<?_G?> -]] -[[ -global _G: _G { - _G: table, - _VERSION: string = "Lua 5.4", - arg: table, - assert: function, - bit32: table, - collectgarbage: function, - coroutine: table, - debug: table, - dofile: function, - error: function, - getfenv: function, - getmetatable: function, - io: table, - ipairs: function, - load: function, - loadfile: function, - loadstring: function, - math: table, - module: function, - next: function, - os: table, - package: table, - pairs: function, - pcall: function, - print: function, - rawequal: function, - rawget: function, - rawlen: function, - rawset: function, - require: function, - select: function, - setfenv: function, - setmetatable: function, - string: table, - table: table, - tonumber: function, - tostring: function, - type: function, - unpack: function, - utf8: table, - warn: function, - xpcall: function, -} -]] - -TEST [[ -local x -x = 1 -x = 1.0 - -print(<?x?>) -]] -[[ -local x: number = 1 -]] - -TEST [[ -local <?x?> <close> = 1 -]] -[[ -local x <close>: integer = 1 -]] - -TEST [[ -local function <?a?>(b) - return (b.c and a(b.c) or b) -end -]] -[[ -function a(b: table) - -> any -]] - -TEST [[ -local <?t?> = { - a = true -} - -local t2 = { - [t.a] = function () end, -} -]] -[[ -local t: { - a: boolean = true, -} -]] - -TEST[[ ----@class Class -local <?x?> = class() -]] -[[ -local x: Class -]] - -TEST[[ ----@class Class -<?x?> = class() -]] -[[ -global x: Class -]] - -TEST[[ -local t = { - ---@class Class - <?x?> = class() -} -]] -[[ -field x: Class -]] - -TEST[[ ----@type Class -local <?x?> = class() -]] -[[ -local x: Class -]] - -TEST[[ ----@type Class -<?x?> = class() -]] -[[ -global x: Class -]] - -TEST[[ -local t = { - ---@type Class - <?x?> = class() -} -]] -[[ -field x: Class -]] - -TEST[[ ----@type A|B|C -local <?x?> = class() -]] -[[ -local x: A|B|C -]] - -TEST[[ ----@class Class -local <?x?> = { - b = 1 -} -]] -[[ -local x: Class { - b: integer = 1, -} -]] - -TEST [[ ----@class Class -local mt = {} - ----@param t Class -function f(<?t?>) -end -]] -[[ -local t: Class -]] - -TEST [[ ----@class Class -local mt = {} - ----@param t Class -function f(t) - print(<?t?>) -end -]] -[[ -local t: Class {} -]] - -TEST [[ ----@class Class - ----@param k Class -for <?k?> in pairs(t) do -end -]] -[[ -local k: Class -]] - -TEST [[ ----@class Class - ----@param v Class -for k, <?v?> in pairs(t) do -end -]] -[[ -local v: Class -]] - -TEST [[ ----@return A|B ----@return C -local function <?f?>() -end -]] -[[ -function f() - -> A|B - 2. C -]] - -TEST [[ ----@generic T ----@param x T ----@return T -local function <?f?>(x) -end -]] -[[ -function f(x: <T>) - -> <T> -]] - -TEST [[ ----@return number -local function f() -end - -local <?r?> = f() -]] -[[ -local r: number -]] - -TEST [[ ----@generic T ----@param x T ----@return T -local function f(x) -end - -local <?r?> = f(1) -]] -[[ -local r: integer = 1 -]] - -TEST [[ ----@param x number ----@param y boolean -local function <?f?>(x, y) -end -]] -[[ -function f(x: number, y: boolean) -]] - -TEST [[ ----@vararg Class -local function f(...) - local _, <?x?> = ... -end -f(1, 2, 3) -]] -[[ -local x: Class -]] - -TEST [[ ----@vararg Class -local function f(...) - local <?t?> = {...} -end -f(1, 2, 3) -]] -[[ -local t: Class[] -]] - -TEST [[ ----@type string[] -local <?x?> -]] -[[ -local x: string[] -]] - -TEST [[ ----@type string[]|boolean -local <?x?> -]] -[[ -local x: boolean|string[] -]] - -TEST [[ ----@type string[] -local t -local <?x?> = t[1] -]] -[[ -local x: string -]] - --- TODO ---TEST [[ ------@type string[] ---local t ---for _, <?x?> in ipairs(t) do ---end ---]] ---[[ ---local x: string ---]] - ---TEST [[ ------@type string[] ---local t ---for _, <?x?> in pairs(t) do ---end ---]] ---[[ ---local x: string ---]] - ---TEST [[ ------@type string[] ---local t ---for <?k?>, v in pairs(t) do ---end ---]] ---[[ ---local k: integer ---]] - -TEST [[ ----@type table<ClassA, ClassB> -local <?x?> -]] -[[ -local x: table<ClassA, ClassB> -]] - ---TEST [[ ------@type table<ClassA, ClassB> ---local t ---for _, <?x?> in pairs(t) do ---end ---]] ---[[ ---local x: *ClassB ---]] - ---TEST [[ ------@type table<ClassA, ClassB> ---local t ---for <?k?>, v in pairs(t) do ---end ---]] ---[[ ---local k: *ClassA ---]] - -TEST [[ ----@type fun(x: number, y: number):boolean -local <?f?> -]] -[[ -function f(x: number, y: number) - -> boolean -]] - -TEST [[ ----@type fun(x: number, y: number):boolean -local f -local <?r?> = f() -]] -[[ -local r: boolean -]] - -TEST [[ ----@param f fun():void -function t(<?f?>) end -]] -[[ -function () - -> void -]] - -TEST [[ ----@type fun(a:any, b:any) -local f -local t = {f = f} -t:<?f?>() -]] -[[ -function f(a: any, b: any) -]] - -TEST [[ ----@param names string[] -local function f(<?names?>) -end -]] -[[ -local names: string[] -]] - -TEST [[ ----@return any -function <?f?>() - ---@type integer - local a - return a -end -]] -[[ -function f() - -> any -]] - -TEST [[ ----@return any -function f() - ---@type integer - local a - return a -end - -local <?x?> = f() -]] -[[ -local x: integer -]] - -TEST [[ ----@overload fun(y: boolean) ----@param x number ----@param y boolean ----@param z string -function f(x, y, z) end - -print(<?f?>) -]] -[[ -(2 个定义,2 个原型) -(1) function f(x: number, y: boolean, z: string) -(1) function f(y: boolean) -]] - -TEST [[ ----@type fun(x?: boolean):boolean? -local <?f?> -]] -[[ -function f(x?: boolean) - -> boolean? -]] - -TEST [[ ----@param x? number ----@param y? boolean ----@return table?, string? -local function <?f?>(x, y) -end -]] -[[ -function f(x?: number, y?: boolean) - -> table? - 2. string? -]] - -TEST [[ ----@return table first, string? second -local function <?f?>(x, y) -end -]] -[[ -function f(x: any, y: any) - -> first: table - 2. second?: string -]] - -TEST [[ ----@class Class ----@field x number ----@field y number ----@field z string -local <?t?> -]] -[[ -local t: Class { - x: number, - y: number, - z: string, -} -]] - -TEST [[ ----@class A - ----@type <?A?> -]] -[[ -class A -]] - -TEST [[ ----@type string | "'enum1'" | "'enum2'" -local <?t?> -]] -[[ -local t: string|'enum1'|'enum2' -]] - -TEST [[ ----@alias A string | "'enum1'" | "'enum2'" - ----@type <?A?> -]] -[[ -展开为 string|'enum1'|'enum2' -]] - -TEST [[ ----@alias A string | "'enum1'" | "'enum2'" - ----@type A -local <?t?> -]] -[[ -local t: string|'enum1'|'enum2' -]] - -TEST [[ ----@type string ----| "'enum1'" ----| "'enum2'" -local <?t?> -]] -[[ -local t: string|'enum1'|'enum2' -]] - -TEST [[ ----@class c -t = {} - ----@overload fun() -function <?t?>.f() end -]] -[[ -global t: c { - f: function, -} -]] - -TEST [[ ----@class c -local t = {} - ----@overload fun() -function t.<?f?>() end -]] -[[ -(2 个定义,1 个原型) -(2) function c.f() -]] - -TEST [[ ----@class c -t = {} - ----@overload fun() -function t.<?f?>() end -]] -[[ -(2 个定义,1 个原型) -(2) function t.f() -]] - -TEST [[ ----@class C ----@field field any - ----@type C -local <?c?> -]] -[[ -local c: C { - field: any, -} -]] - -TEST [[ ----@class C ----@field field any - ----@return C -local function f() end - -local <?c?> = f() -]] -[[ -local c: C { - field: any, -} -]] |