From dff7789c9ac86fd30b97a0a1f4ab78facd904dd2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Th=C3=A9o=20FIDRY?= Date: Sun, 12 Jan 2025 16:01:28 +0100 Subject: [PATCH] feat: Update the reflector for PHP 8.4 symbols --- src/Symbol/Reflector.php | 39 ++++++ .../Reflector/PhpStormStubsReflectorTest.php | 128 ++++++++++++++++++ 2 files changed, 167 insertions(+) diff --git a/src/Symbol/Reflector.php b/src/Symbol/Reflector.php index 6bd707f5..d1c65c8b 100644 --- a/src/Symbol/Reflector.php +++ b/src/Symbol/Reflector.php @@ -26,9 +26,18 @@ final readonly class Reflector { private const MISSING_CLASSES = [ + 'Deprecated', + // https://youtrack.jetbrains.com/issue/WI-29503 'MongoInsertBatch', 'MongoDeleteBatch', + + // PHP 8.4 + // TODO: to report + 'Pdo\DbLib', + 'Pdo\Firebird', + 'Pdo\Odbc', + 'Pdo\Pgsql', ]; private const MISSING_FUNCTIONS = [ @@ -188,6 +197,13 @@ 'uv_ares_init_options', 'uv_handle_type', 'uv_read2_start', + + // PHP 8.4 + // TODO: To report + 'pcntl_getqos_class', + 'pcntl_setns', + 'sodium_crypto_aead_aegis128l_', + 'sodium_crypto_aead_aegis256l_', ]; /** @@ -215,6 +231,29 @@ 'ps_LINEJOIN_MITER', 'ps_LINEJOIN_ROUND', 'ps_LINEJOIN_BEVEL', + + // PHP 8.4 + // TODO: to report + 'CURL_TCP_KEEPCNT', + 'IP_PORTRANGE_DEFAULT', + 'IP_PORTRANGE_HIGH', + 'IP_PORTRANGE_LOW', + 'PATTERN', + 'P_UID', + 'P_GID', + 'P_SID', + 'P_JAILID', + 'PROPERTY_ID_COMPAT_MATH_CONTINUE', + 'PROPERTY_ID_COMPAT_MATH_START', + 'PROPERTY_IDS_UNARY_OPERATOR', + 'SIGCKPT', + 'SIGCKPTEXIT', + 'SOCK_CONN_DGRAM', + 'SO_EXCLBIND', + 'SO_EXCLUSIVEADDRUSE', + 'SO_NOSIGPIPE', + 'SO_LINGER_SEC', + 'IP_PORTRANGE', ]; public static function createWithPhpStormStubs(): self diff --git a/tests/Symbol/Reflector/PhpStormStubsReflectorTest.php b/tests/Symbol/Reflector/PhpStormStubsReflectorTest.php index 4e4f5616..9bee7dcc 100644 --- a/tests/Symbol/Reflector/PhpStormStubsReflectorTest.php +++ b/tests/Symbol/Reflector/PhpStormStubsReflectorTest.php @@ -98,6 +98,20 @@ public static function provideClasses(): iterable 'MongoInsertBatch', 'MongoDeleteBatch', ); + + yield from self::createDataSetForInternalSymbols( + 'PHP 8.4 new class-like (added or modified)', + 'RoundingMode', + 'DOMNode', + 'DOMElement', + 'ResourceBundle', + 'Pdo\DbLib', + 'Pdo\Firebird', + 'Pdo\Mysql', + 'Pdo\Odbc', + 'Pdo\Pgsql', + 'Pdo\Sqlite', + ); } public static function provideFunctions(): iterable @@ -507,6 +521,46 @@ public static function provideFunctions(): iterable 'uv_signal_start', 'uv_signal_stop', ); + + yield from self::createDataSetForInternalSymbols( + 'PHP 8.4 functions (added or modified)', + 'request_parse_body', + 'bcceil', + 'bcdivmod', + 'bcfloor', + 'bcround', + 'intltz_get_iana_id', + 'grapheme_str_split', + 'mb_trim', + 'mb_ltrim', + 'mb_rtrim', + 'mb_ucfirst', + 'mb_lcfirst', + 'opcache_jit_blacklist', + 'pcntl_getcpu', + 'pcntl_getcpuaffinity', + 'pcntl_getqos_class', + 'pcntl_setns', + 'pcntl_waitid', + 'pg_change_password', + 'pg_jit', + 'pg_put_copy_data', + 'pg_put_copy_end', + 'pg_result_memory_size', + 'pg_set_chunked_rows_size', + 'pg_socket_poll', + 'sodium_crypto_aead_aegis128l_', + 'sodium_crypto_aead_aegis256l_', + 'http_get_last_response_headers', + 'http_clear_last_response_headers', + 'fpow', + 'array_all', + 'array_any', + 'array_find', + 'array_find_key', + 'exit', + 'die', + ); } public static function provideConstants(): iterable @@ -615,6 +669,80 @@ public static function provideConstants(): iterable 'ps_LINEJOIN_ROUND', 'ps_LINEJOIN_BEVEL', ); + + yield from self::createDataSetForInternalSymbols( + 'PHP 8.4 constants (added or modified)', + 'PHP_OUTPUT_HANDLER_PROCESSED', + 'PHP_SBINDIR', + 'CURL_HTTP_VERSION_3', + 'CURL_HTTP_VERSION_3ONLY', + 'CURL_TCP_KEEPCNT', + 'CURLOPT_PREREQFUNCTION', + 'CURL_PREREQFUNC_OK', + 'CURL_PREREQFUNC_ABORT', + 'CURLOPT_SERVER_RESPONSE_TIMEOUT', + 'CURLOPT_DEBUGFUNCTION', + 'CURLINFO_TEXT', + 'CURLINFO_HEADER_IN', + 'CURLINFO_DATA_IN', + 'CURLINFO_DATA_OUT', + 'CURLINFO_SSL_DATA_OUT', + 'CURLINFO_SSL_DATA_IN', + 'CURLINFO_POSTTRANSFER_TIME_T', + 'PATTERN', + 'PROPERTY_IDS_UNARY_OPERATOR', + 'PROPERTY_ID_COMPAT_MATH_START', + 'PROPERTY_ID_COMPAT_MATH_CONTINUE', + 'LDAP_OPT_X_TLS_PROTOCOL_MAX', + 'LDAP_OPT_X_TLS_PROTOCOL_TLS1_3', + 'LIBXML_RECOVER', + 'LIBXML_NO_XXE', + 'MYSQLI_TYPE_VECTOR', + 'X509_PURPOSE_OCSP_HELPER', + 'X509_PURPOSE_TIMESTAMP_SIGN', + 'SIGCKPT', + 'SIGCKPTEXIT', + 'WEXITED', + 'WSTOPPED', + 'WNOWAIT', + 'P_ALL', + 'P_PID', + 'P_PGID', + 'P_PIDFD', + 'P_UID', + 'P_GID', + 'P_SID', + 'P_JAILID', + 'PGSQL_TUPLES_CHUNK', + 'POSIX_SC_CHILD_MAX', + 'POSIX_SC_CLK_TCK', + 'SO_EXCLUSIVEADDRUSE', + 'SOCK_CONN_DGRAM', + 'SOCK_DCCP', + 'TCP_SYNCNT', + 'SO_EXCLBIND', + 'SO_NOSIGPIPE', + 'SO_LINGER_SEC', + 'IP_PORTRANGE', + 'IP_PORTRANGE_DEFAULT', + 'IP_PORTRANGE_HIGH', + 'IP_PORTRANGE_LOW', + 'SOCK_NONBLOCK', + 'SOCK_CLOEXEC', + 'SO_BINDTOIFINDEX', + 'SODIUM_CRYPTO_AEAD_AEGIS128L_KEYBYTES', + 'SODIUM_CRYPTO_AEAD_AEGIS128L_NSECBYTES', + 'SODIUM_CRYPTO_AEAD_AEGIS128L_NPUBBYTES', + 'SODIUM_CRYPTO_AEAD_AEGIS128L_ABYTES', + 'SODIUM_CRYPTO_AEAD_AEGIS256_KEYBYTES', + 'SODIUM_CRYPTO_AEAD_AEGIS256_NSECBYTES', + 'SODIUM_CRYPTO_AEAD_AEGIS256_NPUBBYTES', + 'SODIUM_CRYPTO_AEAD_AEGIS256_ABYTES', + 'T_PUBLIC_SET', + 'T_PROTECTED_SET', + 'T_PRIVATE_SET', + 'XML_OPTION_PARSE_HUGE', + ); } /**