From 735628bf4bf6cf0e9bbf87da57aacca80a48090c Mon Sep 17 00:00:00 2001 From: Sergey Bronnikov Date: Thu, 17 Sep 2026 16:30:25 +0300 Subject: [PATCH 1/3] fix(std): correct jit library annotations to match LuaJIT API Fix the malformed @overload comments of jit.on/off/flush, make their function argument optional, type the jit.opt.start flags as string|number, type jit.version_num as integer, extend the jit.arch union and add the LuaJIT jit.security and jit.attach functions. Part of tarantool/tarantool#13024 --- .../resources/std/jit.lua | 25 +++++++++++-------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/crates/emmylua_code_analysis/resources/std/jit.lua b/crates/emmylua_code_analysis/resources/std/jit.lua index 75e1f0676..9b320e928 100644 --- a/crates/emmylua_code_analysis/resources/std/jit.lua +++ b/crates/emmylua_code_analysis/resources/std/jit.lua @@ -5,24 +5,20 @@ --- @version JIT --- @class jitlib --- @field version string ---- @field version_num number +--- @field version_num integer --- @field os 'Windows' | 'Linux' | 'OSX' | 'BSD' | 'POSIX' | 'Other' ---- @field arch 'x86' | 'x64' | 'arm' | 'arm64' | 'arm64be' | 'ppc' | 'ppc64' | 'ppc64le' | 'mips' | 'mipsel' | 'mips64' | 'mips64el' | string +--- @field arch 'x86' | 'x64' | 'arm' | 'arm64' | 'arm64be' | 'ppc' | 'ppc64' | 'ppc64le' | 'mips' | 'mipsel' | 'mips32r6' | 'mips32r6el' | 'mips64' | 'mips64el' | 'mips64r6' | 'mips64r6el' | string jit = {} ---- @overload fun(...): ... param func function|boolean ---- @param func function|boolean +--- @param func? function | boolean --- @param recursive? boolean function jit.on(func, recursive) end ---- @overload fun(...): ... param func function|boolean ---- @param func function|boolean +--- @param func? function | boolean --- @param recursive? boolean function jit.off(func, recursive) end ---- @overload fun(...): ... overload fun(tr: number) ---- @overload fun(tr: number) ---- @param func function | boolean +--- @param func? function | boolean | integer --- @param recursive? boolean function jit.flush(func, recursive) end @@ -33,7 +29,16 @@ function jit.status() end jit.opt = {} ---- @param ... any flags +--- @param ... string | number function jit.opt.start(...) end +--- @param mode? 'prng' | 'strhash' | 'strid' | 'mcode' +--- @return integer status +--- @nodiscard +function jit.security(mode) end + +--- @param func function +--- @param event? string +function jit.attach(func, event) end + return jit From a3cdfe31fdf65280da0d38eab52eb43582e9688b Mon Sep 17 00:00:00 2001 From: Sergey Bronnikov Date: Thu, 17 Sep 2026 16:30:41 +0300 Subject: [PATCH 2/3] fix(std): correct jit.profile annotations Make the profile.start mode argument optional, name the callback vmstate argument after the LuaJIT implementation and document the string returned by profile.dumpstack. Part of tarantool/tarantool#13024 --- crates/emmylua_code_analysis/resources/std/jit/profile.lua | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/crates/emmylua_code_analysis/resources/std/jit/profile.lua b/crates/emmylua_code_analysis/resources/std/jit/profile.lua index 0631ae84b..93b5de95d 100644 --- a/crates/emmylua_code_analysis/resources/std/jit/profile.lua +++ b/crates/emmylua_code_analysis/resources/std/jit/profile.lua @@ -4,15 +4,16 @@ local profile = {} ---- @param mode string ---- @param func fun(L: thread, samples: integer, vmst: string) +--- @param mode? string +--- @param func fun(L: thread, samples: integer, vmstate: string) function profile.start(mode, func) end function profile.stop() end ---- @overload fun(th: thread, fmt: string, depth: integer) +--- @overload fun(th: thread, fmt: string, depth: integer): string --- @param fmt string --- @param depth integer +--- @return string dump function profile.dumpstack(fmt, depth) end return profile From 4a80111f1afa12be609a577be07bc9e38e7e863a Mon Sep 17 00:00:00 2001 From: Sergey Bronnikov Date: Thu, 17 Sep 2026 16:31:30 +0300 Subject: [PATCH 3/3] fix(std): correct jit.util annotations Trace functions take a trace number, not the unused Trace type, so type their tr arguments as integer. Accept function|Proto for the reflection functions and type the funcinfo proto field as a single Proto. Update the tracesnap annotation for LuaJIT commit 8e6520a7 [1]: the prototype is now tracesnap(tr, sn[, getpos]) and it returns the PC position as a second result when getpos is true. Declare getpos in the signature so the third argument is accepted. Part of tarantool/tarantool#13024 1. https://github.com/LuaJIT/LuaJIT/commit/8e6520a7aecd0517e792b359afbbfd7274791f5f --- .../resources/std/jit/util.lua | 34 +++++++++---------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/crates/emmylua_code_analysis/resources/std/jit/util.lua b/crates/emmylua_code_analysis/resources/std/jit/util.lua index 1e79a145b..33d1c6342 100644 --- a/crates/emmylua_code_analysis/resources/std/jit/util.lua +++ b/crates/emmylua_code_analysis/resources/std/jit/util.lua @@ -2,12 +2,12 @@ --- @meta jit.util --- @version JIT ---- @class Trace ---- @class Proto +--- @class JIT.Proto local util = {} --- @class jit.funcinfo.lua +--- @field proto JIT.Proto local funcinfo = { linedefined = 0, lastlinedefined = 0, @@ -22,8 +22,6 @@ local funcinfo = { children = false, source = "", loc = "", - ---@type Proto[] - proto = {}, } --- @class jit.funcinfo.c @@ -33,23 +31,23 @@ local funcinfo2 = { upvalues = 0, } ---- @param func function +--- @param func function | JIT.Proto --- @param pc? integer ---- @return jit.funcinfo.c|jit.funcinfo.lua info +--- @return jit.funcinfo.c | jit.funcinfo.lua info function util.funcinfo(func, pc) end ---- @param func function +--- @param func function | JIT.Proto --- @param pc integer --- @return integer? ins --- @return integer? m function util.funcbc(func, pc) end ---- @param func function +--- @param func function | JIT.Proto --- @param idx integer --- @return any? k function util.funck(func, idx) end ---- @param func function +--- @param func function | JIT.Proto --- @param idx integer --- @return string? name function util.funcuvname(func, idx) end @@ -63,11 +61,11 @@ local traceinfo = { linktype = "", } ---- @param tr Trace +--- @param tr integer --- @return jit.traceinfo? info function util.traceinfo(tr) end ---- @param tr Trace +--- @param tr integer --- @param ref integer --- @return integer? m --- @return integer? ot @@ -76,7 +74,7 @@ function util.traceinfo(tr) end --- @return integer? prev function util.traceir(tr, ref) end ---- @param tr Trace +--- @param tr integer --- @param idx integer --- @return any? k --- @return integer? t @@ -85,19 +83,21 @@ function util.tracek(tr, idx) end --- @class jit.snap: integer[] ---- @param tr Trace ---- @param sn integer +--- @param tr integer +--- @param sn integer +--- @param getpos? boolean --- @return jit.snap? snap -function util.tracesnap(tr, sn) end +--- @return integer? pos +function util.tracesnap(tr, sn, getpos) end ---- @param tr Trace +--- @param tr integer --- @return string? mcode --- @return integer? addr --- @return integer? loop function util.tracemc(tr) end --- @overload fun(exitno: integer): integer ---- @param tr Trace +--- @param tr integer --- @param exitno integer --- @return integer? addr function util.traceexitstub(tr, exitno) end