From 86e5a76caa2dae065a71cada9fb1b97a79ef555b Mon Sep 17 00:00:00 2001 From: Rodrigo Primo Date: Wed, 1 Jul 2026 18:46:56 +0000 Subject: [PATCH 1/7] NamingConventions/PrefixAllGlobals: update the functions list based on WP 7.0.0 Based on a scan of WP Core at commit WordPress/wordpress-develop@26b6802 (the WP 7.0.0 release tag) using a preliminary sniff created for issue #1803. --- .../Sniffs/NamingConventions/PrefixAllGlobalsSniff.php | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/WordPress/Sniffs/NamingConventions/PrefixAllGlobalsSniff.php b/WordPress/Sniffs/NamingConventions/PrefixAllGlobalsSniff.php index fb5b1bdb02..05cafcf74d 100644 --- a/WordPress/Sniffs/NamingConventions/PrefixAllGlobalsSniff.php +++ b/WordPress/Sniffs/NamingConventions/PrefixAllGlobalsSniff.php @@ -149,7 +149,7 @@ final class PrefixAllGlobalsSniff extends AbstractFunctionParameterSniff { * Only overrulable constants are listed, i.e. those defined within core within * a `if ( ! defined() ) {}` wrapper. * - * {@internal To be updated after every major release. Last updated for WordPress 6.9.0-RC2.} + * {@internal To be updated after every major release. Last updated for WordPress 7.0.0.} * * @since 1.0.0 * @since 3.0.0 Renamed from `$whitelisted_core_constants` to `$allowed_core_constants`. @@ -203,7 +203,7 @@ final class PrefixAllGlobalsSniff extends AbstractFunctionParameterSniff { * * Note: deprecated functions should still be included in this list as plugins may support older WP versions. * - * {@internal To be updated after every major release. Last updated for WordPress 6.9.0-RC2.} + * {@internal To be updated after every major release. Last updated for WordPress 7.0.0.} * * @since 3.0.0. * @@ -348,6 +348,7 @@ final class PrefixAllGlobalsSniff extends AbstractFunctionParameterSniff { 'wp_cache_set_multiple_salted' => true, 'wp_cache_set_salted' => true, 'wp_cache_supports' => true, + 'wp_cache_switch_to_blog' => true, 'wp_check_password' => true, 'wp_clear_auth_cookie' => true, 'wp_clearcookie' => true, // Deprecated. @@ -396,7 +397,7 @@ final class PrefixAllGlobalsSniff extends AbstractFunctionParameterSniff { * * Note: deprecated classes should still be included in this list as plugins may support older WP versions. * - * {@internal To be updated after every major release. Last updated for WordPress 6.9.0-RC2.} + * {@internal To be updated after every major release. Last updated for WordPress 7.0.0.} * * @since 3.0.0. * From fad99700a68ae81fe7a8bf692b050d16b93faff0 Mon Sep 17 00:00:00 2001 From: Rodrigo Primo Date: Wed, 1 Jul 2026 18:46:56 +0000 Subject: [PATCH 2/7] WP/ClassNameCase: update the class lists based on WP 7.0.0 Based on a scan of WP Core at commit WordPress/wordpress-develop@26b6802 (the WP 7.0.0 release tag) using a preliminary sniff created for issue #1803. This includes the classes of the new bundled AI Client library (`WordPress\AiClient\*` and its dependencies `WordPress\AiClientDependencies\*`), added as a dedicated `$aiclient_classes` group. Includes tests. --- WordPress/Sniffs/WP/ClassNameCaseSniff.php | 200 ++++++++++++++++++- WordPress/Tests/WP/ClassNameCaseUnitTest.inc | 8 + WordPress/Tests/WP/ClassNameCaseUnitTest.php | 34 ++-- 3 files changed, 219 insertions(+), 23 deletions(-) diff --git a/WordPress/Sniffs/WP/ClassNameCaseSniff.php b/WordPress/Sniffs/WP/ClassNameCaseSniff.php index ef8170e275..689198f081 100644 --- a/WordPress/Sniffs/WP/ClassNameCaseSniff.php +++ b/WordPress/Sniffs/WP/ClassNameCaseSniff.php @@ -25,7 +25,7 @@ final class ClassNameCaseSniff extends AbstractClassRestrictionsSniff { * * Note: this list will be enhanced in the class constructor. * - * {@internal To be updated after every major release. Last updated for WordPress 6.9.0-RC2.} + * {@internal To be updated after every major release. Last updated for WordPress 7.0.0.} * * @since 3.0.0 * @@ -115,6 +115,12 @@ final class ClassNameCaseSniff extends AbstractClassRestrictionsSniff { 'Walker_Page', 'Walker_PageDropdown', 'WP', + 'WP_AI_Client_Ability_Function_Resolver', + 'WP_AI_Client_Cache', + 'WP_AI_Client_Discovery_Strategy', + 'WP_AI_Client_Event_Dispatcher', + 'WP_AI_Client_HTTP_Client', + 'WP_AI_Client_Prompt_Builder', 'WP_Abilities_Registry', 'WP_Ability', 'WP_Ability_Categories_Registry', @@ -149,6 +155,7 @@ final class ClassNameCaseSniff extends AbstractClassRestrictionsSniff { 'WP_Comment_Query', 'WP_Comments_List_Table', 'WP_Community_Events', + 'WP_Connector_Registry', 'WP_Customize_Background_Image_Control', 'WP_Customize_Background_Image_Setting', 'WP_Customize_Background_Position_Control', @@ -234,6 +241,7 @@ final class ClassNameCaseSniff extends AbstractClassRestrictionsSniff { 'WP_Http_Curl', 'WP_Http_Encoding', 'WP_Http_Streams', + 'WP_Icons_Registry', 'WP_Image_Editor', 'WP_Image_Editor_GD', 'WP_Image_Editor_Imagick', @@ -296,6 +304,7 @@ final class ClassNameCaseSniff extends AbstractClassRestrictionsSniff { 'WP_REST_Font_Families_Controller', 'WP_REST_Global_Styles_Controller', 'WP_REST_Global_Styles_Revisions_Controller', + 'WP_REST_Icons_Controller', 'WP_REST_Menu_Items_Controller', 'WP_REST_Menu_Locations_Controller', 'WP_REST_Menus_Controller', @@ -432,7 +441,7 @@ final class ClassNameCaseSniff extends AbstractClassRestrictionsSniff { * * Note: this list will be enhanced in the class constructor. * - * {@internal To be updated after every major release. Last updated for WordPress 6.9.0-RC2.} + * {@internal To be updated after every major release. Last updated for WordPress 7.0.0.} * * @since 3.0.0 * @@ -464,7 +473,7 @@ final class ClassNameCaseSniff extends AbstractClassRestrictionsSniff { * * Note: this list will be enhanced in the class constructor. * - * {@internal To be updated after every major release. Last updated for WordPress 6.9.0-RC2.} + * {@internal To be updated after every major release. Last updated for WordPress 7.0.0.} * * @since 3.1.0 * @@ -486,7 +495,7 @@ final class ClassNameCaseSniff extends AbstractClassRestrictionsSniff { * * Note: this list will be enhanced in the class constructor. * - * {@internal To be updated after every major release. Last updated for WordPress 6.9.0-RC2.} + * {@internal To be updated after every major release. Last updated for WordPress 7.0.0.} * * @since 3.0.0 * @@ -522,7 +531,7 @@ final class ClassNameCaseSniff extends AbstractClassRestrictionsSniff { * * Note: this list will be enhanced in the class constructor. * - * {@internal To be updated after every major release. Last updated for WordPress 6.9.0-RC2.} + * {@internal To be updated after every major release. Last updated for WordPress 7.0.0.} * * @since 3.0.0 * @@ -547,7 +556,7 @@ final class ClassNameCaseSniff extends AbstractClassRestrictionsSniff { * * Note: this list will be enhanced in the class constructor. * - * {@internal To be updated after every major release. Last updated for WordPress 6.9.0-RC2.} + * {@internal To be updated after every major release. Last updated for WordPress 7.0.0.} * * @since 3.0.0 * @@ -691,7 +700,7 @@ final class ClassNameCaseSniff extends AbstractClassRestrictionsSniff { * * Note: this list will be enhanced in the class constructor. * - * {@internal To be updated after every major release. Last updated for WordPress 6.9.0-RC2.} + * {@internal To be updated after every major release. Last updated for WordPress 7.0.0.} * * @since 3.0.0 * @@ -790,6 +799,171 @@ final class ClassNameCaseSniff extends AbstractClassRestrictionsSniff { 'SimplePie\XML\Declaration\Parser', ); + /** + * List of all AI Client classes included in WP Core. + * + * Includes both the WP AI Client classes and the bundled dependencies. + * + * Note: this list will be enhanced in the class constructor. + * + * {@internal To be updated after every major release. Last updated for WordPress 7.0.0.} + * + * @since 3.4.0 + * + * @var string[] The class names in their "proper" case. + * The constructor will add the lowercased class name as a key to each entry. + */ + private $aiclient_classes = array( + // WP AI Client classes. + 'WordPress\AiClient\AiClient', + 'WordPress\AiClient\Builders\MessageBuilder', + 'WordPress\AiClient\Builders\PromptBuilder', + 'WordPress\AiClient\Common\AbstractDataTransferObject', + 'WordPress\AiClient\Common\AbstractEnum', + 'WordPress\AiClient\Common\Contracts\AiClientExceptionInterface', + 'WordPress\AiClient\Common\Contracts\CachesDataInterface', + 'WordPress\AiClient\Common\Contracts\WithArrayTransformationInterface', + 'WordPress\AiClient\Common\Contracts\WithJsonSchemaInterface', + 'WordPress\AiClient\Common\Exception\InvalidArgumentException', + 'WordPress\AiClient\Common\Exception\RuntimeException', + 'WordPress\AiClient\Common\Exception\TokenLimitReachedException', + 'WordPress\AiClient\Common\Traits\WithDataCachingTrait', + 'WordPress\AiClient\Events\AfterGenerateResultEvent', + 'WordPress\AiClient\Events\BeforeGenerateResultEvent', + 'WordPress\AiClient\Files\DTO\File', + 'WordPress\AiClient\Files\Enums\FileTypeEnum', + 'WordPress\AiClient\Files\Enums\MediaOrientationEnum', + 'WordPress\AiClient\Files\ValueObjects\MimeType', + 'WordPress\AiClient\Messages\DTO\Message', + 'WordPress\AiClient\Messages\DTO\MessagePart', + 'WordPress\AiClient\Messages\DTO\ModelMessage', + 'WordPress\AiClient\Messages\DTO\UserMessage', + 'WordPress\AiClient\Messages\Enums\MessagePartChannelEnum', + 'WordPress\AiClient\Messages\Enums\MessagePartTypeEnum', + 'WordPress\AiClient\Messages\Enums\MessageRoleEnum', + 'WordPress\AiClient\Messages\Enums\ModalityEnum', + 'WordPress\AiClient\Operations\Contracts\OperationInterface', + 'WordPress\AiClient\Operations\DTO\GenerativeAiOperation', + 'WordPress\AiClient\Operations\Enums\OperationStateEnum', + 'WordPress\AiClient\Providers\AbstractProvider', + 'WordPress\AiClient\Providers\ApiBasedImplementation\AbstractApiBasedModel', + 'WordPress\AiClient\Providers\ApiBasedImplementation\AbstractApiBasedModelMetadataDirectory', + 'WordPress\AiClient\Providers\ApiBasedImplementation\AbstractApiProvider', + 'WordPress\AiClient\Providers\ApiBasedImplementation\Contracts\ApiBasedModelInterface', + 'WordPress\AiClient\Providers\ApiBasedImplementation\GenerateTextApiBasedProviderAvailability', + 'WordPress\AiClient\Providers\ApiBasedImplementation\ListModelsApiBasedProviderAvailability', + 'WordPress\AiClient\Providers\Contracts\ModelMetadataDirectoryInterface', + 'WordPress\AiClient\Providers\Contracts\ProviderAvailabilityInterface', + 'WordPress\AiClient\Providers\Contracts\ProviderInterface', + 'WordPress\AiClient\Providers\Contracts\ProviderOperationsHandlerInterface', + 'WordPress\AiClient\Providers\Contracts\ProviderWithOperationsHandlerInterface', + 'WordPress\AiClient\Providers\DTO\ProviderMetadata', + 'WordPress\AiClient\Providers\DTO\ProviderModelsMetadata', + 'WordPress\AiClient\Providers\Enums\ProviderTypeEnum', + 'WordPress\AiClient\Providers\Enums\ToolTypeEnum', + 'WordPress\AiClient\Providers\Http\Abstracts\AbstractClientDiscoveryStrategy', + 'WordPress\AiClient\Providers\Http\Collections\HeadersCollection', + 'WordPress\AiClient\Providers\Http\Contracts\ClientWithOptionsInterface', + 'WordPress\AiClient\Providers\Http\Contracts\HttpTransporterInterface', + 'WordPress\AiClient\Providers\Http\Contracts\RequestAuthenticationInterface', + 'WordPress\AiClient\Providers\Http\Contracts\WithHttpTransporterInterface', + 'WordPress\AiClient\Providers\Http\Contracts\WithRequestAuthenticationInterface', + 'WordPress\AiClient\Providers\Http\DTO\ApiKeyRequestAuthentication', + 'WordPress\AiClient\Providers\Http\DTO\Request', + 'WordPress\AiClient\Providers\Http\DTO\RequestOptions', + 'WordPress\AiClient\Providers\Http\DTO\Response', + 'WordPress\AiClient\Providers\Http\Enums\HttpMethodEnum', + 'WordPress\AiClient\Providers\Http\Enums\RequestAuthenticationMethod', + 'WordPress\AiClient\Providers\Http\Exception\ClientException', + 'WordPress\AiClient\Providers\Http\Exception\NetworkException', + 'WordPress\AiClient\Providers\Http\Exception\RedirectException', + 'WordPress\AiClient\Providers\Http\Exception\ResponseException', + 'WordPress\AiClient\Providers\Http\Exception\ServerException', + 'WordPress\AiClient\Providers\Http\HttpTransporter', + 'WordPress\AiClient\Providers\Http\HttpTransporterFactory', + 'WordPress\AiClient\Providers\Http\Traits\WithHttpTransporterTrait', + 'WordPress\AiClient\Providers\Http\Traits\WithRequestAuthenticationTrait', + 'WordPress\AiClient\Providers\Http\Util\ErrorMessageExtractor', + 'WordPress\AiClient\Providers\Http\Util\ResponseUtil', + 'WordPress\AiClient\Providers\Models\Contracts\ModelInterface', + 'WordPress\AiClient\Providers\Models\DTO\ModelConfig', + 'WordPress\AiClient\Providers\Models\DTO\ModelMetadata', + 'WordPress\AiClient\Providers\Models\DTO\ModelRequirements', + 'WordPress\AiClient\Providers\Models\DTO\RequiredOption', + 'WordPress\AiClient\Providers\Models\DTO\SupportedOption', + 'WordPress\AiClient\Providers\Models\Enums\CapabilityEnum', + 'WordPress\AiClient\Providers\Models\Enums\OptionEnum', + 'WordPress\AiClient\Providers\Models\ImageGeneration\Contracts\ImageGenerationModelInterface', + 'WordPress\AiClient\Providers\Models\ImageGeneration\Contracts\ImageGenerationOperationModelInterface', + 'WordPress\AiClient\Providers\Models\SpeechGeneration\Contracts\SpeechGenerationModelInterface', + 'WordPress\AiClient\Providers\Models\SpeechGeneration\Contracts\SpeechGenerationOperationModelInterface', + 'WordPress\AiClient\Providers\Models\TextGeneration\Contracts\TextGenerationModelInterface', + 'WordPress\AiClient\Providers\Models\TextGeneration\Contracts\TextGenerationOperationModelInterface', + 'WordPress\AiClient\Providers\Models\TextToSpeechConversion\Contracts\TextToSpeechConversionModelInterface', + 'WordPress\AiClient\Providers\Models\TextToSpeechConversion\Contracts\TextToSpeechConversionOperationModelInterface', + 'WordPress\AiClient\Providers\Models\VideoGeneration\Contracts\VideoGenerationModelInterface', + 'WordPress\AiClient\Providers\Models\VideoGeneration\Contracts\VideoGenerationOperationModelInterface', + 'WordPress\AiClient\Providers\OpenAiCompatibleImplementation\AbstractOpenAiCompatibleImageGenerationModel', + 'WordPress\AiClient\Providers\OpenAiCompatibleImplementation\AbstractOpenAiCompatibleModelMetadataDirectory', + 'WordPress\AiClient\Providers\OpenAiCompatibleImplementation\AbstractOpenAiCompatibleTextGenerationModel', + 'WordPress\AiClient\Providers\ProviderRegistry', + 'WordPress\AiClient\Results\Contracts\ResultInterface', + 'WordPress\AiClient\Results\DTO\Candidate', + 'WordPress\AiClient\Results\DTO\GenerativeAiResult', + 'WordPress\AiClient\Results\DTO\TokenUsage', + 'WordPress\AiClient\Results\Enums\FinishReasonEnum', + 'WordPress\AiClient\Tools\DTO\FunctionCall', + 'WordPress\AiClient\Tools\DTO\FunctionDeclaration', + 'WordPress\AiClient\Tools\DTO\FunctionResponse', + 'WordPress\AiClient\Tools\DTO\WebSearch', + + // Bundled AI Client dependencies. + 'WordPress\AiClientDependencies\Http\Discovery\ClassDiscovery', + 'WordPress\AiClientDependencies\Http\Discovery\Exception', + 'WordPress\AiClientDependencies\Http\Discovery\Exception\ClassInstantiationFailedException', + 'WordPress\AiClientDependencies\Http\Discovery\Exception\DiscoveryFailedException', + 'WordPress\AiClientDependencies\Http\Discovery\Exception\NoCandidateFoundException', + 'WordPress\AiClientDependencies\Http\Discovery\Exception\NotFoundException', + 'WordPress\AiClientDependencies\Http\Discovery\Exception\PuliUnavailableException', + 'WordPress\AiClientDependencies\Http\Discovery\Exception\StrategyUnavailableException', + 'WordPress\AiClientDependencies\Http\Discovery\Psr17FactoryDiscovery', + 'WordPress\AiClientDependencies\Http\Discovery\Psr18ClientDiscovery', + 'WordPress\AiClientDependencies\Http\Discovery\Strategy\CommonClassesStrategy', + 'WordPress\AiClientDependencies\Http\Discovery\Strategy\CommonPsr17ClassesStrategy', + 'WordPress\AiClientDependencies\Http\Discovery\Strategy\DiscoveryStrategy', + 'WordPress\AiClientDependencies\Http\Discovery\Strategy\PuliBetaStrategy', + 'WordPress\AiClientDependencies\Nyholm\Psr7\Factory\HttplugFactory', + 'WordPress\AiClientDependencies\Nyholm\Psr7\Factory\Psr17Factory', + 'WordPress\AiClientDependencies\Nyholm\Psr7\MessageTrait', + 'WordPress\AiClientDependencies\Nyholm\Psr7\Request', + 'WordPress\AiClientDependencies\Nyholm\Psr7\RequestTrait', + 'WordPress\AiClientDependencies\Nyholm\Psr7\Response', + 'WordPress\AiClientDependencies\Nyholm\Psr7\ServerRequest', + 'WordPress\AiClientDependencies\Nyholm\Psr7\Stream', + 'WordPress\AiClientDependencies\Nyholm\Psr7\StreamTrait', + 'WordPress\AiClientDependencies\Nyholm\Psr7\UploadedFile', + 'WordPress\AiClientDependencies\Nyholm\Psr7\Uri', + 'WordPress\AiClientDependencies\Psr\EventDispatcher\EventDispatcherInterface', + 'WordPress\AiClientDependencies\Psr\Http\Client\ClientExceptionInterface', + 'WordPress\AiClientDependencies\Psr\Http\Client\ClientInterface', + 'WordPress\AiClientDependencies\Psr\Http\Client\NetworkExceptionInterface', + 'WordPress\AiClientDependencies\Psr\Http\Client\RequestExceptionInterface', + 'WordPress\AiClientDependencies\Psr\Http\Message\MessageInterface', + 'WordPress\AiClientDependencies\Psr\Http\Message\RequestFactoryInterface', + 'WordPress\AiClientDependencies\Psr\Http\Message\RequestInterface', + 'WordPress\AiClientDependencies\Psr\Http\Message\ResponseFactoryInterface', + 'WordPress\AiClientDependencies\Psr\Http\Message\ResponseInterface', + 'WordPress\AiClientDependencies\Psr\Http\Message\ServerRequestFactoryInterface', + 'WordPress\AiClientDependencies\Psr\Http\Message\ServerRequestInterface', + 'WordPress\AiClientDependencies\Psr\Http\Message\StreamFactoryInterface', + 'WordPress\AiClientDependencies\Psr\Http\Message\StreamInterface', + 'WordPress\AiClientDependencies\Psr\Http\Message\UploadedFileFactoryInterface', + 'WordPress\AiClientDependencies\Psr\Http\Message\UploadedFileInterface', + 'WordPress\AiClientDependencies\Psr\Http\Message\UriFactoryInterface', + 'WordPress\AiClientDependencies\Psr\Http\Message\UriInterface', + 'WordPress\AiClientDependencies\Psr\SimpleCache\CacheInterface', + ); + /** * List of all WP native classes in lowercase. * @@ -867,6 +1041,17 @@ final class ClassNameCaseSniff extends AbstractClassRestrictionsSniff { */ private $simplepie_classes_lc = array(); + /** + * List of all AI Client classes in lowercase. + * + * This array is automatically generated in the class constructor based on the $aiclient_classes property. + * + * @since 3.4.0 + * + * @var string[] The class names in lowercase. + */ + private $aiclient_classes_lc = array(); + /** * Groups names. * @@ -884,6 +1069,7 @@ final class ClassNameCaseSniff extends AbstractClassRestrictionsSniff { 'phpmailer_classes', 'requests_classes', 'simplepie_classes', + 'aiclient_classes', ); /** diff --git a/WordPress/Tests/WP/ClassNameCaseUnitTest.inc b/WordPress/Tests/WP/ClassNameCaseUnitTest.inc index 70af2b1484..db4ab27005 100644 --- a/WordPress/Tests/WP/ClassNameCaseUnitTest.inc +++ b/WordPress/Tests/WP/ClassNameCaseUnitTest.inc @@ -91,3 +91,11 @@ MyNamespace\Avifinfo\CHAN_PROP::prepare_query(); \MyNamespace\Avifinfo\features::prepare_query(); namespace\Sub\AVIFINFO\parser::prepare_query(); namespace\AVIFINFO\TILE::prepare_query(); // Warning. + +/* + * AI Client classes. + */ +$obj = new WP_AI_Client_Cache(); +$obj = new WP_ai_client_cache(); // Warning. +$obj = new WordPress\AiClient\AiClient(); +$obj = new WordPress\AiClient\aiclient(); // Warning. diff --git a/WordPress/Tests/WP/ClassNameCaseUnitTest.php b/WordPress/Tests/WP/ClassNameCaseUnitTest.php index 62f9f6b179..f34d832c2d 100644 --- a/WordPress/Tests/WP/ClassNameCaseUnitTest.php +++ b/WordPress/Tests/WP/ClassNameCaseUnitTest.php @@ -36,22 +36,24 @@ public function getErrorList() { */ public function getWarningList() { return array( - 37 => 1, - 38 => 1, - 40 => 1, - 42 => 1, - 43 => 1, - 46 => 1, - 47 => 1, - 48 => 1, - 49 => 1, - 70 => 1, - 79 => 1, - 83 => 1, - 84 => 1, - 88 => 1, - 89 => 1, - 93 => 1, + 37 => 1, + 38 => 1, + 40 => 1, + 42 => 1, + 43 => 1, + 46 => 1, + 47 => 1, + 48 => 1, + 49 => 1, + 70 => 1, + 79 => 1, + 83 => 1, + 84 => 1, + 88 => 1, + 89 => 1, + 93 => 1, + 99 => 1, + 101 => 1, ); } } From 7595d618f866200fcebbdbea87924f3e9b718e40 Mon Sep 17 00:00:00 2001 From: Rodrigo Primo Date: Wed, 1 Jul 2026 18:46:56 +0000 Subject: [PATCH 3/7] WP/DeprecatedFunctions: update the functions list based on WP 7.0.0 Based on a scan of WP Core at commit WordPress/wordpress-develop@26b6802 (the WP 7.0.0 release tag) using a preliminary sniff created for issue #1803. Includes tests. --- WordPress/Sniffs/WP/DeprecatedFunctionsSniff.php | 16 +++++++++++++++- .../Tests/WP/DeprecatedFunctionsUnitTest.1.inc | 4 ++++ .../Tests/WP/DeprecatedFunctionsUnitTest.php | 5 +++-- 3 files changed, 22 insertions(+), 3 deletions(-) diff --git a/WordPress/Sniffs/WP/DeprecatedFunctionsSniff.php b/WordPress/Sniffs/WP/DeprecatedFunctionsSniff.php index 6b74d6294b..76647d9aff 100644 --- a/WordPress/Sniffs/WP/DeprecatedFunctionsSniff.php +++ b/WordPress/Sniffs/WP/DeprecatedFunctionsSniff.php @@ -43,7 +43,7 @@ final class DeprecatedFunctionsSniff extends AbstractFunctionRestrictionsSniff { * To retrieve a function list for comparison, the following tool is available: * https://github.com/JDGrimes/wp-deprecated-code-scanner * - * {@internal To be updated after every major release. Last updated for WordPress 6.9.0-RC2.} + * {@internal To be updated after every major release. Last updated for WordPress 7.0.0.} * * @var array */ @@ -1720,6 +1720,20 @@ final class DeprecatedFunctionsSniff extends AbstractFunctionRestrictionsSniff { 'alt' => 'wp_enqueue_img_auto_sizes_contain_css_fix()', 'version' => '6.9.0', ), + + // WP 7.0.0. + 'addslashes_gpc' => array( + 'alt' => 'wp_slash()', + 'version' => '7.0.0', + ), + 'block_core_navigation_block_contains_core_navigation' => array( + 'alt' => 'block_core_navigation_block_tree_has_block_type()', + 'version' => '7.0.0', + ), + 'wp_sanitize_script_attributes' => array( + 'alt' => 'wp_get_script_tag() or wp_get_inline_script_tag()', + 'version' => '7.0.0', + ), ); /** diff --git a/WordPress/Tests/WP/DeprecatedFunctionsUnitTest.1.inc b/WordPress/Tests/WP/DeprecatedFunctionsUnitTest.1.inc index 57a44658ef..0c2e91cd68 100644 --- a/WordPress/Tests/WP/DeprecatedFunctionsUnitTest.1.inc +++ b/WordPress/Tests/WP/DeprecatedFunctionsUnitTest.1.inc @@ -444,3 +444,7 @@ wp_add_editor_classic_theme_styles(); /* ============ WP 6.9 ============ */ seems_utf8(); wp_print_auto_sizes_contain_css_fix(); +/* ============ WP 7.0 ============ */ +addslashes_gpc(); +block_core_navigation_block_contains_core_navigation(); +wp_sanitize_script_attributes(); diff --git a/WordPress/Tests/WP/DeprecatedFunctionsUnitTest.php b/WordPress/Tests/WP/DeprecatedFunctionsUnitTest.php index 4e36fa091b..595d5b9cc1 100644 --- a/WordPress/Tests/WP/DeprecatedFunctionsUnitTest.php +++ b/WordPress/Tests/WP/DeprecatedFunctionsUnitTest.php @@ -113,14 +113,15 @@ public function getWarningList( $testFile = '' ) { switch ( $testFile ) { case 'DeprecatedFunctionsUnitTest.1.inc': $start_line = 430; - $end_line = 446; + $end_line = 450; $warnings = array_fill( $start_line, ( ( $end_line - $start_line ) + 1 ), 1 ); // Unset the lines related to version comments. unset( $warnings[432], $warnings[442], - $warnings[444] + $warnings[444], + $warnings[447] ); return $warnings; From 8177937061452d6e754f11868d6088dfa81c26b5 Mon Sep 17 00:00:00 2001 From: Rodrigo Primo Date: Wed, 1 Jul 2026 18:46:56 +0000 Subject: [PATCH 4/7] Various sniffs: update docs to document when the lists were last verified against WP Core WP 7.0.0 introduced no new deprecated classes, deprecated parameters, deprecated parameter values, reserved post types, pluggable classes/constants, WP time constants or capabilities, so for those sniffs only the "last verified" marker was updated. --- WordPress/Sniffs/NamingConventions/ValidPostTypeSlugSniff.php | 2 +- WordPress/Sniffs/WP/CapabilitiesSniff.php | 2 +- WordPress/Sniffs/WP/DeprecatedClassesSniff.php | 2 +- WordPress/Sniffs/WP/DeprecatedParameterValuesSniff.php | 2 +- WordPress/Sniffs/WP/DeprecatedParametersSniff.php | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/WordPress/Sniffs/NamingConventions/ValidPostTypeSlugSniff.php b/WordPress/Sniffs/NamingConventions/ValidPostTypeSlugSniff.php index f5cb955b03..384b74e74e 100644 --- a/WordPress/Sniffs/NamingConventions/ValidPostTypeSlugSniff.php +++ b/WordPress/Sniffs/NamingConventions/ValidPostTypeSlugSniff.php @@ -63,7 +63,7 @@ final class ValidPostTypeSlugSniff extends AbstractFunctionParameterSniff { * * Source: {@link https://developer.wordpress.org/reference/functions/register_post_type/#reserved-post-types} * - * {@internal To be updated after every major release. Last updated for WordPress 6.9.0-RC2.} + * {@internal To be updated after every major release. Last updated for WordPress 7.0.0.} * * @since 2.2.0 * diff --git a/WordPress/Sniffs/WP/CapabilitiesSniff.php b/WordPress/Sniffs/WP/CapabilitiesSniff.php index 758359f9c6..6e9cb8fad9 100644 --- a/WordPress/Sniffs/WP/CapabilitiesSniff.php +++ b/WordPress/Sniffs/WP/CapabilitiesSniff.php @@ -173,7 +173,7 @@ final class CapabilitiesSniff extends AbstractFunctionParameterSniff { * * List is sorted alphabetically. * - * {@internal To be updated after every major release. Last updated for WordPress 6.9.0-RC2.} + * {@internal To be updated after every major release. Last updated for WordPress 7.0.0.} * * @since 3.0.0 * diff --git a/WordPress/Sniffs/WP/DeprecatedClassesSniff.php b/WordPress/Sniffs/WP/DeprecatedClassesSniff.php index eec0d8f7cc..38232b5e3c 100644 --- a/WordPress/Sniffs/WP/DeprecatedClassesSniff.php +++ b/WordPress/Sniffs/WP/DeprecatedClassesSniff.php @@ -41,7 +41,7 @@ final class DeprecatedClassesSniff extends AbstractClassRestrictionsSniff { * * Version numbers should be fully qualified. * - * {@internal To be updated after every major release. Last updated for WordPress 6.9.0-RC2.} + * {@internal To be updated after every major release. Last updated for WordPress 7.0.0.} * * @var array */ diff --git a/WordPress/Sniffs/WP/DeprecatedParameterValuesSniff.php b/WordPress/Sniffs/WP/DeprecatedParameterValuesSniff.php index 1eefb6596c..b88826d990 100644 --- a/WordPress/Sniffs/WP/DeprecatedParameterValuesSniff.php +++ b/WordPress/Sniffs/WP/DeprecatedParameterValuesSniff.php @@ -43,7 +43,7 @@ final class DeprecatedParameterValuesSniff extends AbstractFunctionParameterSnif * looking for `_deprecated_argument()`. * The list is sorted alphabetically by function name. * - * {@internal To be updated after every major release. Last updated for WordPress 6.9.0-RC2.} + * {@internal To be updated after every major release. Last updated for WordPress 7.0.0.} * * @since 1.0.0 * @since 3.0.0 The format of the value has changed to support function calls diff --git a/WordPress/Sniffs/WP/DeprecatedParametersSniff.php b/WordPress/Sniffs/WP/DeprecatedParametersSniff.php index 265035f249..2133e3903d 100644 --- a/WordPress/Sniffs/WP/DeprecatedParametersSniff.php +++ b/WordPress/Sniffs/WP/DeprecatedParametersSniff.php @@ -50,7 +50,7 @@ final class DeprecatedParametersSniff extends AbstractFunctionParameterSniff { * * The functions are ordered alphabetically. * - * {@internal To be updated after every major release. Last updated for WordPress 6.9.0-RC2.} + * {@internal To be updated after every major release. Last updated for WordPress 7.0.0.} * * @since 0.12.0 * From 46115e5065787a9ed15dc8a6f7455748855eae42 Mon Sep 17 00:00:00 2001 From: Rodrigo Primo Date: Fri, 3 Jul 2026 09:42:44 -0300 Subject: [PATCH 5/7] Update WordPress/Tests/WP/ClassNameCaseUnitTest.inc Co-authored-by: Juliette <663378+jrfnl@users.noreply.github.com> --- WordPress/Tests/WP/ClassNameCaseUnitTest.inc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/WordPress/Tests/WP/ClassNameCaseUnitTest.inc b/WordPress/Tests/WP/ClassNameCaseUnitTest.inc index db4ab27005..4ddaed0bea 100644 --- a/WordPress/Tests/WP/ClassNameCaseUnitTest.inc +++ b/WordPress/Tests/WP/ClassNameCaseUnitTest.inc @@ -96,6 +96,6 @@ namespace\AVIFINFO\TILE::prepare_query(); // Warning. * AI Client classes. */ $obj = new WP_AI_Client_Cache(); -$obj = new WP_ai_client_cache(); // Warning. -$obj = new WordPress\AiClient\AiClient(); +$obj = new \WP_ai_client_cache(); // Warning. +$obj = new \WordPress\AiClient\AiClient(); $obj = new WordPress\AiClient\aiclient(); // Warning. From a8b58d618cbee09229c3ec53fde17b1874d21762 Mon Sep 17 00:00:00 2001 From: Rodrigo Primo Date: Fri, 3 Jul 2026 12:49:04 +0000 Subject: [PATCH 6/7] Apply suggestions from PR review --- .../PrefixAllGlobalsSniff.php | 6 + WordPress/Sniffs/WP/ClassNameCaseSniff.php | 354 +++++++++--------- 2 files changed, 183 insertions(+), 177 deletions(-) diff --git a/WordPress/Sniffs/NamingConventions/PrefixAllGlobalsSniff.php b/WordPress/Sniffs/NamingConventions/PrefixAllGlobalsSniff.php index 05cafcf74d..85c79f2c09 100644 --- a/WordPress/Sniffs/NamingConventions/PrefixAllGlobalsSniff.php +++ b/WordPress/Sniffs/NamingConventions/PrefixAllGlobalsSniff.php @@ -337,6 +337,11 @@ final class PrefixAllGlobalsSniff extends AbstractFunctionParameterSniff { 'twentytwentytwo_styles' => true, 'twentytwentytwo_support' => true, 'wp_authenticate' => true, + + /* + * The wp_cache_* functions below are conditionally (re)declared as pluggable in wp-includes/cache-compat.php, + * allowing a persistent object cache drop-in to override them. Their primary declarations are in wp-includes/cache.php. + */ 'wp_cache_add_multiple' => true, 'wp_cache_delete_multiple' => true, 'wp_cache_flush_group' => true, @@ -349,6 +354,7 @@ final class PrefixAllGlobalsSniff extends AbstractFunctionParameterSniff { 'wp_cache_set_salted' => true, 'wp_cache_supports' => true, 'wp_cache_switch_to_blog' => true, + 'wp_check_password' => true, 'wp_clear_auth_cookie' => true, 'wp_clearcookie' => true, // Deprecated. diff --git a/WordPress/Sniffs/WP/ClassNameCaseSniff.php b/WordPress/Sniffs/WP/ClassNameCaseSniff.php index 689198f081..c58a7b2a21 100644 --- a/WordPress/Sniffs/WP/ClassNameCaseSniff.php +++ b/WordPress/Sniffs/WP/ClassNameCaseSniff.php @@ -468,6 +468,171 @@ final class ClassNameCaseSniff extends AbstractClassRestrictionsSniff { 'Twenty_Twenty_One_SVG_Icons', ); + /** + * List of all AI Client classes included in WP Core. + * + * Includes both the WP AI Client classes and the bundled dependencies. + * + * Note: this list will be enhanced in the class constructor. + * + * {@internal To be updated after every major release. Last updated for WordPress 7.0.0.} + * + * @since 3.4.0 + * + * @var string[] The class names in their "proper" case. + * The constructor will add the lowercased class name as a key to each entry. + */ + private $aiclient_classes = array( + // WP AI Client classes. + 'WordPress\AiClient\AiClient', + 'WordPress\AiClient\Builders\MessageBuilder', + 'WordPress\AiClient\Builders\PromptBuilder', + 'WordPress\AiClient\Common\AbstractDataTransferObject', + 'WordPress\AiClient\Common\AbstractEnum', + 'WordPress\AiClient\Common\Contracts\AiClientExceptionInterface', + 'WordPress\AiClient\Common\Contracts\CachesDataInterface', + 'WordPress\AiClient\Common\Contracts\WithArrayTransformationInterface', + 'WordPress\AiClient\Common\Contracts\WithJsonSchemaInterface', + 'WordPress\AiClient\Common\Exception\InvalidArgumentException', + 'WordPress\AiClient\Common\Exception\RuntimeException', + 'WordPress\AiClient\Common\Exception\TokenLimitReachedException', + 'WordPress\AiClient\Common\Traits\WithDataCachingTrait', + 'WordPress\AiClient\Events\AfterGenerateResultEvent', + 'WordPress\AiClient\Events\BeforeGenerateResultEvent', + 'WordPress\AiClient\Files\DTO\File', + 'WordPress\AiClient\Files\Enums\FileTypeEnum', + 'WordPress\AiClient\Files\Enums\MediaOrientationEnum', + 'WordPress\AiClient\Files\ValueObjects\MimeType', + 'WordPress\AiClient\Messages\DTO\Message', + 'WordPress\AiClient\Messages\DTO\MessagePart', + 'WordPress\AiClient\Messages\DTO\ModelMessage', + 'WordPress\AiClient\Messages\DTO\UserMessage', + 'WordPress\AiClient\Messages\Enums\MessagePartChannelEnum', + 'WordPress\AiClient\Messages\Enums\MessagePartTypeEnum', + 'WordPress\AiClient\Messages\Enums\MessageRoleEnum', + 'WordPress\AiClient\Messages\Enums\ModalityEnum', + 'WordPress\AiClient\Operations\Contracts\OperationInterface', + 'WordPress\AiClient\Operations\DTO\GenerativeAiOperation', + 'WordPress\AiClient\Operations\Enums\OperationStateEnum', + 'WordPress\AiClient\Providers\AbstractProvider', + 'WordPress\AiClient\Providers\ApiBasedImplementation\AbstractApiBasedModel', + 'WordPress\AiClient\Providers\ApiBasedImplementation\AbstractApiBasedModelMetadataDirectory', + 'WordPress\AiClient\Providers\ApiBasedImplementation\AbstractApiProvider', + 'WordPress\AiClient\Providers\ApiBasedImplementation\Contracts\ApiBasedModelInterface', + 'WordPress\AiClient\Providers\ApiBasedImplementation\GenerateTextApiBasedProviderAvailability', + 'WordPress\AiClient\Providers\ApiBasedImplementation\ListModelsApiBasedProviderAvailability', + 'WordPress\AiClient\Providers\Contracts\ModelMetadataDirectoryInterface', + 'WordPress\AiClient\Providers\Contracts\ProviderAvailabilityInterface', + 'WordPress\AiClient\Providers\Contracts\ProviderInterface', + 'WordPress\AiClient\Providers\Contracts\ProviderOperationsHandlerInterface', + 'WordPress\AiClient\Providers\Contracts\ProviderWithOperationsHandlerInterface', + 'WordPress\AiClient\Providers\DTO\ProviderMetadata', + 'WordPress\AiClient\Providers\DTO\ProviderModelsMetadata', + 'WordPress\AiClient\Providers\Enums\ProviderTypeEnum', + 'WordPress\AiClient\Providers\Enums\ToolTypeEnum', + 'WordPress\AiClient\Providers\Http\Abstracts\AbstractClientDiscoveryStrategy', + 'WordPress\AiClient\Providers\Http\Collections\HeadersCollection', + 'WordPress\AiClient\Providers\Http\Contracts\ClientWithOptionsInterface', + 'WordPress\AiClient\Providers\Http\Contracts\HttpTransporterInterface', + 'WordPress\AiClient\Providers\Http\Contracts\RequestAuthenticationInterface', + 'WordPress\AiClient\Providers\Http\Contracts\WithHttpTransporterInterface', + 'WordPress\AiClient\Providers\Http\Contracts\WithRequestAuthenticationInterface', + 'WordPress\AiClient\Providers\Http\DTO\ApiKeyRequestAuthentication', + 'WordPress\AiClient\Providers\Http\DTO\Request', + 'WordPress\AiClient\Providers\Http\DTO\RequestOptions', + 'WordPress\AiClient\Providers\Http\DTO\Response', + 'WordPress\AiClient\Providers\Http\Enums\HttpMethodEnum', + 'WordPress\AiClient\Providers\Http\Enums\RequestAuthenticationMethod', + 'WordPress\AiClient\Providers\Http\Exception\ClientException', + 'WordPress\AiClient\Providers\Http\Exception\NetworkException', + 'WordPress\AiClient\Providers\Http\Exception\RedirectException', + 'WordPress\AiClient\Providers\Http\Exception\ResponseException', + 'WordPress\AiClient\Providers\Http\Exception\ServerException', + 'WordPress\AiClient\Providers\Http\HttpTransporter', + 'WordPress\AiClient\Providers\Http\HttpTransporterFactory', + 'WordPress\AiClient\Providers\Http\Traits\WithHttpTransporterTrait', + 'WordPress\AiClient\Providers\Http\Traits\WithRequestAuthenticationTrait', + 'WordPress\AiClient\Providers\Http\Util\ErrorMessageExtractor', + 'WordPress\AiClient\Providers\Http\Util\ResponseUtil', + 'WordPress\AiClient\Providers\Models\Contracts\ModelInterface', + 'WordPress\AiClient\Providers\Models\DTO\ModelConfig', + 'WordPress\AiClient\Providers\Models\DTO\ModelMetadata', + 'WordPress\AiClient\Providers\Models\DTO\ModelRequirements', + 'WordPress\AiClient\Providers\Models\DTO\RequiredOption', + 'WordPress\AiClient\Providers\Models\DTO\SupportedOption', + 'WordPress\AiClient\Providers\Models\Enums\CapabilityEnum', + 'WordPress\AiClient\Providers\Models\Enums\OptionEnum', + 'WordPress\AiClient\Providers\Models\ImageGeneration\Contracts\ImageGenerationModelInterface', + 'WordPress\AiClient\Providers\Models\ImageGeneration\Contracts\ImageGenerationOperationModelInterface', + 'WordPress\AiClient\Providers\Models\SpeechGeneration\Contracts\SpeechGenerationModelInterface', + 'WordPress\AiClient\Providers\Models\SpeechGeneration\Contracts\SpeechGenerationOperationModelInterface', + 'WordPress\AiClient\Providers\Models\TextGeneration\Contracts\TextGenerationModelInterface', + 'WordPress\AiClient\Providers\Models\TextGeneration\Contracts\TextGenerationOperationModelInterface', + 'WordPress\AiClient\Providers\Models\TextToSpeechConversion\Contracts\TextToSpeechConversionModelInterface', + 'WordPress\AiClient\Providers\Models\TextToSpeechConversion\Contracts\TextToSpeechConversionOperationModelInterface', + 'WordPress\AiClient\Providers\Models\VideoGeneration\Contracts\VideoGenerationModelInterface', + 'WordPress\AiClient\Providers\Models\VideoGeneration\Contracts\VideoGenerationOperationModelInterface', + 'WordPress\AiClient\Providers\OpenAiCompatibleImplementation\AbstractOpenAiCompatibleImageGenerationModel', + 'WordPress\AiClient\Providers\OpenAiCompatibleImplementation\AbstractOpenAiCompatibleModelMetadataDirectory', + 'WordPress\AiClient\Providers\OpenAiCompatibleImplementation\AbstractOpenAiCompatibleTextGenerationModel', + 'WordPress\AiClient\Providers\ProviderRegistry', + 'WordPress\AiClient\Results\Contracts\ResultInterface', + 'WordPress\AiClient\Results\DTO\Candidate', + 'WordPress\AiClient\Results\DTO\GenerativeAiResult', + 'WordPress\AiClient\Results\DTO\TokenUsage', + 'WordPress\AiClient\Results\Enums\FinishReasonEnum', + 'WordPress\AiClient\Tools\DTO\FunctionCall', + 'WordPress\AiClient\Tools\DTO\FunctionDeclaration', + 'WordPress\AiClient\Tools\DTO\FunctionResponse', + 'WordPress\AiClient\Tools\DTO\WebSearch', + + // Bundled AI Client dependencies. + 'WordPress\AiClientDependencies\Http\Discovery\ClassDiscovery', + 'WordPress\AiClientDependencies\Http\Discovery\Exception', + 'WordPress\AiClientDependencies\Http\Discovery\Exception\ClassInstantiationFailedException', + 'WordPress\AiClientDependencies\Http\Discovery\Exception\DiscoveryFailedException', + 'WordPress\AiClientDependencies\Http\Discovery\Exception\NoCandidateFoundException', + 'WordPress\AiClientDependencies\Http\Discovery\Exception\NotFoundException', + 'WordPress\AiClientDependencies\Http\Discovery\Exception\PuliUnavailableException', + 'WordPress\AiClientDependencies\Http\Discovery\Exception\StrategyUnavailableException', + 'WordPress\AiClientDependencies\Http\Discovery\Psr17FactoryDiscovery', + 'WordPress\AiClientDependencies\Http\Discovery\Psr18ClientDiscovery', + 'WordPress\AiClientDependencies\Http\Discovery\Strategy\CommonClassesStrategy', + 'WordPress\AiClientDependencies\Http\Discovery\Strategy\CommonPsr17ClassesStrategy', + 'WordPress\AiClientDependencies\Http\Discovery\Strategy\DiscoveryStrategy', + 'WordPress\AiClientDependencies\Http\Discovery\Strategy\PuliBetaStrategy', + 'WordPress\AiClientDependencies\Nyholm\Psr7\Factory\HttplugFactory', + 'WordPress\AiClientDependencies\Nyholm\Psr7\Factory\Psr17Factory', + 'WordPress\AiClientDependencies\Nyholm\Psr7\MessageTrait', + 'WordPress\AiClientDependencies\Nyholm\Psr7\Request', + 'WordPress\AiClientDependencies\Nyholm\Psr7\RequestTrait', + 'WordPress\AiClientDependencies\Nyholm\Psr7\Response', + 'WordPress\AiClientDependencies\Nyholm\Psr7\ServerRequest', + 'WordPress\AiClientDependencies\Nyholm\Psr7\Stream', + 'WordPress\AiClientDependencies\Nyholm\Psr7\StreamTrait', + 'WordPress\AiClientDependencies\Nyholm\Psr7\UploadedFile', + 'WordPress\AiClientDependencies\Nyholm\Psr7\Uri', + 'WordPress\AiClientDependencies\Psr\EventDispatcher\EventDispatcherInterface', + 'WordPress\AiClientDependencies\Psr\Http\Client\ClientExceptionInterface', + 'WordPress\AiClientDependencies\Psr\Http\Client\ClientInterface', + 'WordPress\AiClientDependencies\Psr\Http\Client\NetworkExceptionInterface', + 'WordPress\AiClientDependencies\Psr\Http\Client\RequestExceptionInterface', + 'WordPress\AiClientDependencies\Psr\Http\Message\MessageInterface', + 'WordPress\AiClientDependencies\Psr\Http\Message\RequestFactoryInterface', + 'WordPress\AiClientDependencies\Psr\Http\Message\RequestInterface', + 'WordPress\AiClientDependencies\Psr\Http\Message\ResponseFactoryInterface', + 'WordPress\AiClientDependencies\Psr\Http\Message\ResponseInterface', + 'WordPress\AiClientDependencies\Psr\Http\Message\ServerRequestFactoryInterface', + 'WordPress\AiClientDependencies\Psr\Http\Message\ServerRequestInterface', + 'WordPress\AiClientDependencies\Psr\Http\Message\StreamFactoryInterface', + 'WordPress\AiClientDependencies\Psr\Http\Message\StreamInterface', + 'WordPress\AiClientDependencies\Psr\Http\Message\UploadedFileFactoryInterface', + 'WordPress\AiClientDependencies\Psr\Http\Message\UploadedFileInterface', + 'WordPress\AiClientDependencies\Psr\Http\Message\UriFactoryInterface', + 'WordPress\AiClientDependencies\Psr\Http\Message\UriInterface', + 'WordPress\AiClientDependencies\Psr\SimpleCache\CacheInterface', + ); + /** * List of all AVIF classes included in WP Core. * @@ -799,171 +964,6 @@ final class ClassNameCaseSniff extends AbstractClassRestrictionsSniff { 'SimplePie\XML\Declaration\Parser', ); - /** - * List of all AI Client classes included in WP Core. - * - * Includes both the WP AI Client classes and the bundled dependencies. - * - * Note: this list will be enhanced in the class constructor. - * - * {@internal To be updated after every major release. Last updated for WordPress 7.0.0.} - * - * @since 3.4.0 - * - * @var string[] The class names in their "proper" case. - * The constructor will add the lowercased class name as a key to each entry. - */ - private $aiclient_classes = array( - // WP AI Client classes. - 'WordPress\AiClient\AiClient', - 'WordPress\AiClient\Builders\MessageBuilder', - 'WordPress\AiClient\Builders\PromptBuilder', - 'WordPress\AiClient\Common\AbstractDataTransferObject', - 'WordPress\AiClient\Common\AbstractEnum', - 'WordPress\AiClient\Common\Contracts\AiClientExceptionInterface', - 'WordPress\AiClient\Common\Contracts\CachesDataInterface', - 'WordPress\AiClient\Common\Contracts\WithArrayTransformationInterface', - 'WordPress\AiClient\Common\Contracts\WithJsonSchemaInterface', - 'WordPress\AiClient\Common\Exception\InvalidArgumentException', - 'WordPress\AiClient\Common\Exception\RuntimeException', - 'WordPress\AiClient\Common\Exception\TokenLimitReachedException', - 'WordPress\AiClient\Common\Traits\WithDataCachingTrait', - 'WordPress\AiClient\Events\AfterGenerateResultEvent', - 'WordPress\AiClient\Events\BeforeGenerateResultEvent', - 'WordPress\AiClient\Files\DTO\File', - 'WordPress\AiClient\Files\Enums\FileTypeEnum', - 'WordPress\AiClient\Files\Enums\MediaOrientationEnum', - 'WordPress\AiClient\Files\ValueObjects\MimeType', - 'WordPress\AiClient\Messages\DTO\Message', - 'WordPress\AiClient\Messages\DTO\MessagePart', - 'WordPress\AiClient\Messages\DTO\ModelMessage', - 'WordPress\AiClient\Messages\DTO\UserMessage', - 'WordPress\AiClient\Messages\Enums\MessagePartChannelEnum', - 'WordPress\AiClient\Messages\Enums\MessagePartTypeEnum', - 'WordPress\AiClient\Messages\Enums\MessageRoleEnum', - 'WordPress\AiClient\Messages\Enums\ModalityEnum', - 'WordPress\AiClient\Operations\Contracts\OperationInterface', - 'WordPress\AiClient\Operations\DTO\GenerativeAiOperation', - 'WordPress\AiClient\Operations\Enums\OperationStateEnum', - 'WordPress\AiClient\Providers\AbstractProvider', - 'WordPress\AiClient\Providers\ApiBasedImplementation\AbstractApiBasedModel', - 'WordPress\AiClient\Providers\ApiBasedImplementation\AbstractApiBasedModelMetadataDirectory', - 'WordPress\AiClient\Providers\ApiBasedImplementation\AbstractApiProvider', - 'WordPress\AiClient\Providers\ApiBasedImplementation\Contracts\ApiBasedModelInterface', - 'WordPress\AiClient\Providers\ApiBasedImplementation\GenerateTextApiBasedProviderAvailability', - 'WordPress\AiClient\Providers\ApiBasedImplementation\ListModelsApiBasedProviderAvailability', - 'WordPress\AiClient\Providers\Contracts\ModelMetadataDirectoryInterface', - 'WordPress\AiClient\Providers\Contracts\ProviderAvailabilityInterface', - 'WordPress\AiClient\Providers\Contracts\ProviderInterface', - 'WordPress\AiClient\Providers\Contracts\ProviderOperationsHandlerInterface', - 'WordPress\AiClient\Providers\Contracts\ProviderWithOperationsHandlerInterface', - 'WordPress\AiClient\Providers\DTO\ProviderMetadata', - 'WordPress\AiClient\Providers\DTO\ProviderModelsMetadata', - 'WordPress\AiClient\Providers\Enums\ProviderTypeEnum', - 'WordPress\AiClient\Providers\Enums\ToolTypeEnum', - 'WordPress\AiClient\Providers\Http\Abstracts\AbstractClientDiscoveryStrategy', - 'WordPress\AiClient\Providers\Http\Collections\HeadersCollection', - 'WordPress\AiClient\Providers\Http\Contracts\ClientWithOptionsInterface', - 'WordPress\AiClient\Providers\Http\Contracts\HttpTransporterInterface', - 'WordPress\AiClient\Providers\Http\Contracts\RequestAuthenticationInterface', - 'WordPress\AiClient\Providers\Http\Contracts\WithHttpTransporterInterface', - 'WordPress\AiClient\Providers\Http\Contracts\WithRequestAuthenticationInterface', - 'WordPress\AiClient\Providers\Http\DTO\ApiKeyRequestAuthentication', - 'WordPress\AiClient\Providers\Http\DTO\Request', - 'WordPress\AiClient\Providers\Http\DTO\RequestOptions', - 'WordPress\AiClient\Providers\Http\DTO\Response', - 'WordPress\AiClient\Providers\Http\Enums\HttpMethodEnum', - 'WordPress\AiClient\Providers\Http\Enums\RequestAuthenticationMethod', - 'WordPress\AiClient\Providers\Http\Exception\ClientException', - 'WordPress\AiClient\Providers\Http\Exception\NetworkException', - 'WordPress\AiClient\Providers\Http\Exception\RedirectException', - 'WordPress\AiClient\Providers\Http\Exception\ResponseException', - 'WordPress\AiClient\Providers\Http\Exception\ServerException', - 'WordPress\AiClient\Providers\Http\HttpTransporter', - 'WordPress\AiClient\Providers\Http\HttpTransporterFactory', - 'WordPress\AiClient\Providers\Http\Traits\WithHttpTransporterTrait', - 'WordPress\AiClient\Providers\Http\Traits\WithRequestAuthenticationTrait', - 'WordPress\AiClient\Providers\Http\Util\ErrorMessageExtractor', - 'WordPress\AiClient\Providers\Http\Util\ResponseUtil', - 'WordPress\AiClient\Providers\Models\Contracts\ModelInterface', - 'WordPress\AiClient\Providers\Models\DTO\ModelConfig', - 'WordPress\AiClient\Providers\Models\DTO\ModelMetadata', - 'WordPress\AiClient\Providers\Models\DTO\ModelRequirements', - 'WordPress\AiClient\Providers\Models\DTO\RequiredOption', - 'WordPress\AiClient\Providers\Models\DTO\SupportedOption', - 'WordPress\AiClient\Providers\Models\Enums\CapabilityEnum', - 'WordPress\AiClient\Providers\Models\Enums\OptionEnum', - 'WordPress\AiClient\Providers\Models\ImageGeneration\Contracts\ImageGenerationModelInterface', - 'WordPress\AiClient\Providers\Models\ImageGeneration\Contracts\ImageGenerationOperationModelInterface', - 'WordPress\AiClient\Providers\Models\SpeechGeneration\Contracts\SpeechGenerationModelInterface', - 'WordPress\AiClient\Providers\Models\SpeechGeneration\Contracts\SpeechGenerationOperationModelInterface', - 'WordPress\AiClient\Providers\Models\TextGeneration\Contracts\TextGenerationModelInterface', - 'WordPress\AiClient\Providers\Models\TextGeneration\Contracts\TextGenerationOperationModelInterface', - 'WordPress\AiClient\Providers\Models\TextToSpeechConversion\Contracts\TextToSpeechConversionModelInterface', - 'WordPress\AiClient\Providers\Models\TextToSpeechConversion\Contracts\TextToSpeechConversionOperationModelInterface', - 'WordPress\AiClient\Providers\Models\VideoGeneration\Contracts\VideoGenerationModelInterface', - 'WordPress\AiClient\Providers\Models\VideoGeneration\Contracts\VideoGenerationOperationModelInterface', - 'WordPress\AiClient\Providers\OpenAiCompatibleImplementation\AbstractOpenAiCompatibleImageGenerationModel', - 'WordPress\AiClient\Providers\OpenAiCompatibleImplementation\AbstractOpenAiCompatibleModelMetadataDirectory', - 'WordPress\AiClient\Providers\OpenAiCompatibleImplementation\AbstractOpenAiCompatibleTextGenerationModel', - 'WordPress\AiClient\Providers\ProviderRegistry', - 'WordPress\AiClient\Results\Contracts\ResultInterface', - 'WordPress\AiClient\Results\DTO\Candidate', - 'WordPress\AiClient\Results\DTO\GenerativeAiResult', - 'WordPress\AiClient\Results\DTO\TokenUsage', - 'WordPress\AiClient\Results\Enums\FinishReasonEnum', - 'WordPress\AiClient\Tools\DTO\FunctionCall', - 'WordPress\AiClient\Tools\DTO\FunctionDeclaration', - 'WordPress\AiClient\Tools\DTO\FunctionResponse', - 'WordPress\AiClient\Tools\DTO\WebSearch', - - // Bundled AI Client dependencies. - 'WordPress\AiClientDependencies\Http\Discovery\ClassDiscovery', - 'WordPress\AiClientDependencies\Http\Discovery\Exception', - 'WordPress\AiClientDependencies\Http\Discovery\Exception\ClassInstantiationFailedException', - 'WordPress\AiClientDependencies\Http\Discovery\Exception\DiscoveryFailedException', - 'WordPress\AiClientDependencies\Http\Discovery\Exception\NoCandidateFoundException', - 'WordPress\AiClientDependencies\Http\Discovery\Exception\NotFoundException', - 'WordPress\AiClientDependencies\Http\Discovery\Exception\PuliUnavailableException', - 'WordPress\AiClientDependencies\Http\Discovery\Exception\StrategyUnavailableException', - 'WordPress\AiClientDependencies\Http\Discovery\Psr17FactoryDiscovery', - 'WordPress\AiClientDependencies\Http\Discovery\Psr18ClientDiscovery', - 'WordPress\AiClientDependencies\Http\Discovery\Strategy\CommonClassesStrategy', - 'WordPress\AiClientDependencies\Http\Discovery\Strategy\CommonPsr17ClassesStrategy', - 'WordPress\AiClientDependencies\Http\Discovery\Strategy\DiscoveryStrategy', - 'WordPress\AiClientDependencies\Http\Discovery\Strategy\PuliBetaStrategy', - 'WordPress\AiClientDependencies\Nyholm\Psr7\Factory\HttplugFactory', - 'WordPress\AiClientDependencies\Nyholm\Psr7\Factory\Psr17Factory', - 'WordPress\AiClientDependencies\Nyholm\Psr7\MessageTrait', - 'WordPress\AiClientDependencies\Nyholm\Psr7\Request', - 'WordPress\AiClientDependencies\Nyholm\Psr7\RequestTrait', - 'WordPress\AiClientDependencies\Nyholm\Psr7\Response', - 'WordPress\AiClientDependencies\Nyholm\Psr7\ServerRequest', - 'WordPress\AiClientDependencies\Nyholm\Psr7\Stream', - 'WordPress\AiClientDependencies\Nyholm\Psr7\StreamTrait', - 'WordPress\AiClientDependencies\Nyholm\Psr7\UploadedFile', - 'WordPress\AiClientDependencies\Nyholm\Psr7\Uri', - 'WordPress\AiClientDependencies\Psr\EventDispatcher\EventDispatcherInterface', - 'WordPress\AiClientDependencies\Psr\Http\Client\ClientExceptionInterface', - 'WordPress\AiClientDependencies\Psr\Http\Client\ClientInterface', - 'WordPress\AiClientDependencies\Psr\Http\Client\NetworkExceptionInterface', - 'WordPress\AiClientDependencies\Psr\Http\Client\RequestExceptionInterface', - 'WordPress\AiClientDependencies\Psr\Http\Message\MessageInterface', - 'WordPress\AiClientDependencies\Psr\Http\Message\RequestFactoryInterface', - 'WordPress\AiClientDependencies\Psr\Http\Message\RequestInterface', - 'WordPress\AiClientDependencies\Psr\Http\Message\ResponseFactoryInterface', - 'WordPress\AiClientDependencies\Psr\Http\Message\ResponseInterface', - 'WordPress\AiClientDependencies\Psr\Http\Message\ServerRequestFactoryInterface', - 'WordPress\AiClientDependencies\Psr\Http\Message\ServerRequestInterface', - 'WordPress\AiClientDependencies\Psr\Http\Message\StreamFactoryInterface', - 'WordPress\AiClientDependencies\Psr\Http\Message\StreamInterface', - 'WordPress\AiClientDependencies\Psr\Http\Message\UploadedFileFactoryInterface', - 'WordPress\AiClientDependencies\Psr\Http\Message\UploadedFileInterface', - 'WordPress\AiClientDependencies\Psr\Http\Message\UriFactoryInterface', - 'WordPress\AiClientDependencies\Psr\Http\Message\UriInterface', - 'WordPress\AiClientDependencies\Psr\SimpleCache\CacheInterface', - ); - /** * List of all WP native classes in lowercase. * @@ -986,6 +986,17 @@ final class ClassNameCaseSniff extends AbstractClassRestrictionsSniff { */ private $wp_themes_classes_lc = array(); + /** + * List of all AI Client classes in lowercase. + * + * This array is automatically generated in the class constructor based on the $aiclient_classes property. + * + * @since 3.4.0 + * + * @var string[] The class names in lowercase. + */ + private $aiclient_classes_lc = array(); + /** * List of all AVIF classes in lowercase. * @@ -1041,17 +1052,6 @@ final class ClassNameCaseSniff extends AbstractClassRestrictionsSniff { */ private $simplepie_classes_lc = array(); - /** - * List of all AI Client classes in lowercase. - * - * This array is automatically generated in the class constructor based on the $aiclient_classes property. - * - * @since 3.4.0 - * - * @var string[] The class names in lowercase. - */ - private $aiclient_classes_lc = array(); - /** * Groups names. * @@ -1064,12 +1064,12 @@ final class ClassNameCaseSniff extends AbstractClassRestrictionsSniff { private $class_groups = array( 'wp_classes', 'wp_themes_classes', + 'aiclient_classes', 'avif_classes', 'getid3_classes', 'phpmailer_classes', 'requests_classes', 'simplepie_classes', - 'aiclient_classes', ); /** From 05c721a147695013aeee2420f60918e6443f1be8 Mon Sep 17 00:00:00 2001 From: Rodrigo Primo Date: Mon, 6 Jul 2026 13:50:09 +0000 Subject: [PATCH 7/7] Reorganize the `$aiclient_classes` group into blocks separated by type Following the convention already used for class groups. --- WordPress/Sniffs/WP/ClassNameCaseSniff.php | 114 +++++++++++---------- 1 file changed, 58 insertions(+), 56 deletions(-) diff --git a/WordPress/Sniffs/WP/ClassNameCaseSniff.php b/WordPress/Sniffs/WP/ClassNameCaseSniff.php index c58a7b2a21..8a614cbbe8 100644 --- a/WordPress/Sniffs/WP/ClassNameCaseSniff.php +++ b/WordPress/Sniffs/WP/ClassNameCaseSniff.php @@ -483,20 +483,35 @@ final class ClassNameCaseSniff extends AbstractClassRestrictionsSniff { * The constructor will add the lowercased class name as a key to each entry. */ private $aiclient_classes = array( - // WP AI Client classes. + // Classes. + 'WordPress\AiClientDependencies\Http\Discovery\ClassDiscovery', + 'WordPress\AiClientDependencies\Http\Discovery\Exception\ClassInstantiationFailedException', + 'WordPress\AiClientDependencies\Http\Discovery\Exception\DiscoveryFailedException', + 'WordPress\AiClientDependencies\Http\Discovery\Exception\NoCandidateFoundException', + 'WordPress\AiClientDependencies\Http\Discovery\Exception\NotFoundException', + 'WordPress\AiClientDependencies\Http\Discovery\Exception\PuliUnavailableException', + 'WordPress\AiClientDependencies\Http\Discovery\Exception\StrategyUnavailableException', + 'WordPress\AiClientDependencies\Http\Discovery\Psr17FactoryDiscovery', + 'WordPress\AiClientDependencies\Http\Discovery\Psr18ClientDiscovery', + 'WordPress\AiClientDependencies\Http\Discovery\Strategy\CommonClassesStrategy', + 'WordPress\AiClientDependencies\Http\Discovery\Strategy\CommonPsr17ClassesStrategy', + 'WordPress\AiClientDependencies\Http\Discovery\Strategy\PuliBetaStrategy', + 'WordPress\AiClientDependencies\Nyholm\Psr7\Factory\HttplugFactory', + 'WordPress\AiClientDependencies\Nyholm\Psr7\Factory\Psr17Factory', + 'WordPress\AiClientDependencies\Nyholm\Psr7\Request', + 'WordPress\AiClientDependencies\Nyholm\Psr7\Response', + 'WordPress\AiClientDependencies\Nyholm\Psr7\ServerRequest', + 'WordPress\AiClientDependencies\Nyholm\Psr7\Stream', + 'WordPress\AiClientDependencies\Nyholm\Psr7\UploadedFile', + 'WordPress\AiClientDependencies\Nyholm\Psr7\Uri', 'WordPress\AiClient\AiClient', 'WordPress\AiClient\Builders\MessageBuilder', 'WordPress\AiClient\Builders\PromptBuilder', 'WordPress\AiClient\Common\AbstractDataTransferObject', 'WordPress\AiClient\Common\AbstractEnum', - 'WordPress\AiClient\Common\Contracts\AiClientExceptionInterface', - 'WordPress\AiClient\Common\Contracts\CachesDataInterface', - 'WordPress\AiClient\Common\Contracts\WithArrayTransformationInterface', - 'WordPress\AiClient\Common\Contracts\WithJsonSchemaInterface', 'WordPress\AiClient\Common\Exception\InvalidArgumentException', 'WordPress\AiClient\Common\Exception\RuntimeException', 'WordPress\AiClient\Common\Exception\TokenLimitReachedException', - 'WordPress\AiClient\Common\Traits\WithDataCachingTrait', 'WordPress\AiClient\Events\AfterGenerateResultEvent', 'WordPress\AiClient\Events\BeforeGenerateResultEvent', 'WordPress\AiClient\Files\DTO\File', @@ -511,32 +526,20 @@ final class ClassNameCaseSniff extends AbstractClassRestrictionsSniff { 'WordPress\AiClient\Messages\Enums\MessagePartTypeEnum', 'WordPress\AiClient\Messages\Enums\MessageRoleEnum', 'WordPress\AiClient\Messages\Enums\ModalityEnum', - 'WordPress\AiClient\Operations\Contracts\OperationInterface', 'WordPress\AiClient\Operations\DTO\GenerativeAiOperation', 'WordPress\AiClient\Operations\Enums\OperationStateEnum', 'WordPress\AiClient\Providers\AbstractProvider', 'WordPress\AiClient\Providers\ApiBasedImplementation\AbstractApiBasedModel', 'WordPress\AiClient\Providers\ApiBasedImplementation\AbstractApiBasedModelMetadataDirectory', 'WordPress\AiClient\Providers\ApiBasedImplementation\AbstractApiProvider', - 'WordPress\AiClient\Providers\ApiBasedImplementation\Contracts\ApiBasedModelInterface', 'WordPress\AiClient\Providers\ApiBasedImplementation\GenerateTextApiBasedProviderAvailability', 'WordPress\AiClient\Providers\ApiBasedImplementation\ListModelsApiBasedProviderAvailability', - 'WordPress\AiClient\Providers\Contracts\ModelMetadataDirectoryInterface', - 'WordPress\AiClient\Providers\Contracts\ProviderAvailabilityInterface', - 'WordPress\AiClient\Providers\Contracts\ProviderInterface', - 'WordPress\AiClient\Providers\Contracts\ProviderOperationsHandlerInterface', - 'WordPress\AiClient\Providers\Contracts\ProviderWithOperationsHandlerInterface', 'WordPress\AiClient\Providers\DTO\ProviderMetadata', 'WordPress\AiClient\Providers\DTO\ProviderModelsMetadata', 'WordPress\AiClient\Providers\Enums\ProviderTypeEnum', 'WordPress\AiClient\Providers\Enums\ToolTypeEnum', 'WordPress\AiClient\Providers\Http\Abstracts\AbstractClientDiscoveryStrategy', 'WordPress\AiClient\Providers\Http\Collections\HeadersCollection', - 'WordPress\AiClient\Providers\Http\Contracts\ClientWithOptionsInterface', - 'WordPress\AiClient\Providers\Http\Contracts\HttpTransporterInterface', - 'WordPress\AiClient\Providers\Http\Contracts\RequestAuthenticationInterface', - 'WordPress\AiClient\Providers\Http\Contracts\WithHttpTransporterInterface', - 'WordPress\AiClient\Providers\Http\Contracts\WithRequestAuthenticationInterface', 'WordPress\AiClient\Providers\Http\DTO\ApiKeyRequestAuthentication', 'WordPress\AiClient\Providers\Http\DTO\Request', 'WordPress\AiClient\Providers\Http\DTO\RequestOptions', @@ -550,11 +553,8 @@ final class ClassNameCaseSniff extends AbstractClassRestrictionsSniff { 'WordPress\AiClient\Providers\Http\Exception\ServerException', 'WordPress\AiClient\Providers\Http\HttpTransporter', 'WordPress\AiClient\Providers\Http\HttpTransporterFactory', - 'WordPress\AiClient\Providers\Http\Traits\WithHttpTransporterTrait', - 'WordPress\AiClient\Providers\Http\Traits\WithRequestAuthenticationTrait', 'WordPress\AiClient\Providers\Http\Util\ErrorMessageExtractor', 'WordPress\AiClient\Providers\Http\Util\ResponseUtil', - 'WordPress\AiClient\Providers\Models\Contracts\ModelInterface', 'WordPress\AiClient\Providers\Models\DTO\ModelConfig', 'WordPress\AiClient\Providers\Models\DTO\ModelMetadata', 'WordPress\AiClient\Providers\Models\DTO\ModelRequirements', @@ -562,21 +562,10 @@ final class ClassNameCaseSniff extends AbstractClassRestrictionsSniff { 'WordPress\AiClient\Providers\Models\DTO\SupportedOption', 'WordPress\AiClient\Providers\Models\Enums\CapabilityEnum', 'WordPress\AiClient\Providers\Models\Enums\OptionEnum', - 'WordPress\AiClient\Providers\Models\ImageGeneration\Contracts\ImageGenerationModelInterface', - 'WordPress\AiClient\Providers\Models\ImageGeneration\Contracts\ImageGenerationOperationModelInterface', - 'WordPress\AiClient\Providers\Models\SpeechGeneration\Contracts\SpeechGenerationModelInterface', - 'WordPress\AiClient\Providers\Models\SpeechGeneration\Contracts\SpeechGenerationOperationModelInterface', - 'WordPress\AiClient\Providers\Models\TextGeneration\Contracts\TextGenerationModelInterface', - 'WordPress\AiClient\Providers\Models\TextGeneration\Contracts\TextGenerationOperationModelInterface', - 'WordPress\AiClient\Providers\Models\TextToSpeechConversion\Contracts\TextToSpeechConversionModelInterface', - 'WordPress\AiClient\Providers\Models\TextToSpeechConversion\Contracts\TextToSpeechConversionOperationModelInterface', - 'WordPress\AiClient\Providers\Models\VideoGeneration\Contracts\VideoGenerationModelInterface', - 'WordPress\AiClient\Providers\Models\VideoGeneration\Contracts\VideoGenerationOperationModelInterface', 'WordPress\AiClient\Providers\OpenAiCompatibleImplementation\AbstractOpenAiCompatibleImageGenerationModel', 'WordPress\AiClient\Providers\OpenAiCompatibleImplementation\AbstractOpenAiCompatibleModelMetadataDirectory', 'WordPress\AiClient\Providers\OpenAiCompatibleImplementation\AbstractOpenAiCompatibleTextGenerationModel', 'WordPress\AiClient\Providers\ProviderRegistry', - 'WordPress\AiClient\Results\Contracts\ResultInterface', 'WordPress\AiClient\Results\DTO\Candidate', 'WordPress\AiClient\Results\DTO\GenerativeAiResult', 'WordPress\AiClient\Results\DTO\TokenUsage', @@ -586,32 +575,9 @@ final class ClassNameCaseSniff extends AbstractClassRestrictionsSniff { 'WordPress\AiClient\Tools\DTO\FunctionResponse', 'WordPress\AiClient\Tools\DTO\WebSearch', - // Bundled AI Client dependencies. - 'WordPress\AiClientDependencies\Http\Discovery\ClassDiscovery', + // Interfaces. 'WordPress\AiClientDependencies\Http\Discovery\Exception', - 'WordPress\AiClientDependencies\Http\Discovery\Exception\ClassInstantiationFailedException', - 'WordPress\AiClientDependencies\Http\Discovery\Exception\DiscoveryFailedException', - 'WordPress\AiClientDependencies\Http\Discovery\Exception\NoCandidateFoundException', - 'WordPress\AiClientDependencies\Http\Discovery\Exception\NotFoundException', - 'WordPress\AiClientDependencies\Http\Discovery\Exception\PuliUnavailableException', - 'WordPress\AiClientDependencies\Http\Discovery\Exception\StrategyUnavailableException', - 'WordPress\AiClientDependencies\Http\Discovery\Psr17FactoryDiscovery', - 'WordPress\AiClientDependencies\Http\Discovery\Psr18ClientDiscovery', - 'WordPress\AiClientDependencies\Http\Discovery\Strategy\CommonClassesStrategy', - 'WordPress\AiClientDependencies\Http\Discovery\Strategy\CommonPsr17ClassesStrategy', 'WordPress\AiClientDependencies\Http\Discovery\Strategy\DiscoveryStrategy', - 'WordPress\AiClientDependencies\Http\Discovery\Strategy\PuliBetaStrategy', - 'WordPress\AiClientDependencies\Nyholm\Psr7\Factory\HttplugFactory', - 'WordPress\AiClientDependencies\Nyholm\Psr7\Factory\Psr17Factory', - 'WordPress\AiClientDependencies\Nyholm\Psr7\MessageTrait', - 'WordPress\AiClientDependencies\Nyholm\Psr7\Request', - 'WordPress\AiClientDependencies\Nyholm\Psr7\RequestTrait', - 'WordPress\AiClientDependencies\Nyholm\Psr7\Response', - 'WordPress\AiClientDependencies\Nyholm\Psr7\ServerRequest', - 'WordPress\AiClientDependencies\Nyholm\Psr7\Stream', - 'WordPress\AiClientDependencies\Nyholm\Psr7\StreamTrait', - 'WordPress\AiClientDependencies\Nyholm\Psr7\UploadedFile', - 'WordPress\AiClientDependencies\Nyholm\Psr7\Uri', 'WordPress\AiClientDependencies\Psr\EventDispatcher\EventDispatcherInterface', 'WordPress\AiClientDependencies\Psr\Http\Client\ClientExceptionInterface', 'WordPress\AiClientDependencies\Psr\Http\Client\ClientInterface', @@ -631,6 +597,42 @@ final class ClassNameCaseSniff extends AbstractClassRestrictionsSniff { 'WordPress\AiClientDependencies\Psr\Http\Message\UriFactoryInterface', 'WordPress\AiClientDependencies\Psr\Http\Message\UriInterface', 'WordPress\AiClientDependencies\Psr\SimpleCache\CacheInterface', + 'WordPress\AiClient\Common\Contracts\AiClientExceptionInterface', + 'WordPress\AiClient\Common\Contracts\CachesDataInterface', + 'WordPress\AiClient\Common\Contracts\WithArrayTransformationInterface', + 'WordPress\AiClient\Common\Contracts\WithJsonSchemaInterface', + 'WordPress\AiClient\Operations\Contracts\OperationInterface', + 'WordPress\AiClient\Providers\ApiBasedImplementation\Contracts\ApiBasedModelInterface', + 'WordPress\AiClient\Providers\Contracts\ModelMetadataDirectoryInterface', + 'WordPress\AiClient\Providers\Contracts\ProviderAvailabilityInterface', + 'WordPress\AiClient\Providers\Contracts\ProviderInterface', + 'WordPress\AiClient\Providers\Contracts\ProviderOperationsHandlerInterface', + 'WordPress\AiClient\Providers\Contracts\ProviderWithOperationsHandlerInterface', + 'WordPress\AiClient\Providers\Http\Contracts\ClientWithOptionsInterface', + 'WordPress\AiClient\Providers\Http\Contracts\HttpTransporterInterface', + 'WordPress\AiClient\Providers\Http\Contracts\RequestAuthenticationInterface', + 'WordPress\AiClient\Providers\Http\Contracts\WithHttpTransporterInterface', + 'WordPress\AiClient\Providers\Http\Contracts\WithRequestAuthenticationInterface', + 'WordPress\AiClient\Providers\Models\Contracts\ModelInterface', + 'WordPress\AiClient\Providers\Models\ImageGeneration\Contracts\ImageGenerationModelInterface', + 'WordPress\AiClient\Providers\Models\ImageGeneration\Contracts\ImageGenerationOperationModelInterface', + 'WordPress\AiClient\Providers\Models\SpeechGeneration\Contracts\SpeechGenerationModelInterface', + 'WordPress\AiClient\Providers\Models\SpeechGeneration\Contracts\SpeechGenerationOperationModelInterface', + 'WordPress\AiClient\Providers\Models\TextGeneration\Contracts\TextGenerationModelInterface', + 'WordPress\AiClient\Providers\Models\TextGeneration\Contracts\TextGenerationOperationModelInterface', + 'WordPress\AiClient\Providers\Models\TextToSpeechConversion\Contracts\TextToSpeechConversionModelInterface', + 'WordPress\AiClient\Providers\Models\TextToSpeechConversion\Contracts\TextToSpeechConversionOperationModelInterface', + 'WordPress\AiClient\Providers\Models\VideoGeneration\Contracts\VideoGenerationModelInterface', + 'WordPress\AiClient\Providers\Models\VideoGeneration\Contracts\VideoGenerationOperationModelInterface', + 'WordPress\AiClient\Results\Contracts\ResultInterface', + + // Traits. + 'WordPress\AiClientDependencies\Nyholm\Psr7\MessageTrait', + 'WordPress\AiClientDependencies\Nyholm\Psr7\RequestTrait', + 'WordPress\AiClientDependencies\Nyholm\Psr7\StreamTrait', + 'WordPress\AiClient\Common\Traits\WithDataCachingTrait', + 'WordPress\AiClient\Providers\Http\Traits\WithHttpTransporterTrait', + 'WordPress\AiClient\Providers\Http\Traits\WithRequestAuthenticationTrait', ); /**