From c73ea4485655f0a265669cfb7bba28dcc8dffedb Mon Sep 17 00:00:00 2001 From: Oscar Wallberg Date: Sun, 5 Oct 2025 00:43:23 +0200 Subject: [PATCH] fix(meta.uv): update file to latest and suppress deprecation warnings --- lua/meta/uv.lua | 729 +++++++++++++++++++++++++++++++----------------- 1 file changed, 467 insertions(+), 262 deletions(-) diff --git a/lua/meta/uv.lua b/lua/meta/uv.lua index 3c4d6a7..e0f3ef2 100644 --- a/lua/meta/uv.lua +++ b/lua/meta/uv.lua @@ -1,4 +1,5 @@ ---@alias vim.uv uv +---@diagnostic disable: deprecated -- source: https://github.com/Bilal2453/luvit-meta --[[ @@ -287,7 +288,7 @@ --- metamethod ---- `buffer`: a `string` or a sequential `table` of `string`s ---- `threadargs`: variable arguments (`...`) of type `nil`, `boolean`, `number`, ---- `string`, or `userdata` +--- `string`, or `userdata`, numbers of argument limited to 9. --- ---@namespace ---@class uv @@ -296,7 +297,9 @@ local uv = {} ---@alias uv.aliases.buffer string|string[] ----@alias uv.aliases.threadargs userdata|string|number|boolean|nil +---@alias uv.aliases.threadargs userdata|string|number|boolean|nil # numbers of argument limited to 9. + + --- ---@section Contents @@ -336,6 +339,8 @@ local uv = {} -- TODO: above section should probably not be hardcoded + + --- ---In libuv, errors are negative numbered constants; however, while those errors are exposed through `uv.errno`, ---the functions used to handle them are not exposed to luv users. Instead, if an @@ -368,6 +373,8 @@ local uv = {} ---@type uv.errno uv.errno = {} + + --- ---@section Version Checking --- @@ -389,6 +396,8 @@ function uv.version() end ---@nodiscard function uv.version_string() end + + --- ---The event loop is the central part of libuv's functionality. It takes care of -- polling for I/O and scheduling callbacks to be run based on different sources of events. @@ -564,6 +573,8 @@ function uv.update_time() end ---@param callback fun(handle: uv.aliases.handle_instances) function uv.walk(callback) end + + --- ---`uv_req_t` is the base type for all libuv request types. --- @@ -572,30 +583,30 @@ function uv.walk(callback) end local uv_req_t = {} ---@alias uv.aliases.req_struct_name ----|'unknown' 0 ----|'req' 1 ----|'connect' 2 ----|'write' 3 ----|'shutdown' 4 ----|'udp_send' 5 ----|'fs' 6 ----|'work' 7 ----|'getaddrinfo' 8 ----|'getnameinfo' 9 ----|'random' 10 +---|'unknown' # 0 +---|'req' # 1 +---|'connect' # 2 +---|'write' # 3 +---|'shutdown' # 4 +---|'udp_send' # 5 +---|'fs' # 6 +---|'work' # 7 +---|'getaddrinfo' # 8 +---|'getnameinfo' # 9 +---|'random' # 10 ---@alias uv.aliases.req_struct_type ----|0 unknown ----|1 req ----|2 connect ----|3 write ----|4 shutdown ----|5 udp_send ----|6 fs ----|7 work ----|8 getaddrinfo ----|9 getnameinfo ----|10 random +---|0 # unknown +---|1 # req +---|2 # connect +---|3 # write +---|4 # shutdown +---|5 # udp_send +---|6 # fs +---|7 # work +---|8 # getaddrinfo +---|9 # getnameinfo +---|10 # random --- ---Cancel a pending request. Fails if the request is executing or has finished @@ -617,6 +628,8 @@ uv_req_t.cancel = uv.cancel function uv.req_get_type(req) end uv_req_t.get_type = uv.req_get_type + + --- ---`uv_handle_t` is the base type for all libuv handle types. All API functions ---defined here work with any handle type. @@ -636,44 +649,44 @@ local uv_handle_t = {} ---|uv_fs_poll_t ---@alias uv.aliases.handle_struct_name ----|'unknown' 0 ----|'"async"' 1 ----|'check' 2 ----|'fs_event' 3 ----|'fs_poll' 4 ----|'handle' 5 ----|'idle' 6 ----|'pipe' 7 ----|'poll' 8 ----|'prepare' 9 ----|'process' 10 ----|'stream' 11 ----|'tcp' 12 ----|'timer' 13 ----|'tty' 14 ----|'udp' 15 ----|'signal' 16 ----|'file' 17 +---|'unknown' # 0 +---|'"async"' # 1 +---|'check' # 2 +---|'fs_event' # 3 +---|'fs_poll' # 4 +---|'handle' # 5 +---|'idle' # 6 +---|'pipe' # 7 +---|'poll' # 8 +---|'prepare' # 9 +---|'process' # 10 +---|'stream' # 11 +---|'tcp' # 12 +---|'timer' # 13 +---|'tty' # 14 +---|'udp' # 15 +---|'signal' # 16 +---|'file' # 17 ---@alias uv.aliases.handle_struct_type ----|0 unknown ----|1 async ----|2 check ----|3 fs_event ----|4 fs_poll ----|5 handle ----|6 idle ----|7 pipe ----|8 poll ----|9 prepare ----|10 process ----|11 stream ----|12 tcp ----|13 timer ----|14 tty ----|15 udp ----|16 signal ----|17 file +---|0 # unknown +---|1 # async +---|2 # check +---|3 # fs_event +---|4 # fs_poll +---|5 # handle +---|6 # idle +---|7 # pipe +---|8 # poll +---|9 # prepare +---|10 # process +---|11 # stream +---|12 # tcp +---|13 # timer +---|14 # tty +---|15 # udp +---|16 # signal +---|17 # file --- ---Returns `true` if the handle is active, `false` if it's inactive. What "active” @@ -819,6 +832,8 @@ uv_handle_t.fileno = uv.fileno function uv.handle_get_type(handle) end uv_handle_t.get_type = uv.handle_get_type + + --- ---@section Reference counting --- @@ -834,6 +849,8 @@ uv_handle_t.get_type = uv.handle_get_type ---more detailed explanation on what being active involves. --- + + --- ---Timer handles are used to schedule callbacks to be called in the future. --- @@ -944,6 +961,8 @@ uv_timer_t.get_repeat = uv.timer_get_repeat function uv.timer_get_due_in(timer) end uv_timer_t.get_due_in = uv.timer_get_due_in + + --- ---Prepare handles will run the given callback once per loop iteration, right ---before polling for I/O. @@ -987,6 +1006,7 @@ uv_prepare_t.start = uv.prepare_start function uv.prepare_stop(prepare) end uv_prepare_t.stop = uv.prepare_stop + --- ---Check handles will run the given callback once per loop iteration, right after ---polling for I/O. @@ -1029,6 +1049,8 @@ uv_check_t.start = uv.check_start function uv.check_stop(check) end uv_check_t.stop = uv.check_stop + + --- ---Idle handles will run the given callback once per loop iteration, right before ---the `uv_prepare_t` handles. @@ -1078,6 +1100,8 @@ uv_idle_t.start = uv.idle_start function uv.idle_stop(idle) end uv_idle_t.stop = uv.idle_stop + + --- ---Async handles allow the user to "wakeup" the event loop and get a callback ---called from another thread. @@ -1131,6 +1155,8 @@ function uv.new_async(callback) end function uv.async_send(async, ...) end uv_async_t.send = uv.async_send + + --- ---Poll handles are used to watch file descriptors for readability and writability, ---similar to the purpose of [poll(2)](http://linux.die.net/man/2/poll). @@ -1227,6 +1253,8 @@ uv_poll_t.start = uv.poll_start function uv.poll_stop(poll) end uv_poll_t.stop = uv.poll_stop + + --- ---Signal handles implement Unix style signal handling on a per-event loop bases. --- @@ -1278,41 +1306,41 @@ uv_poll_t.stop = uv.poll_stop local uv_signal_t = {} ---@alias uv.aliases.signals ----| "sigabrt" Abort signal from abort(3) ----| "sigalrm" Timer signal from alarm(2) ----| "sigbus" Bus error (bad memory access) ----| "sigchld" Child stopped or terminated ----| "sigcont" Continue if stopped ----| "sigfpe" Floating-point exception ----| "sighup" Hangup detected on controlling terminal or death of controlling process ----| "sigill" Illegal Instruction ----| "sigint" Interrupt from keyboard ----| "sigio" I/O now possible (4.2BSD) ----| "sigiot" IOT trap. A synonym for sigabrt ----| "sigkill" Kill signal ----| "sigpipe" Broken pipe: write to pipe with no readers; see pipe(7) ----| "sigpoll" Pollable event (Sys V); synonym for sigIO ----| "sigprof" Profiling timer expired ----| "sigpwr" Power failure (System V) ----| "sigquit" Quit from keyboard ----| "sigsegv" Invalid memory reference ----| "sigstkflt" Stack fault on coprocessor ----| "sigstop" Stop process ----| "sigtstp" Stop typed at terminal ----| "sigsys" Bad system call (SVr4); see also seccomp(2) ----| "sigterm" Termination signal ----| "sigtrap" Trace/breakpoint trap ----| "sigttin" Terminal input for background process ----| "sigttou" Terminal output for background process ----| "sigurg" Urgent condition on socket (4.2BSD) ----| "sigusr1" User-defined signal 1 ----| "sigusr2" User-defined signal 2 ----| "sigvtalrm" Virtual alarm clock (4.2BSD) ----| "sigxcpu" CPU time limit exceeded (4.2BSD); see setrlimit(2) ----| "sigxfsz" File size limit exceeded (4.2BSD);see setrlimit(2) ----| "sigwinch" Window resize signal (4.3BSD, Sun) ----| "sigbreak" CTRL + BREAK has been pressed ----| "siglost" File lock lost +---| "sigabrt" # Abort signal from abort(3) +---| "sigalrm" # Timer signal from alarm(2) +---| "sigbus" # Bus error (bad memory access) +---| "sigchld" # Child stopped or terminated +---| "sigcont" # Continue if stopped +---| "sigfpe" # Floating-point exception +---| "sighup" # Hangup detected on controlling terminal or death of controlling process +---| "sigill" # Illegal Instruction +---| "sigint" # Interrupt from keyboard +---| "sigio" # I/O now possible (4.2BSD) +---| "sigiot" # IOT trap. A synonym for sigabrt +---| "sigkill" # Kill signal +---| "sigpipe" # Broken pipe: write to pipe with no readers; see pipe(7) +---| "sigpoll" # Pollable event (Sys V); synonym for sigIO +---| "sigprof" # Profiling timer expired +---| "sigpwr" # Power failure (System V) +---| "sigquit" # Quit from keyboard +---| "sigsegv" # Invalid memory reference +---| "sigstkflt" # Stack fault on coprocessor +---| "sigstop" # Stop process +---| "sigtstp" # Stop typed at terminal +---| "sigsys" # Bad system call (SVr4); see also seccomp(2) +---| "sigterm" # Termination signal +---| "sigtrap" # Trace/breakpoint trap +---| "sigttin" # Terminal input for background process +---| "sigttou" # Terminal output for background process +---| "sigurg" # Urgent condition on socket (4.2BSD) +---| "sigusr1" # User-defined signal 1 +---| "sigusr2" # User-defined signal 2 +---| "sigvtalrm" # Virtual alarm clock (4.2BSD) +---| "sigxcpu" # CPU time limit exceeded (4.2BSD); see setrlimit(2) +---| "sigxfsz" # File size limit exceeded (4.2BSD);see setrlimit(2) +---| "sigwinch" # Window resize signal (4.3BSD, Sun) +---| "sigbreak" # CTRL + BREAK has been pressed +---| "siglost" # File lock lost --- ---Creates and initializes a new `uv_signal_t`. @@ -1354,6 +1382,8 @@ uv_signal_t.start_oneshot = uv.signal_start_oneshot function uv.signal_stop(signal) end uv_signal_t.stop = uv.signal_stop + + --- ---Process handles will spawn a new process and allow the user to control it and ---establish communication channels with it using streams. @@ -1435,10 +1465,11 @@ function uv.disable_stdio_inheritance() end --- ---The `options` table accepts the following fields: --- ---- - `options.args` - Command line arguments as a list of string. The first ----string should be the path to the program. On Windows, this uses CreateProcess ----which concatenates the arguments into a string. This can cause some strange ----errors. (See `options.verbatim` below for Windows.) +--- - `options.args` - Command line arguments as a list of strings. The first +--- string should *not* be the path to the program, since that is already +--- provided via `path`. On Windows, this uses CreateProcess which concatenates +--- the arguments into a string. This can cause some strange errors +--- (see `options.verbatim` below for Windows). --- --- - `options.stdio` - Set the file descriptors that will be made available to --- the child process. The convention is that the first entries are stdin, stdout, @@ -1512,6 +1543,8 @@ function uv.kill(pid, signum) end function uv.process_get_pid(process) end uv_process_t.get_pid = uv.process_get_pid + + --- ---Stream handles provide an abstraction of a duplex communication channel. ---`uv_stream_t` is an abstract type, libuv provides 3 stream implementations @@ -1698,6 +1731,8 @@ uv_stream_t.set_blocking = uv.stream_set_blocking function uv.stream_get_write_queue_size() end uv_stream_t.get_write_queue_size = uv.stream_get_write_queue_size + + --- ---TCP handles are used to represent both TCP streams and servers. --- @@ -1720,146 +1755,146 @@ local uv_tcp_t = {} ---|'"packet"' ---@alias uv.aliases.network_protocols ----|'"ip"' # internet protocol, pseudo protocol number ----|'"hopopt"' # hop-by-hop options for ipv6 ----|'"icmp"' # internet control message protocol ----|'"igmp"' # internet group management protocol ----|'"ggp"' # gateway-gateway protocol ----|'"ipv4"' # IPv4 encapsulation ----|'"st"' # ST datagram mode ----|'"tcp"' # transmission control protocol ----|'"cbt"' # CBT, Tony Ballardie ----|'"egp"' # exterior gateway protocol ----|'"igp"' # any private interior gateway (Cisco: for IGRP) ----|'"bbn-rcc"' # BBN RCC Monitoring ----|'"nvp"' # Network Voice Protocol ----|'"pup"' # PARC universal packet protocol ----|'"argus"' # ARGUS (deprecated) ----|'"emcon"' # EMCON ----|'"xnet"' # Cross Net Debugger ----|'"chaos"' # Chaos ----|'"udp"' # user datagram protocol ----|'"mux"' # Multiplexing protocol ----|'"dcn"' # DCN Measurement Subsystems ----|'"hmp"' # host monitoring protocol ----|'"prm"' # packet radio measurement protocol ----|'"xns-idp"' # Xerox NS IDP ----|'"trunk-1"' # Trunk-1 ----|'"trunk-2"' # Trunk-2 ----|'"leaf-1"' # Leaf-1 ----|'"leaf-2"' # Leaf-2 ----|'"rdp"' # "reliable datagram" protocol ----|'"irtp"' # Internet Reliable Transaction Protocol ----|'"iso-tp4"' # ISO Transport Protocol Class 4 ----|'"netblt"' # Bulk Data Transfer Protocol ----|'"mfe-nsp"' # MFE Network Services Protocol ----|'"merit-inp"' # MERIT Internodal Protocol ----|'"dccp"' # Datagram Congestion Control Protocol ----|'"3pc"' # Third Party Connect Protocol ----|'"idpr"' # Inter-Domain Policy Routing Protocol ----|'"xtp"' # Xpress Tranfer Protocol ----|'"ddp"' # Datagram Delivery Protocol ----|'"idpr-cmtp"' # IDPR Control Message Transport Proto ----|'"tp++"' # TP++ Transport Protocol ----|'"il"' # IL Transport Protocol ----|'"ipv6"' # IPv6 encapsulation ----|'"sdrp"' # Source Demand Routing Protocol ----|'"ipv6-route"' # Routing Header for IPv6 ----|'"ipv6-frag"' # Fragment Header for IPv6 ----|'"idrp"' # Inter-Domain Routing Protocol ----|'"rsvp"' # Resource ReSerVation Protocol ----|'"gre"' # Generic Routing Encapsulation ----|'"dsr"' # Dynamic Source Routing Protocol ----|'"bna"' # BNA ----|'"esp"' # Encap Security Payload ----|'"ipv6-crypt"' # Encryption Header for IPv6 (not in official list) ----|'"ah"' # Authentication Header ----|'"ipv6-auth"' # Authentication Header for IPv6 (not in official list) ----|'"i-nlsp"' # Integrated Net Layer Security TUBA ----|'"swipe"' # IP with Encryption ----|'"narp"' # NBMA Address Resolution Protocol ----|'"mobile"' # IP Mobility ----|'"tlsp"' # Transport Layer Security Protocol ----|'"skip"' # SKIP ----|'"ipv6-icmp"' # ICMP for IPv6 ----|'"ipv6-nonxt"' # No Next Header for IPv6 ----|'"ipv6-opts"' # Destination Options for IPv6 ----|'"#"' # any host internal protocol ----|'"cftp"' # CFTP ----|'"#"' # any local network ----|'"sat-expak"' # SATNET and Backroom EXPAK ----|'"kryptolan"' # Kryptolan ----|'"rvd"' # MIT Remote Virtual Disk Protocol ----|'"ippc"' # Internet Pluribus Packet Core ----|'"#"' # any distributed file system ----|'"sat-mon"' # SATNET Monitoring ----|'"visa"' # VISA Protocol ----|'"ipcv"' # Internet Packet Core Utility ----|'"cpnx"' # Computer Protocol Network Executive ----|'"cphb"' # Computer Protocol Heart Beat ----|'"wsn"' # Wang Span Network ----|'"pvp"' # Packet Video Protocol ----|'"br-sat-mon"' # Backroom SATNET Monitoring ----|'"sun-nd"' # SUN ND PROTOCOL-Temporary ----|'"wb-mon"' # WIDEBAND Monitoring ----|'"wb-expak"' # WIDEBAND EXPAK ----|'"iso-ip"' # ISO Internet Protocol ----|'"vmtp"' # Versatile Message Transport ----|'"secure-vmtp"' # SECURE-VMTP ----|'"vines"' # VINES ----|'"ttp"' # TTP ----|'"nsfnet-igp"' # NSFNET-IGP ----|'"dgp"' # Dissimilar Gateway Protocol ----|'"tcf"' # TCF ----|'"eigrp"' # Enhanced Interior Routing Protocol (Cisco) ----|'"ospf"' # Open Shortest Path First IGP ----|'"sprite-rpc"' # Sprite RPC Protocol ----|'"larp"' # Locus Address Resolution Protocol ----|'"mtp"' # Multicast Transport Protocol ----|'"ax.25"' # AX.25 Frames ----|'"ipip"' # Yet Another IP encapsulation ----|'"micp"' # Mobile Internetworking Control Pro. ----|'"scc-sp"' # Semaphore Communications Sec. Pro. ----|'"etherip"' # Ethernet-within-IP Encapsulation ----|'"encap"' # Yet Another IP encapsulation ----|'"#"' # any private encryption scheme ----|'"gmtp"' # GMTP ----|'"ifmp"' # Ipsilon Flow Management Protocol ----|'"pnni"' # PNNI over IP ----|'"pim"' # Protocol Independent Multicast ----|'"aris"' # ARIS ----|'"scps"' # SCPS ----|'"qnx"' # QNX ----|'"a/n"' # Active Networks ----|'"ipcomp"' # IP Payload Compression Protocol ----|'"snp"' # Sitara Networks Protocol ----|'"compaq-peer"' # Compaq Peer Protocol ----|'"ipx-in-ip"' # IPX in IP ----|'"vrrp"' # Virtual Router Redundancy Protocol ----|'"pgm"' # PGM Reliable Transport Protocol ----|'"#"' # any 0-hop protocol ----|'"l2tp"' # Layer Two Tunneling Protocol ----|'"ddx"' # D-II Data Exchange ----|'"iatp"' # Interactive Agent Transfer Protocol ----|'"stp"' # Schedule Transfer ----|'"srp"' # SpectraLink Radio Protocol ----|'"uti"' # UTI ----|'"smp"' # Simple Message Protocol ----|'"sm"' # SM (deprecated) ----|'"ptp"' # Performance Transparency Protocol ----|'"isis"' # ISIS over IPv4 ----|'"crtp"' # Combat Radio Transport Protocol ----|'"crudp"' # Combat Radio User Datagram ----|'"sps"' # Secure Packet Shield ----|'"pipe"' # Private IP Encapsulation within IP ----|'"sctp"' # Stream Control Transmission Protocol ----|'"fc"' # Fibre Channel +---|'"ip"' # internet protocol, pseudo protocol number +---|'"hopopt"' # hop-by-hop options for ipv6 +---|'"icmp"' # internet control message protocol +---|'"igmp"' # internet group management protocol +---|'"ggp"' # gateway-gateway protocol +---|'"ipv4"' # IPv4 encapsulation +---|'"st"' # ST datagram mode +---|'"tcp"' # transmission control protocol +---|'"cbt"' # CBT, Tony Ballardie +---|'"egp"' # exterior gateway protocol +---|'"igp"' # any private interior gateway (Cisco: for IGRP) +---|'"bbn-rcc"' # BBN RCC Monitoring +---|'"nvp"' # Network Voice Protocol +---|'"pup"' # PARC universal packet protocol +---|'"argus"' # ARGUS (deprecated) +---|'"emcon"' # EMCON +---|'"xnet"' # Cross Net Debugger +---|'"chaos"' # Chaos +---|'"udp"' # user datagram protocol +---|'"mux"' # Multiplexing protocol +---|'"dcn"' # DCN Measurement Subsystems +---|'"hmp"' # host monitoring protocol +---|'"prm"' # packet radio measurement protocol +---|'"xns-idp"' # Xerox NS IDP +---|'"trunk-1"' # Trunk-1 +---|'"trunk-2"' # Trunk-2 +---|'"leaf-1"' # Leaf-1 +---|'"leaf-2"' # Leaf-2 +---|'"rdp"' # "reliable datagram" protocol +---|'"irtp"' # Internet Reliable Transaction Protocol +---|'"iso-tp4"' # ISO Transport Protocol Class 4 +---|'"netblt"' # Bulk Data Transfer Protocol +---|'"mfe-nsp"' # MFE Network Services Protocol +---|'"merit-inp"' # MERIT Internodal Protocol +---|'"dccp"' # Datagram Congestion Control Protocol +---|'"3pc"' # Third Party Connect Protocol +---|'"idpr"' # Inter-Domain Policy Routing Protocol +---|'"xtp"' # Xpress Tranfer Protocol +---|'"ddp"' # Datagram Delivery Protocol +---|'"idpr-cmtp"' # IDPR Control Message Transport Proto +---|'"tp++"' # TP++ Transport Protocol +---|'"il"' # IL Transport Protocol +---|'"ipv6"' # IPv6 encapsulation +---|'"sdrp"' # Source Demand Routing Protocol +---|'"ipv6-route"' # Routing Header for IPv6 +---|'"ipv6-frag"' # Fragment Header for IPv6 +---|'"idrp"' # Inter-Domain Routing Protocol +---|'"rsvp"' # Resource ReSerVation Protocol +---|'"gre"' # Generic Routing Encapsulation +---|'"dsr"' # Dynamic Source Routing Protocol +---|'"bna"' # BNA +---|'"esp"' # Encap Security Payload +---|'"ipv6-crypt"' # Encryption Header for IPv6 (not in official list) +---|'"ah"' # Authentication Header +---|'"ipv6-auth"' # Authentication Header for IPv6 (not in official list) +---|'"i-nlsp"' # Integrated Net Layer Security TUBA +---|'"swipe"' # IP with Encryption +---|'"narp"' # NBMA Address Resolution Protocol +---|'"mobile"' # IP Mobility +---|'"tlsp"' # Transport Layer Security Protocol +---|'"skip"' # SKIP +---|'"ipv6-icmp"' # ICMP for IPv6 +---|'"ipv6-nonxt"' # No Next Header for IPv6 +---|'"ipv6-opts"' # Destination Options for IPv6 +---|'"#"' # any host internal protocol +---|'"cftp"' # CFTP +---|'"#"' # any local network +---|'"sat-expak"' # SATNET and Backroom EXPAK +---|'"kryptolan"' # Kryptolan +---|'"rvd"' # MIT Remote Virtual Disk Protocol +---|'"ippc"' # Internet Pluribus Packet Core +---|'"#"' # any distributed file system +---|'"sat-mon"' # SATNET Monitoring +---|'"visa"' # VISA Protocol +---|'"ipcv"' # Internet Packet Core Utility +---|'"cpnx"' # Computer Protocol Network Executive +---|'"cphb"' # Computer Protocol Heart Beat +---|'"wsn"' # Wang Span Network +---|'"pvp"' # Packet Video Protocol +---|'"br-sat-mon"' # Backroom SATNET Monitoring +---|'"sun-nd"' # SUN ND PROTOCOL-Temporary +---|'"wb-mon"' # WIDEBAND Monitoring +---|'"wb-expak"' # WIDEBAND EXPAK +---|'"iso-ip"' # ISO Internet Protocol +---|'"vmtp"' # Versatile Message Transport +---|'"secure-vmtp"' # SECURE-VMTP +---|'"vines"' # VINES +---|'"ttp"' # TTP +---|'"nsfnet-igp"' # NSFNET-IGP +---|'"dgp"' # Dissimilar Gateway Protocol +---|'"tcf"' # TCF +---|'"eigrp"' # Enhanced Interior Routing Protocol (Cisco) +---|'"ospf"' # Open Shortest Path First IGP +---|'"sprite-rpc"' # Sprite RPC Protocol +---|'"larp"' # Locus Address Resolution Protocol +---|'"mtp"' # Multicast Transport Protocol +---|'"ax.25"' # AX.25 Frames +---|'"ipip"' # Yet Another IP encapsulation +---|'"micp"' # Mobile Internetworking Control Pro. +---|'"scc-sp"' # Semaphore Communications Sec. Pro. +---|'"etherip"' # Ethernet-within-IP Encapsulation +---|'"encap"' # Yet Another IP encapsulation +---|'"#"' # any private encryption scheme +---|'"gmtp"' # GMTP +---|'"ifmp"' # Ipsilon Flow Management Protocol +---|'"pnni"' # PNNI over IP +---|'"pim"' # Protocol Independent Multicast +---|'"aris"' # ARIS +---|'"scps"' # SCPS +---|'"qnx"' # QNX +---|'"a/n"' # Active Networks +---|'"ipcomp"' # IP Payload Compression Protocol +---|'"snp"' # Sitara Networks Protocol +---|'"compaq-peer"' # Compaq Peer Protocol +---|'"ipx-in-ip"' # IPX in IP +---|'"vrrp"' # Virtual Router Redundancy Protocol +---|'"pgm"' # PGM Reliable Transport Protocol +---|'"#"' # any 0-hop protocol +---|'"l2tp"' # Layer Two Tunneling Protocol +---|'"ddx"' # D-II Data Exchange +---|'"iatp"' # Interactive Agent Transfer Protocol +---|'"stp"' # Schedule Transfer +---|'"srp"' # SpectraLink Radio Protocol +---|'"uti"' # UTI +---|'"smp"' # Simple Message Protocol +---|'"sm"' # SM (deprecated) +---|'"ptp"' # Performance Transparency Protocol +---|'"isis"' # ISIS over IPv4 +---|'"crtp"' # Combat Radio Transport Protocol +---|'"crudp"' # Combat Radio User Datagram +---|'"sps"' # Secure Packet Shield +---|'"pipe"' # Private IP Encapsulation within IP +---|'"sctp"' # Stream Control Transmission Protocol +---|'"fc"' # Fibre Channel ---|'"mobility-header"' # Mobility Header ----|'"manet"' # MANET Protocols ----|'"hip"' # Host Identity Protocol ----|'"shim6"' # Shim6 Protocol ----|'"wesp"' # Wrapped Encapsulating Security Payload ----|'"rohc"' # Robust Header Compression +---|'"manet"' # MANET Protocols +---|'"hip"' # Host Identity Protocol +---|'"shim6"' # Shim6 Protocol +---|'"wesp"' # Wrapped Encapsulating Security Payload +---|'"rohc"' # Robust Header Compression ---@alias uv.aliases.tcp_socket_type ---|>'"stream"' @@ -2047,6 +2082,8 @@ uv_tcp_t.close_reset = uv.tcp_close_reset ---@return {[1]: integer, [2]: integer}|nil, string? err_name, string? err_msg # [1, 2] file descriptor function uv.socketpair(socktype, protocol, flags1, flags2) end + + --- ---Pipe handles provide an abstraction over local domain sockets on Unix and named pipes on Windows. --- @@ -2077,6 +2114,8 @@ local uv_pipe_t = {} ---@alias uv.aliases.pipe_rtn {read: integer, write: integer} +---@alias uv.aliases.pipe_2_flags {no_truncate: boolean} + --- ---Creates and initializes a new `uv_pipe_t`. Returns the Lua userdata wrapping ---it. The `ipc` argument is a boolean to indicate if this pipe will be used for @@ -2223,6 +2262,57 @@ uv_pipe_t.chmod = uv.pipe_chmod ---@nodiscard function uv.pipe(read_flags, write_flags) end +--- +---Bind the pipe to a file path (Unix) or a name (Windows). +--- +---`Flags`: +--- +--- - If `type(flags)` is `number`, it must be `0` or `uv.constants.PIPE_NO_TRUNCATE`. +--- - If `type(flags)` is `table`, it must be `{}` or `{ no_trunate = true|false }`. +--- - If `type(flags)` is `nil`, it use default value `0`. +--- - Returns `EINVAL` for unsupported flags without performing the bind operation. +--- +---Supports Linux abstract namespace sockets. namelen must include the leading '\0' byte but not the trailing nul byte. +--- +---**Note**: +---1. Paths on Unix get truncated to sizeof(sockaddr_un.sun_path) bytes, +---typically between 92 and 108 bytes. +---2. New in version 1.46.0. +--- +---@param pipe uv_pipe_t +---@param name string +---@param flags integer|uv.aliases.pipe_2_flags|nil # (default: 0) +---@return 0|nil success, string? err_name, string? err_msg +function uv.pipe_bind2(pipe, name, flags) end +uv_pipe_t.bind2 = uv.pipe_bind2 + +--- +---Connect to the Unix domain socket or the named pipe. +--- +---`Flags`: +--- +--- - If `type(flags)` is `number`, it must be `0` or `uv.constants.PIPE_NO_TRUNCATE`. +--- - If `type(flags)` is `table`, it must be `{}` or `{ no_trunate = true|false }`. +--- - If `type(flags)` is `nil`, it use default value `0`. +--- - Returns `EINVAL` for unsupported flags without performing the bind operation. +--- +---Supports Linux abstract namespace sockets. namelen must include the leading nul byte but not the trailing nul byte. +--- +---**Note**: +---1. Paths on Unix get truncated to sizeof(sockaddr_un.sun_path) bytes, +---typically between 92 and 108 bytes. +---2. New in version 1.46.0. +--- +---@param pipe uv_pipe_t +---@param name string +---@param flags integer|uv.aliases.pipe_2_flags|nil # (default: 0) +---@param callback fun(err?: string)|nil +---@return uv_connect_t|nil stream, string? err_name, string? err_msg +function uv.pipe_connect2(pipe, name, flags, callback) end +uv_pipe_t.connect2 = uv.pipe_connect2 + + + --- ---TTY handles represent a stream for the console. --- @@ -2330,6 +2420,8 @@ function uv.tty_set_vterm_state(state) end ---@nodiscard function uv.tty_get_vterm_state() end + + --- ---UDP handles encapsulate UDP communication for both clients and servers. --- @@ -2450,13 +2542,7 @@ uv_udp_t.getpeername = uv.udp_getpeername ---@param interface_addr string|nil ---@param membership uv.aliases.udp_membership ---@return 0|nil success, string? err_name, string? err_msg -function uv.udp_set_membership( - udp, - multicast_addr, - interface_addr, - membership -) -end +function uv.udp_set_membership(udp, multicast_addr, interface_addr, membership) end uv_udp_t.set_membership = uv.udp_set_membership --- @@ -2470,14 +2556,7 @@ uv_udp_t.set_membership = uv.udp_set_membership ---@param source_addr string ---@param membership uv.aliases.udp_membership ---@return 0|nil success, string? err_name, string? err_msg -function uv.udp_set_source_membership( - udp, - multicast_addr, - interface_addr, - source_addr, - membership -) -end +function uv.udp_set_source_membership(udp, multicast_addr, interface_addr, source_addr, membership) end uv_udp_t.set_source_membership = uv.udp_set_source_membership --- @@ -2587,6 +2666,8 @@ uv_udp_t.recv_stop = uv.udp_recv_stop function uv.udp_connect(udp, host, port) end uv_udp_t.connect = uv.udp_connect + + --- ---FS Event handles allow the user to monitor a given path for changes, for ---example, if the file was renamed or there was a generic change in it. This @@ -2604,12 +2685,12 @@ local uv_fs_event_t = {} ---Creates and initializes a new `uv_fs_event_t`. ---Returns the Lua userdata wrapping it. --- ----@return uv_fs_event_t +---@return uv_fs_event_t|nil, string? err_name, string? err_msg ---@nodiscard function uv.new_fs_event() end -- TODO: make sure that the above method can indeed return nil + error. --- confirmed to never return error see libuv/unix/linux-inotify (kqueue/sunos etc) +-- can fail in case the feature is not supported, see unix/no-fsevents.c --- ---Start the handle with the given callback, which will watch the specified path @@ -2638,6 +2719,8 @@ uv_fs_event_t.stop = uv.fs_event_stop function uv.fs_event_getpath() end uv_fs_event_t.getpath = uv.fs_event_getpath + + --- ---FS Poll handles allow the user to monitor a given path for changes. Unlike ---`uv_fs_event_t`, fs poll handles use `stat` to detect when a file has changed so @@ -2651,11 +2734,11 @@ local uv_fs_poll_t = {} ---Creates and initializes a new `uv_fs_poll_t`. ---Returns the Lua userdata wrapping it. --- ----@return uv_fs_poll_t|nil, string? err_name, string? err_msg +---@return uv_fs_poll_t ---@nodiscard function uv.new_fs_poll() end --- TODO: make sure that the above methof can indeed return nil + error. +-- TODO: make sure that the above method can indeed return nil + error. -- confirmed to never return error see libuv/fs-poll#uv_fs_poll_init --- @@ -2687,6 +2770,8 @@ uv_fs_poll_t.stop = uv.fs_poll_stop function uv.fs_poll_getpath() end uv_fs_poll_t.getpath = uv.fs_poll_getpath + + --- ---@section File system operations --- @@ -2867,7 +2952,7 @@ local luv_dir_t = {} ---A bitwise OR mask. ---|integer ----@alias uv.aliases.fs_readdir_entries {type: uv.aliases.fs_types, name: string} +---@alias uv.aliases.fs_readdir_entries {type: uv.aliases.fs_types, name: string}[] ---@alias uv.aliases.fs_symlink_flags {dir: boolean, junction: boolean} @@ -3547,7 +3632,7 @@ function uv.fs_opendir(path, entries, callback) end function uv.fs_opendir(path, entries) end --- ----Iterates over the directory stream `uv_dir_t` returned by a successful +---Iterates over the directory stream `luv_dir_t` returned by a successful ---`uv.fs_opendir()` call. A table of data tables is returned where the number ---of entries `n` is equal to or less than the `entries` parameter used in ---the associated `uv.fs_opendir()` call. @@ -3586,6 +3671,8 @@ function uv.fs_statfs(path, callback) end ---@nodiscard function uv.fs_statfs(path) end + + --- ---Libuv provides a threadpool which can be used to run user code and get notified ---in the loop thread. This threadpool is internally used to run all file system @@ -3638,6 +3725,8 @@ function uv.new_work(work_callback, after_work_callback) end function uv.queue_work(work_ctx, ...) end luv_work_ctx_t.queue = uv.queue_work + + --- ---@section DNS utility functions --- @@ -3679,6 +3768,8 @@ function uv.getnameinfo(address, callback) end ---@return string|nil host, string service_or_errname, string? err_msg function uv.getnameinfo(address) end + + --- ---Libuv provides cross-platform implementations for multiple threading an --- synchronization primitives. The API largely follows the pthreads API. @@ -3687,6 +3778,8 @@ function uv.getnameinfo(address) end ---@section Threading and synchronization utilities local luv_thread_t = {} +---@alias uv.aliases.thread_affinity {[integer]: boolean} + --- ---Creates and initializes a `luv_thread_t` (not `uv_thread_t`). Returns the Lua ---userdata wrapping it and asynchronously executes `entry`, which can be @@ -3694,20 +3787,22 @@ local luv_thread_t = {} ---are passed to the `entry` function and an optional `options` table may be ---provided. Currently accepted `option` fields are `stack_size`. --- +---**Note** unsafe, please make sure the thread end of life before Lua state close. +--- ---@generic T: uv.aliases.threadargs ---@param options? {stack_size?: integer} ---@param entry fun(...: T)|string ---@vararg T # varargs passed to `entry` ----@return luv_thread_t +---@return luv_thread_t?, string? err_name, string? err_msg function uv.new_thread(options, entry, ...) end ---@generic T: uv.aliases.threadargs ---@param entry fun(...: T)|string ---@vararg T # varargs passed to `entry` ----@return luv_thread_t +---@return luv_thread_t?, string? err_name, string? err_msg function uv.new_thread(entry, ...) end -- TODO: make sure that the above method can indeed return nil + error. --- confirmed to not return error see luv/thread.c#luv_new_thread +-- new_thread may fail if pthread fails. --- ---Returns a boolean indicating whether two threads are the same. This function is @@ -3719,10 +3814,68 @@ function uv.new_thread(entry, ...) end function uv.thread_equal(thread, other_thread) end luv_thread_t.equal = uv.thread_equal +--- +---Sets the specified thread's affinity setting. +--- +---`affinity` must be a table where each of the keys are a CPU number and the +---values are booleans that represent whether the `thread` should be eligible to +---run on that CPU. If the length of the `affinity` table is not greater than or +---equal to `uv.cpumask_size()`, any CPU numbers missing from the table will have +---their affinity set to `false`. If setting the affinity of more than +---`uv.cpumask_size()` CPUs is desired, `affinity` must be an array-like table +---with no gaps, since `#affinity` will be used as the `cpumask_size` if it is +---greater than `uv.cpumask_size()`. +--- +---If `get_old_affinity` is `true`, the previous affinity settings for the `thread` +---will be returned. Otherwise, `true` is returned after a successful call. +--- +---**Note:** Thread affinity setting is not atomic on Windows. Unsupported on macOS. +--- +---@param thread luv_thread_t +---@param affinity uv.aliases.thread_affinity +---@param get_old_affinity? boolean +---@return boolean|uv.aliases.thread_affinity|nil, string? err_name, string? err_msg +function uv.thread_setaffinity(thread, affinity, get_old_affinity) end +luv_thread_t.setaffinity = uv.thread_setaffinity + +-- TODO: the above probably needs to use overloads for the different returns. +-- TODO: the overload with the table return needs a @nodiscard. + +--- +---Gets the specified thread's affinity setting. +--- +---If `mask_size` is provided, it must be greater than or equal to +---`uv.cpumask_size()`. If the `mask_size` parameter is omitted, then the return +---of `uv.cpumask_size()` will be used. Returns an array-like table where each of +---the keys correspond to a CPU number and the values are booleans that represent +---whether the `thread` is eligible to run on that CPU. +--- +---**Note:** Thread affinity getting is not atomic on Windows. Unsupported on macOS. +--- +---@param thread luv_thread_t +---@param mask_size? integer +---@return table?, string? err_name, string? err_msg +---@nodiscard +function uv.thread_getaffinity(thread, mask_size) end +luv_thread_t.getaffinity = uv.thread_getaffinity + +--- +---Gets the CPU number on which the calling thread is running. +--- +---**Note:** The first CPU will be returned as the number 1, not 0. This allows for +---the number to correspond with the table keys used in `uv.thread_getaffinity` and +---`uv.thread_setaffinity`. +--- +---@return integer?, string? err_name, string? err_msg +---@nodiscard +function uv.thread_getcpu() end +luv_thread_t.getcpu = uv.thread_getcpu + --- ---Returns the handle for the thread in which this is called. --- ---@return luv_thread_t +---@nodiscard function uv.thread_self() end --- @@ -3739,6 +3892,8 @@ luv_thread_t.join = uv.thread_join ---@param msec integer function uv.sleep(msec) end + + --- ---@section Miscellaneous utilities ---@source misc.c @@ -3754,6 +3909,8 @@ function uv.sleep(msec) end ---@alias uv.aliases.interface_addresses {[string]: {ip: string, family: uv.aliases.network_family, netmask: string, internal: boolean, mac: string}} +---@alias uv.aliases.clock_gettime_rtn {sec: integer, nsec: integer} + --- ---Returns the executable path. --- @@ -3813,6 +3970,16 @@ function uv.get_free_memory() end ---@nodiscard function uv.get_constrained_memory() end +--- +---Gets the amount of free memory that is still available to the process (in +---bytes). This differs from `uv.get_free_memory()` in that it takes into account +---any limits imposed by the OS. If there is no such constraint, or the constraint +---is unknown, the amount returned will be identical to `uv.get_free_memory()`. +--- +---@return number +---@nodiscard +function uv.get_available_memory() end + --- ---Returns the resident set size (RSS) for the current process. --- @@ -3848,6 +4015,14 @@ function uv.available_parallelism() end ---@nodiscard function uv.cpu_info() end +--- +---Returns the maximum size of the mask used for process/thread affinities, or +---`ENOTSUP` if affinities are not supported on the current platform. +--- +---@return integer|nil, string? err_name, string? err_msg +---@nodiscard +function uv.cpumask_size() end + --- ---**Deprecated:** Please use `uv.os_getpid()` instead. --- @@ -3900,6 +4075,21 @@ function uv.setgid(id) end ---@nodiscard function uv.hrtime() end +--- +---Obtain the current system time from a high-resolution real-time or monotonic +---clock source. `clock_id` can be the string `"monotonic"` or `"realtime"`. +--- +---The real-time clock counts from the UNIX epoch (1970-01-01) and is subject +---to time adjustments; it can jump back in time. +--- +---The monotonic clock counts from an arbitrary point in the past and never +---jumps back in time. +--- +---@param clock_id string +---@return uv.aliases.clock_gettime_rtn?, string? err_name, string? err_msg +---@nodiscard +function uv.clock_gettime(clock_id) end + --- ---Returns the current system uptime in seconds. --- @@ -4124,11 +4314,15 @@ function uv.random(len, flags) end ---@nodiscard function uv.translate_sys_error(errcode) end + + --- ---@section Metrics operations ---@source metrics.c --- +---@alias uv.aliases.metric_info_rtn {loop_count: integer, events: integer, events_waiting: integer} + --- ---Retrieve the amount of time the event loop has been idle in the kernel’s event ---provider (e.g. `epoll_wait`). The call is thread safe. @@ -4143,6 +4337,17 @@ function uv.translate_sys_error(errcode) end ---@nodiscard function uv.metrics_idle_time() end +--- +---Get the metrics table from current set of event loop metrics. It is recommended +---to retrieve these metrics in a `prepare` callback (see `uv.new_prepare`, +---`uv.prepare_start`) in order to make sure there are no inconsistencies with the +---metrics counters. +--- +---@return uv.aliases.metric_info_rtn +---@nodiscard +function uv.metrics_info() end + + -- [[ constants ]] -- TODO: make this its own section