From 10275c3667256e720371ce5280658c3e4f950d2f Mon Sep 17 00:00:00 2001 From: fesily Date: Tue, 16 Jan 2024 13:38:52 +0800 Subject: automatic derivation function param type --- script/vm/compiler.lua | 31 +++++++++++++++++++++++++++++++ test/diagnostics/await-in-sync.lua | 2 +- test/diagnostics/redundant-parameter.lua | 2 +- test/hover/init.lua | 4 ++-- test/signature/init.lua | 14 +++++++------- 5 files changed, 42 insertions(+), 11 deletions(-) diff --git a/script/vm/compiler.lua b/script/vm/compiler.lua index 8a1fa96a..7e12c32a 100644 --- a/script/vm/compiler.lua +++ b/script/vm/compiler.lua @@ -1090,6 +1090,37 @@ local function compileLocal(source) end end end + if not hasDocArg + and func.parent.type == 'local' then + local refs = vm.getRefs(func, function (_) + return false + end) + local findCall + if refs then + for i, ref in ipairs(refs) do + if ref.parent.type == 'call' then + findCall = ref.parent + break + end + end + end + if findCall and findCall.args then + local index + for i, arg in ipairs(source.parent) do + if arg == source then + index = i + break + end + end + if index then + local callerArg = findCall.args[index] + if callerArg then + hasDocArg = true + vm.setNode(source, vm.compileNode(callerArg)) + end + end + end + end if not hasDocArg then vm.setNode(source, vm.declareGlobal('type', 'any')) end diff --git a/test/diagnostics/await-in-sync.lua b/test/diagnostics/await-in-sync.lua index 323c1113..7647f2eb 100644 --- a/test/diagnostics/await-in-sync.lua +++ b/test/diagnostics/await-in-sync.lua @@ -119,7 +119,7 @@ end TEST [[ local function f(cb) - cb() + () end local function af() diff --git a/test/diagnostics/redundant-parameter.lua b/test/diagnostics/redundant-parameter.lua index fabe3340..520a6381 100644 --- a/test/diagnostics/redundant-parameter.lua +++ b/test/diagnostics/redundant-parameter.lua @@ -94,7 +94,7 @@ print(1, 2, 3, 4, 5) TEST [[ local function f(callback) - callback(1, 2, 3) + callback(, , ) end f(function () end) ]] diff --git a/test/hover/init.lua b/test/hover/init.lua index 63220a59..851443ec 100644 --- a/test/hover/init.lua +++ b/test/hover/init.lua @@ -276,7 +276,7 @@ function string.lower(s: string|number) -> string ]] --- 不根据传入值推测参数类型 +-- 根据传入值推测参数类型 TEST [[ local function x(a, ...) end @@ -284,7 +284,7 @@ end (1, 2, 3, 4, 5, 6, 7) ]] [[ -function x(a: any, ...any) +function x(a: integer, ...any) ]] TEST [[ diff --git a/test/signature/init.lua b/test/signature/init.lua index f46ce017..2bf4b824 100644 --- a/test/signature/init.lua +++ b/test/signature/init.lua @@ -88,7 +88,7 @@ end x(1, 2, 3, ]] -{'function x(a: any, )'} +{'function x(a: integer, )'} TEST [[ (''):sub( @@ -106,7 +106,7 @@ end f(1, 'string') ]] -{'function f(a: any, , c: any)'} +{'function f(a: integer, , c: any)'} TEST [[ pcall(function () end) @@ -156,7 +156,7 @@ end f({},) ]] -{'function f(a: any, , c: any)'} +{'function f(a: table, , c: any)'} TEST [[ for _ in pairs() do @@ -188,7 +188,7 @@ end x( aaaa , 2) ]] -{"function x(, b: any)"} +{"function x(, b: integer)"} TEST [[ local function x(a, b) @@ -196,7 +196,7 @@ end x( aaaa , 2) ]] -{'function x(, b: any)'} +{'function x(, b: integer)'} TEST [[ local function x(a, b) @@ -204,7 +204,7 @@ end x(aaaa , 2) ]] -{'function x(a: any, )'} +{'function x(a: any, )'} TEST [[ local function x(a, b) @@ -212,7 +212,7 @@ end x(aaaa , 2 ) ]] -{'function x(a: any, )'} +{'function x(a: any, )'} TEST [[ local fooC -- cgit v1.2.3 From 259d21f66c34468e7d7860d87463e586ef805892 Mon Sep 17 00:00:00 2001 From: fesily Date: Tue, 16 Jan 2024 13:41:20 +0800 Subject: compileLocal add async --- script/vm/compiler.lua | 1 + 1 file changed, 1 insertion(+) diff --git a/script/vm/compiler.lua b/script/vm/compiler.lua index 7e12c32a..96db7051 100644 --- a/script/vm/compiler.lua +++ b/script/vm/compiler.lua @@ -1030,6 +1030,7 @@ local function compileForVars(source, target) return false end +---@async ---@param source parser.object local function compileLocal(source) local myNode = vm.setNode(source, source) -- cgit v1.2.3 From a90d1d2c4990fed2db4ac5b2341ff12193389c1c Mon Sep 17 00:00:00 2001 From: fesily Date: Wed, 17 Jan 2024 17:16:48 +0800 Subject: use func.parent.ref --- script/vm/compiler.lua | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/script/vm/compiler.lua b/script/vm/compiler.lua index 96db7051..2222fa9b 100644 --- a/script/vm/compiler.lua +++ b/script/vm/compiler.lua @@ -1030,7 +1030,6 @@ local function compileForVars(source, target) return false end ----@async ---@param source parser.object local function compileLocal(source) local myNode = vm.setNode(source, source) @@ -1093,9 +1092,7 @@ local function compileLocal(source) end if not hasDocArg and func.parent.type == 'local' then - local refs = vm.getRefs(func, function (_) - return false - end) + local refs = func.parent.ref local findCall if refs then for i, ref in ipairs(refs) do -- cgit v1.2.3