We are not perfect: stubs problems
Closed this issue Β· 15 comments
Please help!
many errors
530 Property WP_Upgrader::$result (array{source: string, source_files: string, destination: string,
destination_name: string, local_destination: string, remote_destination: string, clear_destination:
bool}|WP_Error) does not accept default value of type array{}.
π‘ Array does not have offset 'source'.
963 Default value of the parameter #1 $admin_header_callback ('') of method Custom_Background::__construct() is
incompatible with type callable(): mixed.
963 Default value of the parameter #2 $admin_image_div_callback ('') of method Custom_Background::__construct()
is incompatible with type callable(): mixed.
1094 Default value of the parameter #2 $admin_image_div_callback ('') of method
Custom_Image_Header::__construct() is incompatible with type callable(): mixed.
1541 Constant FTP_AUTOASCII not found.
1889 PHPDoc type array|WP_Error of property Language_Pack_Upgrader::$result is not covariant with PHPDoc type
array{source: string, source_files: string, destination: string, destination_name: string,
local_destination: string, remote_destination: string, clear_destination: bool}|WP_Error of overridden
property WP_Upgrader::$result.
2946 PHPDoc type array|WP_Error of property Plugin_Upgrader::$result is not covariant with PHPDoc type
array{source: string, source_files: string, destination: string, destination_name: string,
local_destination: string, remote_destination: string, clear_destination: bool}|WP_Error of overridden
property WP_Upgrader::$result.
3265 PHPDoc type array|WP_Error of property Theme_Upgrader::$result is not covariant with PHPDoc type
array{source: string, source_files: string, destination: string, destination_name: string,
local_destination: string, remote_destination: string, clear_destination: bool}|WP_Error of overridden
property WP_Upgrader::$result.
3823 Property Walker_Nav_Menu::$tree_type (string) does not accept default value of type array<int, string>.
3845 Parameter #3 $args (stdClass) of method Walker_Nav_Menu::start_lvl() should be compatible with parameter
$args (array) of method Walker::start_lvl()
3859 Parameter #3 $args (stdClass) of method Walker_Nav_Menu::end_lvl() should be compatible with parameter
$args (array) of method Walker::end_lvl()
3878 Parameter #4 $args (stdClass) of method Walker_Nav_Menu::start_el() should be compatible with parameter
$args (array) of method Walker::start_el()
3894 Parameter #4 $args (stdClass) of method Walker_Nav_Menu::end_el() should be compatible with parameter $args
(array) of method Walker::end_el()
4476 Default value of the parameter #1 $which ('') of method WP_List_Table::bulk_actions() is incompatible with
type 'bottom'|'top'.
6694 Default value of the parameter #1 $opt (string) of method WP_Filesystem_FTPext::__construct() is
incompatible with type array.
7129 Default value of the parameter #1 $opt (string) of method WP_Filesystem_ftpsockets::__construct() is
incompatible with type array.
7538 Property WP_Filesystem_SSH2::$link (resource) does not accept default value of type false.
7557 Default value of the parameter #1 $opt (string) of method WP_Filesystem_SSH2::__construct() is incompatible
with type array.
9730 Parameter #1 $comment_status (bool) of method WP_Post_Comments_List_Table::get_per_page() should be
compatible with parameter $comment_status (string) of method WP_Comments_List_Table::get_per_page()
12492 Default value of the parameter #2 $page (string) of method WP_User_Search::__construct() is incompatible
with type int.
12505 Default value of the parameter #2 $page (string) of method WP_User_Search::WP_User_Search() is incompatible
with type int.
13545 Constant GETID3_TEMP_DIR not found.
18867 Parameter $handle of method WpOrg\Requests\Auth\Basic::curl_before_send() has invalid type CurlHandle.
19854 Parameter $hostname of method WpOrg\Requests\IdnaEncoder::encode() has invalid type
WpOrg\Requests\Stringable.
19977 Parameter $ip of method WpOrg\Requests\Ipv6::uncompress() has invalid type WpOrg\Requests\Stringable.
20169 Parameter $iri of method WpOrg\Requests\Iri::__construct() has invalid type WpOrg\Requests\Stringable.
20517 Parameter $handle of method WpOrg\Requests\Proxy\Http::curl_before_send() has invalid type CurlHandle.
20850 Parameter $url of method WpOrg\Requests\Requests::request() has invalid type WpOrg\Requests\Stringable.
20925 Parameter $path of method WpOrg\Requests\Requests::set_certificate_path() has invalid type
WpOrg\Requests\Stringable.
21065 Property WpOrg\Requests\Response::$headers (WpOrg\Requests\Response\Headers) does not accept default value
of type array.
21107 Property WpOrg\Requests\Response::$cookies (WpOrg\Requests\Cookie\Jar) does not accept default value of
type array.
21375 Parameter $url of method WpOrg\Requests\Session::__construct() has invalid type WpOrg\Requests\Stringable.
21542 Parameter $host of method WpOrg\Requests\Ssl::verify_certificate() has invalid type
WpOrg\Requests\Stringable.
21562 Parameter $reference of method WpOrg\Requests\Ssl::verify_reference_name() has invalid type
WpOrg\Requests\Stringable.
21573 Parameter $host of method WpOrg\Requests\Ssl::match_domain() has invalid type WpOrg\Requests\Stringable.
21573 Parameter $reference of method WpOrg\Requests\Ssl::match_domain() has invalid type
WpOrg\Requests\Stringable.
21674 Parameter $url of method WpOrg\Requests\Transport\Curl::request() has invalid type
WpOrg\Requests\Transport\Stringable.
21699 Method WpOrg\Requests\Transport\Curl::get_subrequest_handle() has invalid return type CurlHandle.
21720 Parameter $handle of method WpOrg\Requests\Transport\Curl::stream_headers() has invalid type CurlHandle.
21732 Parameter $handle of method WpOrg\Requests\Transport\Curl::stream_body() has invalid type CurlHandle.
21789 Parameter $url of method WpOrg\Requests\Transport\Fsockopen::request() has invalid type
WpOrg\Requests\Transport\Stringable.
22912 Property SimplePie_Cache_Redis::$data has unknown class type as its type.
22920 PHPDoc tag @param references unknown parameter: $type
23503 Constant SIMPLEPIE_USERAGENT not found.
23610 Constant SIMPLEPIE_LOCATOR_ALL not found.
23876 Default value of the parameter #1 $encoding (false) of method SimplePie::set_input_encoding() is
incompatible with type string.
23891 Constant SIMPLEPIE_LOCATOR_ALL not found.
24014 Constant SIMPLEPIE_USERAGENT not found.
24106 PHPDoc tag @param has invalid value (array List of HTTPS domains. Example array('biz', 'example.com',
'example.org', 'www.example.net').): Unexpected token "List", expected variable at offset 145
24115 Default value of the parameter #1 $page (false) of method SimplePie::set_image_handler() is incompatible
with type string.
25691 Constant SIMPLEPIE_FILE_SOURCE_NONE not found.
26104 Method SimplePie_IRI::absolutize() has invalid return type IRI.
26104 Parameter $base of method SimplePie_IRI::absolutize() has invalid type IRI.
26104 Parameter $relative of method SimplePie_IRI::absolutize() has invalid type IRI.
26845 Constant SIMPLEPIE_LOCATOR_ALL not found.
27043 PHPDoc tag @param references unknown parameter: $data
27414 Array has 2 duplicate keys with value 'jan' ('jan', 'jan').
27416 Array has 2 duplicate keys with value 'feb' ('feb', 'feb').
27420 Array has 2 duplicate keys with value 'apr' ('apr', 'apr').
27421 Array has 3 duplicate keys with value 'april' ('april', 'april', 'april').
27424 Array has 2 duplicate keys with value 'jun' ('jun', 'jun').
27426 Array has 2 duplicate keys with value 'jul' ('jul', 'jul').
27428 Array has 2 duplicate keys with value 'aug' ('aug', 'aug').
27429 Array has 2 duplicate keys with value 'august' ('august', 'august').
27430 Array has 2 duplicate keys with value 'sep' ('sep', 'sep').
27431 Array has 3 duplicate keys with value 'september' ('september', 'september', 'september').
27434 Array has 2 duplicate keys with value 'nov' ('nov', 'nov').
27435 Array has 4 duplicate keys with value 'november' ('november', 'november', 'november', 'november').
27437 Array has 3 duplicate keys with value 'december' ('december', 'december', 'december').
27444 Array has 2 duplicate keys with value 'juni' ('juni', 'juni').
27445 Array has 2 duplicate keys with value 'juli' ('juli', 'juli').
27448 Array has 2 duplicate keys with value 'oktober' ('oktober', 'oktober').
27456 Array has 2 duplicate keys with value 'mai' ('mai', 'mai').
27462 Array has 2 duplicate keys with value 'novembre' ('novembre', 'novembre').
27492 Array has 2 duplicate keys with value 'marzo' ('marzo', 'marzo').
27497 Array has 2 duplicate keys with value 'agosto' ('agosto', 'agosto').
27593 Array has 2 duplicate keys with value 'GST' ('GST', 'GST').
27657 Parameter $callback of method SimplePie_Parse_Date::add_callback() has invalid type callback.
27678 PHPDoc tag @param references unknown parameter: $data
29256 Default value of the parameter #3 $end (false) of method Text_Diff_Engine_shell::_getLines() is
incompatible with type int.
29637 Parameter $p of method AtomParser::map_xmlns() has invalid type indexish.
29738 Constant UNDEFINED not found.
29740 Constant UNDEFINED not found.
29742 Constant UNDEFINED not found.
29744 Constant UNDEFINED not found.
29758 Method Avifinfo\Features::get_primary_item_features() has invalid return type Avifinfo\Status.
29783 Constant MAX_SIZE not found.
29783 Method Avifinfo\Box::parse() has invalid return type Avifinfo\Status.
29783 Parameter $handle of method Avifinfo\Box::parse() has invalid type Avifinfo\stream.
30993 Default value of the parameter #1 $args ('') of method WP_Ajax_Response::add() is incompatible with type
array{what?: string, action?: string|false, id?: int|WP_Error, old_id?: int|false, position?: string,
data?: string|WP_Error, supplemental?: array}.
31293 Parameter $source_properties of method WP_Block_Bindings_Registry::register() has invalid type callback.
33180 Property WP_Block::$inner_blocks (WP_Block_List) does not accept default value of type array.
33320 Property WP_Comment_Query::$meta_query (WP_Meta_Query) does not accept default value of type false.
33350 Property WP_Comment_Query::$date_query (WP_Date_Query) does not accept default value of type false.
33587 Default value of the parameter #1 $query ('') of method WP_Comment_Query::__construct() is incompatible
with type array{author_email?: string, author_url?: string, author__in?: array<int>, author__not_in?:
array<int>, comment__in?: array<int>, comment__not_in?: array<int>, count?: bool, date_query?: array, ...}.
33646 Default value of the parameter #1 $query ('') of method WP_Comment_Query::parse_query() is incompatible
with type array{author_email?: string, author_url?: string, author__in?: array<int>, author__not_in?:
array<int>, comment__in?: array<int>, comment__not_in?: array<int>, count?: bool, date_query?: array, ...}.
33774 Property WP_Comment::$comment_post_ID (string) does not accept default value of type int.
33832 Property WP_Comment::$comment_karma (string) does not accept default value of type int.
33863 Property WP_Comment::$comment_parent (string) does not accept default value of type int.
33872 Property WP_Comment::$user_id (string) does not accept default value of type int.
34161 Property WP_Customize_Control::$active_callback (callable(): mixed) does not accept default value of type
''.
36341 Property WP_Customize_Panel::$theme_supports (array) does not accept default value of type string.
36389 Property WP_Customize_Panel::$active_callback (callable(): mixed) does not accept default value of type ''.
36666 Property WP_Customize_Section::$active_callback (callable(): mixed) does not accept default value of type
''.
36897 Property WP_Customize_Setting::$validate_callback (callable(): mixed) does not accept default value of type
''.
36904 Property WP_Customize_Setting::$sanitize_callback (callable(): mixed) does not accept default value of type
''.
36911 Property WP_Customize_Setting::$sanitize_js_callback (callable(): mixed) does not accept default value of
type ''.
40943 Return type (WpOrg\Requests\Utility\CaseInsensitiveDictionary) of method
WP_HTTP_Requests_Response::get_headers() should be compatible with return type (array) of method
WP_HTTP_Response::get_headers()
41016 Class WP_Http_Cookie referenced with incorrect case: WP_HTTP_Cookie.
41895 Property WP_Image_Editor_GD::$image has unknown class GdImage as its type.
41940 Default value of the parameter #1 $width (false) of method WP_Image_Editor_GD::update_size() is
incompatible with type int.
41940 Default value of the parameter #2 $height (false) of method WP_Image_Editor_GD::update_size() is
incompatible with type int.
41989 Method WP_Image_Editor_GD::_resize() has invalid return type GdImage.
42152 Parameter $image of method WP_Image_Editor_GD::_save() has invalid type GdImage.
43296 Default value of the parameter #1 $meta_query (false) of method WP_Meta_Query::__construct() is
incompatible with type array.
43796 Default value of the parameter #1 $query ('') of method WP_Network_Query::__construct() is incompatible
with type array{network__in?: array<int>, network__not_in?: array<int>, count?: bool, fields?: string,
number?: int, offset?: int, no_found_rows?: bool, orderby?: array|string, ...}.
43825 Default value of the parameter #1 $query ('') of method WP_Network_Query::parse_query() is incompatible
with type array{network__in?: array<int>, network__not_in?: array<int>, count?: bool, fields?: string,
number?: int, offset?: int, no_found_rows?: bool, orderby?: array|string, ...}.
44550 Default value of the parameter #2 $args ('') of method WP_oEmbed::get_provider() is incompatible with type
array{discover?: bool}.
44609 Default value of the parameter #2 $args ('') of method WP_oEmbed::get_data() is incompatible with type
array{width?: int|string, height?: int|string, discover?: bool}.
44631 Default value of the parameter #2 $args ('') of method WP_oEmbed::get_html() is incompatible with type
array{width?: int|string, height?: int|string, discover?: bool}.
44661 Default value of the parameter #3 $args ('') of method WP_oEmbed::fetch() is incompatible with type
array{width?: int|string, height?: int|string, discover?: bool}.
45841 Property WP_Post::$post_author (string) does not accept default value of type int.
45990 Property WP_Post::$comment_count (string) does not accept default value of type int.
46112 Property WP_Query::$meta_query (WP_Meta_Query) does not accept default value of type false.
46119 Property WP_Query::$date_query (WP_Date_Query) does not accept default value of type false.
46721 Default value of the parameter #1 $query ('') of method WP_Query::parse_query() is incompatible with type
array{attachment_id?: int, author?: int|string, author_name?: string, author__in?: array<int>,
author__not_in?: array<int>, cache_results?: bool, cat?: int|string, category__and?: array<int>, ...}.
48556 Constant EP_NONE not found.
50061 Property WP_Site_Query::$meta_query (WP_Meta_Query) does not accept default value of type false.
50075 Property WP_Site_Query::$date_query (WP_Date_Query) does not accept default value of type false.
50233 Default value of the parameter #1 $query ('') of method WP_Site_Query::__construct() is incompatible with
type array{site__in?: array<int>, site__not_in?: array<int>, count?: bool, date_query?: array, fields?:
string, ID?: int, number?: int, offset?: int, ...}.
50286 Default value of the parameter #1 $query ('') of method WP_Site_Query::parse_query() is incompatible with
type array{site__in?: array<int>, site__not_in?: array<int>, count?: bool, date_query?: array, fields?:
string, ID?: int, number?: int, offset?: int, ...}.
51456 Property WP_Term_Query::$meta_query (WP_Meta_Query) does not accept default value of type false.
51643 Default value of the parameter #1 $query ('') of method WP_Term_Query::__construct() is incompatible with
type array{taxonomy?: array<string>|string, object_ids?: array<int>|int, orderby?: string, order?: string,
hide_empty?: bool|int, include?: array<int>|string, exclude?: array<int>|string, exclude_tree?:
array<int>|string, ...}.
51689 Default value of the parameter #1 $query ('') of method WP_Term_Query::parse_query() is incompatible with
type array{taxonomy?: array<string>|string, object_ids?: array<int>|int, orderby?: string, order?: string,
hide_empty?: bool|int, include?: array<int>|string, exclude?: array<int>|string, exclude_tree?:
array<int>|string, ...}.
51879 Property WP_Term::$term_group (int) does not accept default value of type string.
52081 Property WP_Text_Diff_Renderer_Table::$_show_split_view (string) does not accept default value of type
true.
54832 Property WP_User_Query::$meta_query (WP_Meta_Query) does not accept default value of type false.
55448 Default value of the parameter #3 $site_id (string) of method WP_User::__construct() is incompatible with
type int.
55459 Default value of the parameter #2 $site_id (string) of method WP_User::init() is incompatible with type
int.
55774 Default value of the parameter #1 $blog_id (string) of method WP_User::for_blog() is incompatible with type
int.
55786 Default value of the parameter #1 $site_id (string) of method WP_User::for_site() is incompatible with type
int.
61950 PHPDoc type array of property WP_Customize_Nav_Menu_Item_Setting::$default is not covariant with PHPDoc
type string of overridden property WP_Customize_Setting::$default.
62216 Return type (void) of method WP_Customize_Nav_Menu_Item_Setting::update() should be compatible with return
type (bool) of method WP_Customize_Setting::update()
62439 PHPDoc type array of property WP_Customize_Nav_Menu_Setting::$default is not covariant with PHPDoc type
string of overridden property WP_Customize_Setting::$default.
62670 Return type (void) of method WP_Customize_Nav_Menu_Setting::update() should be compatible with return type
(bool) of method WP_Customize_Setting::update()
62914 Property WP_Customize_Partial::$id_data (array{base: string, keys: array}) does not accept default value of
type array{}.
π‘ Array does not have offset 'base'.
64727 PHPDoc tag @var has invalid value ([string, array]|null): Unexpected token "]", expected '(' at offset 251
67175 PHPDoc tag @phpstan-param has invalid value (array{0: string, 1: string}{
0: string,
1: string,
} $plurals): Unexpected token "{", expected variable at offset 995
68046 Return type (string) of method MO::select_plural_form() should be compatible with return type (int) of
method Translations::select_plural_form()
69240 PHPDoc tag @phpstan-param has invalid value (@param key-of<T> $offset): Unexpected token "@param", expected
type at offset 220
71204 PHPDoc type false of property WP_REST_Attachments_Controller::$allow_batch is not covariant with PHPDoc
type array of overridden property WP_REST_Posts_Controller::$allow_batch.
72902 PHPDoc type false of property WP_REST_Font_Faces_Controller::$allow_batch is not covariant with PHPDoc type
array of overridden property WP_REST_Posts_Controller::$allow_batch.
73174 PHPDoc type false of property WP_REST_Font_Families_Controller::$allow_batch is not covariant with PHPDoc
type array of overridden property WP_REST_Posts_Controller::$allow_batch.
81352 PHPDoc tag @param has invalid value (binary string $input Must be at least $num_bytes-long.):
Unexpected token "string", expected variable at offset 99
81362 Function Avifinfo\read() has invalid return type Avifinfo\binary.
81362 Parameter $handle of function Avifinfo\read() has invalid type Avifinfo\stream.
81373 Parameter $handle of function Avifinfo\skip() has invalid type Avifinfo\stream.
96859 PHPDoc tag @throws with type WP_Error is not subtype of Throwable
97171 PHPDoc tag @throws with type WP_Error is not subtype of Throwable
97215 PHPDoc tag @throws with type WP_Error is not subtype of Throwable
97360 PHPDoc tag @throws with type WP_Error is not subtype of Throwable
Strange things like docblock for translate_plural
and WP_REST_Request::offsetExists
.
Config for generating these errors.
parameters:
paths:
- wordpress-stubs.php
level: 5
ignoreErrors:
- '#but return statement is missing\.$#'
- '#has an unused parameter#'
- '#^(Property|Static property|Method|Static method) \S+ is unused\.$#'
- '#is never read, only written\.$#'
- '#has invalid (return )?type (WP_Error|WP_Customize_Manager)\.#'
- '#should always throw an exception or terminate script execution but doesn.t do that\.$#'
Many of those can probably be easily fixed in core. cc @johnbillion
I don't fully understand. You're scanning the stubs file in the extension repo? Or should this go to the stubs repo? Why even scanning them with PHPStan? π
Why even scanning them with PHPStan? π
Please see the results!
π
Can we have a list of those errors to check off the ones we won't address and those we have addressed once a fix is merged?
Can we have a list of those errors
a PHPStan baseline file??
Something like this
- error 1
- error 2
But I think the baseline approach might be an interesting idea to look into. Maybe with a dedicated phpstan config just for stub checks as you have it here?
I think this is best addressed in WordPress core. A few of these have been reported already across a few tickets. See https://core.trac.wordpress.org/search?ticket=on&q=phpstan .
To please Ian
- help John fix core
- add constants FTP_AUTOASCII GETID3_TEMP_DIR EP_NONE, UNDEFINED MAX_SIZE
- ignore SimplePie problems
- WP_Translation_Controller::translate_plural
- WP_REST_Request::offsetExists fixed in php-stubs/wordpress-stubs#176
Someone has smuggled in an array shape for WP_Translation_Controller::translate_plural()
. Unfortunately, the shape is accompanied by the WordPress @type
notation. https://github.com/WordPress/WordPress/blob/9702c2e265bd3aff0522f55063d97ca21cc70099/wp-includes/l10n/class-wp-translation-controller.php#L285-L290
I guess this should be fixed in core as well.
@swissspidy Could you evaluate this? Someone === Pascal
? π
Sure! WP_Translation_Controller::translate_plural
is fixed in https://core.trac.wordpress.org/changeset/58155
Whatβs left to be done here? Anything weβd need to fix in core? :)
Nothing.