diff --git a/functionMap.php b/functionMap.php index afacc3c..b88e288 100644 --- a/functionMap.php +++ b/functionMap.php @@ -167,4 +167,5 @@ 'wp_get_post_terms' => ["(\$args is array{fields: 'names'|'slugs'} ? list : (\$args is array{fields: 'id=>name'|'id=>slug'} ? array : (\$args is array{fields: 'id=>parent'} ? array : (\$args is array{fields: 'ids'|'tt_ids'} ? list : array))))|\WP_Error"], 'wp_get_object_terms' => ["(\$args is array{fields: 'names'|'slugs'} ? list : (\$args is array{fields: 'id=>name'|'id=>slug'} ? array : (\$args is array{fields: 'id=>parent'} ? array : (\$args is array{fields: 'ids'|'tt_ids'} ? list : array))))|\WP_Error"], 'wp_parse_str' => [null, '@param-out' => 'array $result'], + 'wp_parse_str' => [null, '@phpstan-param-out' => 'array $result'], ]; diff --git a/phpcs.xml.dist b/phpcs.xml.dist index 749a233..6ebf26a 100644 --- a/phpcs.xml.dist +++ b/phpcs.xml.dist @@ -4,6 +4,7 @@ functionMap.php src/ visitor.php + tests/ @@ -11,4 +12,39 @@ + + + tests/ + + + tests/ + + + + + + + + + + tests/ + + + tests/ + + + tests/ + + + tests/ + + + tests/ + + + tests/ + + + tests/TypeInferenceTest.php + diff --git a/tests/bootstrap.php b/tests/bootstrap.php index bf826eb..634031f 100644 --- a/tests/bootstrap.php +++ b/tests/bootstrap.php @@ -4,6 +4,8 @@ namespace PhpStubs\WordPress\Core\Tests; +// phpcs:disable Squiz.PHP.DiscouragedFunctions define('OBJECT', 'OBJECT'); define('ARRAY_A', 'ARRAY_A'); define('ARRAY_N', 'ARRAY_N'); +// phpcs:enable diff --git a/tests/data/get_attachment_taxonomies.php b/tests/data/get_attachment_taxonomies.php index ff26ce6..453de9c 100644 --- a/tests/data/get_attachment_taxonomies.php +++ b/tests/data/get_attachment_taxonomies.php @@ -8,19 +8,19 @@ use function PHPStan\Testing\assertType; // Default -assertType('array', get_attachment_taxonomies((int)$id)); -assertType('array', get_attachment_taxonomies((int)$id, 'names')); +assertType('array', get_attachment_taxonomies((int)$_GET['id'])); +assertType('array', get_attachment_taxonomies((int)$_GET['id'], 'names')); // Objects -assertType('array', get_attachment_taxonomies((int)$id, 'objects')); +assertType('array', get_attachment_taxonomies((int)$_GET['id'], 'objects')); // Unexpected -assertType('array', get_attachment_taxonomies((int)$id, 'Hello')); +assertType('array', get_attachment_taxonomies((int)$_GET['id'], 'Hello')); // Unknown -assertType('array', get_attachment_taxonomies((int)$id, (string)$_GET['string'])); +assertType('array', get_attachment_taxonomies((int)$_GET['id'], (string)$_GET['string'])); // Unions -assertType('array', get_attachment_taxonomies((int)$id, $_GET['foo'] ? 'names' : 'objects')); -assertType('array', get_attachment_taxonomies((int)$id, $_GET['foo'] ? (string)$_GET['string'] : 'names')); -assertType('array', get_attachment_taxonomies((int)$id, $_GET['foo'] ? (string)$_GET['string'] : 'objects')); +assertType('array', get_attachment_taxonomies((int)$_GET['id'], $_GET['foo'] ? 'names' : 'objects')); +assertType('array', get_attachment_taxonomies((int)$_GET['id'], $_GET['foo'] ? (string)$_GET['string'] : 'names')); +assertType('array', get_attachment_taxonomies((int)$_GET['id'], $_GET['foo'] ? (string)$_GET['string'] : 'objects')); diff --git a/tests/data/get_bookmark.php b/tests/data/get_bookmark.php index 6f8e327..8f5ea80 100644 --- a/tests/data/get_bookmark.php +++ b/tests/data/get_bookmark.php @@ -8,7 +8,7 @@ use function PHPStan\Testing\assertType; /** @var \stdClass|int $bookmark */ -$bookmark; +$bookmark = $_GET['bookmark']; assertType('stdClass|null', get_bookmark($bookmark)); assertType('stdClass|null', get_bookmark($bookmark, 'OBJECT')); diff --git a/tests/data/get_categories.php b/tests/data/get_categories.php index 9db5941..e225ce0 100644 --- a/tests/data/get_categories.php +++ b/tests/data/get_categories.php @@ -13,7 +13,7 @@ // Requesting a count assertType('list', get_categories(['fields' => 'count'])); -assertType('list', get_categories(['foo' => 'bar','fields' => 'count'])); +assertType('list', get_categories(['fields' => 'count', 'foo' => 'bar'])); // Requesting names or slugs assertType('list', get_categories(['fields' => 'names'])); @@ -31,7 +31,7 @@ // Requesting objects assertType('array', get_categories(['fields' => 'all'])); assertType('array', get_categories(['fields' => 'all_with_object_id'])); -assertType('array', get_categories(['fields' => 'foo'])); // Unknown fields value +assertType('array', get_categories(['fields' => 'foo'])); assertType('array', get_categories(['fields' => (string)$_GET['fields']])); diff --git a/tests/data/get_category.php b/tests/data/get_category.php index 85862da..fe43d14 100644 --- a/tests/data/get_category.php +++ b/tests/data/get_category.php @@ -8,7 +8,7 @@ use function PHPStan\Testing\assertType; /** @var object $category */ -$category; +$category = $_GET['category']; assertType('WP_Term', get_category($category)); assertType('WP_Term', get_category($category, 'OBJECT')); @@ -16,7 +16,7 @@ assertType('array', get_category($category, 'ARRAY_N')); /** @var int|object $category */ -$category; +$category = $_GET['category']; assertType('WP_Error|WP_Term|null', get_category($category)); assertType('WP_Error|WP_Term|null', get_category($category, 'OBJECT')); diff --git a/tests/data/get_category_by_path.php b/tests/data/get_category_by_path.php index d131772..d109010 100644 --- a/tests/data/get_category_by_path.php +++ b/tests/data/get_category_by_path.php @@ -7,10 +7,7 @@ use function get_category_by_path; use function PHPStan\Testing\assertType; -/** @var bool $bool */ -$bool; - -assertType('WP_Error|WP_Term|null', get_category_by_path('', $bool)); -assertType('WP_Error|WP_Term|null', get_category_by_path('', $bool, 'OBJECT')); -assertType('array|WP_Error|null', get_category_by_path('', $bool, 'ARRAY_A')); -assertType('array|WP_Error|null', get_category_by_path('', $bool, 'ARRAY_N')); +assertType('WP_Error|WP_Term|null', get_category_by_path('', (bool)$_GET['full_match'])); +assertType('WP_Error|WP_Term|null', get_category_by_path('', (bool)$_GET['full_match'], 'OBJECT')); +assertType('array|WP_Error|null', get_category_by_path('', (bool)$_GET['full_match'], 'ARRAY_A')); +assertType('array|WP_Error|null', get_category_by_path('', (bool)$_GET['full_match'], 'ARRAY_N')); diff --git a/tests/data/get_comment.php b/tests/data/get_comment.php index f0bcc77..c986f11 100644 --- a/tests/data/get_comment.php +++ b/tests/data/get_comment.php @@ -8,7 +8,7 @@ use function PHPStan\Testing\assertType; /** @var \WP_Comment|int|string|null $comment */ -$comment; +$comment = $_GET['comment']; // Default output assertType('WP_Comment|null', get_comment()); @@ -22,7 +22,7 @@ assertType('array|null', get_comment($comment, 'ARRAY_N')); /** @var \WP_Comment $comment */ -$comment; +$comment = $_GET['comment']; assertType('WP_Comment', get_comment($comment)); assertType('WP_Comment', get_comment($comment, 'OBJECT')); diff --git a/tests/data/get_permalink.php b/tests/data/get_permalink.php index 07e5e05..42bb70e 100644 --- a/tests/data/get_permalink.php +++ b/tests/data/get_permalink.php @@ -10,7 +10,7 @@ use function PHPStan\Testing\assertType; /** @var \WP_Post $post */ -$post = $post; +$post = $_GET['post']; // get_permalink() assertType('string|false', get_permalink()); diff --git a/tests/data/get_post.php b/tests/data/get_post.php index 8061772..3bedfb0 100644 --- a/tests/data/get_post.php +++ b/tests/data/get_post.php @@ -8,7 +8,7 @@ use function PHPStan\Testing\assertType; /** @var \WP_Post|int|null $post */ -$post; +$post = $_GET['post']; // Default output assertType('WP_Post|null', get_post()); @@ -22,7 +22,7 @@ assertType('array|null', get_post($post, 'ARRAY_N')); /** @var \WP_Post $post */ -$post; +$post = $_GET['post']; assertType('WP_Post', get_post($post)); assertType('WP_Post', get_post($post, 'OBJECT')); diff --git a/tests/data/wp_die.php b/tests/data/wp_die.php index aba4a75..fa5a1f9 100644 --- a/tests/data/wp_die.php +++ b/tests/data/wp_die.php @@ -21,5 +21,4 @@ assertType('null', wp_die('', '', (array)$_GET['args'])); // non-array $args parameter ($args not string type per @phpstan-param) -/** @var int $args */ -assertType('never', wp_die('', '', $args)); +assertType('never', wp_die('', '', (int)$_GET['args'])); diff --git a/tests/data/wp_dropdown_languages.php b/tests/data/wp_dropdown_languages.php index 38d452b..98e4584 100644 --- a/tests/data/wp_dropdown_languages.php +++ b/tests/data/wp_dropdown_languages.php @@ -16,10 +16,10 @@ use function PHPStan\Testing\assertType; /** @var ''|null $emptyStringOrNull */ -$emptyStringOrNull = $_GET['nullOrEmptyString']; +$emptyStringOrNull = $_GET['emptyStringOrNull']; /** @var string|null $stringOrNull */ -$stringOrNull = $_GET['unknown']; +$stringOrNull = $_GET['stringOrNull']; // Default value assertType('string', wp_dropdown_languages()); diff --git a/tests/data/wp_get_archives.php b/tests/data/wp_get_archives.php index 544996d..6760ee7 100644 --- a/tests/data/wp_get_archives.php +++ b/tests/data/wp_get_archives.php @@ -27,5 +27,5 @@ assertType('string', wp_get_archives(['echo' => 0, 'key' => 'value'])); // Unknown value -assertType('string|null', wp_get_archives(['echo' => (bool)$GET['echo'], 'key' => 'value'])); -assertType('string|null', wp_get_archives(['echo' => (int)$GET['echo'], 'key' => 'value'])); +assertType('string|null', wp_get_archives(['echo' => (bool)$_GET['echo'], 'key' => 'value'])); +assertType('string|null', wp_get_archives(['echo' => (int)$_GET['echo'], 'key' => 'value'])); diff --git a/tests/data/wp_list_bookmarks.php b/tests/data/wp_list_bookmarks.php index ba51576..bd6db8b 100644 --- a/tests/data/wp_list_bookmarks.php +++ b/tests/data/wp_list_bookmarks.php @@ -27,5 +27,5 @@ assertType('string', wp_list_bookmarks(['echo' => 0, 'key' => 'value'])); // Unknown value -assertType('string|null', wp_list_bookmarks(['echo' => (bool)$GET['echo'], 'key' => 'value'])); -assertType('string|null', wp_list_bookmarks(['echo' => (int)$GET['echo'], 'key' => 'value'])); +assertType('string|null', wp_list_bookmarks(['echo' => (bool)$_GET['echo'], 'key' => 'value'])); +assertType('string|null', wp_list_bookmarks(['echo' => (int)$_GET['echo'], 'key' => 'value'])); diff --git a/tests/data/wp_list_categories.php b/tests/data/wp_list_categories.php index 1e88675..2fe86e0 100644 --- a/tests/data/wp_list_categories.php +++ b/tests/data/wp_list_categories.php @@ -27,5 +27,5 @@ assertType('string|false', wp_list_categories(['echo' => 0, 'key' => 'value'])); // Unknown value -assertType('string|false|null', wp_list_categories(['echo' => (bool)$GET['echo'], 'key' => 'value'])); -assertType('string|false|null', wp_list_categories(['echo' => (int)$GET['echo'], 'key' => 'value'])); +assertType('string|false|null', wp_list_categories(['echo' => (bool)$_GET['echo'], 'key' => 'value'])); +assertType('string|false|null', wp_list_categories(['echo' => (int)$_GET['echo'], 'key' => 'value'])); diff --git a/tests/data/wp_list_pages.php b/tests/data/wp_list_pages.php index bd5095b..7887889 100644 --- a/tests/data/wp_list_pages.php +++ b/tests/data/wp_list_pages.php @@ -25,4 +25,4 @@ assertType('string', wp_list_pages(['echo' => false, 'key' => 'value'])); // Unknown value -assertType('string|null', wp_list_pages(['echo' => (bool)$GET['echo'], 'key' => 'value'])); +assertType('string|null', wp_list_pages(['echo' => (bool)$_GET['echo'], 'key' => 'value'])); diff --git a/wordpress-stubs.php b/wordpress-stubs.php index 1edb024..fd7a5d9 100644 --- a/wordpress-stubs.php +++ b/wordpress-stubs.php @@ -112094,7 +112094,7 @@ function map_deep($value, $callback) * * @param string $input_string The string to be parsed. * @param array $result Variables will be stored in this array. - * @param-out array $result + * @phpstan-param-out array $result */ function wp_parse_str($input_string, &$result) {