From a0503e227816e3203d858ca80f659683b0d5b549 Mon Sep 17 00:00:00 2001
From: quietone <quietone@2572884.no-reply.drupal.org>
Date: Wed, 15 Jan 2025 14:12:10 +1300
Subject: [PATCH] Issue #3498059 by mstrelan, shalini_jha, hetal.solanki: Add
 array return to all hook_requirements implementations

---
 core/.phpstan-baseline.php                    | 114 ------------------
 core/lib/Drupal/Core/Extension/module.api.php |   2 +-
 core/modules/file/file.install                |   2 +-
 core/modules/image/image.install              |   2 +-
 core/modules/jsonapi/jsonapi.install          |   2 +-
 .../layout_discovery/layout_discovery.install |   2 +-
 core/modules/locale/locale.install            |   2 +-
 core/modules/media/media.install              |   2 +-
 core/modules/mysql/mysql.install              |   2 +-
 core/modules/navigation/navigation.install    |   2 +-
 core/modules/node/node.install                |   2 +-
 core/modules/pgsql/pgsql.install              |   2 +-
 core/modules/search/search.install            |   2 +-
 core/modules/system/system.install            |   2 +-
 ...erimental_module_requirements_test.install |   2 +-
 .../requirements1_test.install                |   2 +-
 .../update_script_test.install                |   2 +-
 core/modules/update/update.install            |   2 +-
 core/modules/workspaces/workspaces.install    |   2 +-
 core/profiles/demo_umami/demo_umami.install   |   2 +-
 .../testing_requirements.install              |   2 +-
 21 files changed, 20 insertions(+), 134 deletions(-)

diff --git a/core/.phpstan-baseline.php b/core/.phpstan-baseline.php
index 65d42970126e..97e91ff06578 100644
--- a/core/.phpstan-baseline.php
+++ b/core/.phpstan-baseline.php
@@ -19273,12 +19273,6 @@
 	'count' => 1,
 	'path' => __DIR__ . '/modules/field_ui/tests/src/Unit/FieldUiTableTest.php',
 ];
-$ignoreErrors[] = [
-	'message' => '#^Function file_requirements\\(\\) has no return type specified\\.$#',
-	'identifier' => 'missingType.return',
-	'count' => 1,
-	'path' => __DIR__ . '/modules/file/file.install',
-];
 $ignoreErrors[] = [
 	'message' => '#^Function file_managed_file_submit\\(\\) has no return type specified\\.$#',
 	'identifier' => 'missingType.return',
@@ -20881,12 +20875,6 @@
 	'count' => 1,
 	'path' => __DIR__ . '/modules/history/tests/src/Functional/HistoryTest.php',
 ];
-$ignoreErrors[] = [
-	'message' => '#^Function image_requirements\\(\\) has no return type specified\\.$#',
-	'identifier' => 'missingType.return',
-	'count' => 1,
-	'path' => __DIR__ . '/modules/image/image.install',
-];
 $ignoreErrors[] = [
 	'message' => '#^Function image_path_flush\\(\\) has no return type specified\\.$#',
 	'identifier' => 'missingType.return',
@@ -21571,12 +21559,6 @@
 	'count' => 1,
 	'path' => __DIR__ . '/modules/inline_form_errors/src/RenderElementHelper.php',
 ];
-$ignoreErrors[] = [
-	'message' => '#^Function jsonapi_requirements\\(\\) has no return type specified\\.$#',
-	'identifier' => 'missingType.return',
-	'count' => 1,
-	'path' => __DIR__ . '/modules/jsonapi/jsonapi.install',
-];
 $ignoreErrors[] = [
 	'message' => '#^Method Drupal\\\\jsonapi\\\\Access\\\\EntityAccessChecker\\:\\:setLatestRevisionCheck\\(\\) has no return type specified\\.$#',
 	'identifier' => 'missingType.return',
@@ -24679,12 +24661,6 @@
 	'count' => 1,
 	'path' => __DIR__ . '/modules/layout_builder/tests/src/Unit/SectionTest.php',
 ];
-$ignoreErrors[] = [
-	'message' => '#^Function layout_discovery_requirements\\(\\) has no return type specified\\.$#',
-	'identifier' => 'missingType.return',
-	'count' => 1,
-	'path' => __DIR__ . '/modules/layout_discovery/layout_discovery.install',
-];
 $ignoreErrors[] = [
 	'message' => '#^Method Drupal\\\\layout_discovery\\\\Hook\\\\LayoutDiscoveryHooks\\:\\:help\\(\\) has no return type specified\\.$#',
 	'identifier' => 'missingType.return',
@@ -24937,12 +24913,6 @@
 	'count' => 1,
 	'path' => __DIR__ . '/modules/locale/locale.compare.inc',
 ];
-$ignoreErrors[] = [
-	'message' => '#^Function locale_requirements\\(\\) has no return type specified\\.$#',
-	'identifier' => 'missingType.return',
-	'count' => 1,
-	'path' => __DIR__ . '/modules/locale/locale.install',
-];
 $ignoreErrors[] = [
 	'message' => '#^Function _locale_parse_js_file\\(\\) has no return type specified\\.$#',
 	'identifier' => 'missingType.return',
@@ -25753,12 +25723,6 @@
 	'count' => 1,
 	'path' => __DIR__ . '/modules/locale/tests/src/Unit/Menu/LocaleLocalTasksTest.php',
 ];
-$ignoreErrors[] = [
-	'message' => '#^Function media_requirements\\(\\) has no return type specified\\.$#',
-	'identifier' => 'missingType.return',
-	'count' => 1,
-	'path' => __DIR__ . '/modules/media/media.install',
-];
 $ignoreErrors[] = [
 	'message' => '#^Variable \\$error in empty\\(\\) always exists and is not falsy\\.$#',
 	'identifier' => 'empty.variable',
@@ -29473,12 +29437,6 @@
 	'count' => 1,
 	'path' => __DIR__ . '/modules/migrate_drupal_ui/tests/src/FunctionalJavascript/SettingsTest.php',
 ];
-$ignoreErrors[] = [
-	'message' => '#^Function mysql_requirements\\(\\) has no return type specified\\.$#',
-	'identifier' => 'missingType.return',
-	'count' => 1,
-	'path' => __DIR__ . '/modules/mysql/mysql.install',
-];
 $ignoreErrors[] = [
 	'message' => '#^Method Drupal\\\\mysql\\\\Driver\\\\Database\\\\mysql\\\\Connection\\:\\:createDatabase\\(\\) has no return type specified\\.$#',
 	'identifier' => 'missingType.return',
@@ -29605,12 +29563,6 @@
 	'count' => 1,
 	'path' => __DIR__ . '/modules/navigation/modules/navigation_top_bar/src/Hook/NavigationTopBarHooks.php',
 ];
-$ignoreErrors[] = [
-	'message' => '#^Function navigation_requirements\\(\\) has no return type specified\\.$#',
-	'identifier' => 'missingType.return',
-	'count' => 1,
-	'path' => __DIR__ . '/modules/navigation/navigation.install',
-];
 $ignoreErrors[] = [
 	'message' => '#^Function navigation_post_update_set_logo_dimensions_default\\(\\) has no return type specified\\.$#',
 	'identifier' => 'missingType.return',
@@ -29755,12 +29707,6 @@
 	'count' => 1,
 	'path' => __DIR__ . '/modules/node/node.admin.inc',
 ];
-$ignoreErrors[] = [
-	'message' => '#^Function node_requirements\\(\\) has no return type specified\\.$#',
-	'identifier' => 'missingType.return',
-	'count' => 1,
-	'path' => __DIR__ . '/modules/node/node.install',
-];
 $ignoreErrors[] = [
 	'message' => '#^Function _node_access_rebuild_batch_finished\\(\\) has no return type specified\\.$#',
 	'identifier' => 'missingType.return',
@@ -31699,12 +31645,6 @@
 	'count' => 1,
 	'path' => __DIR__ . '/modules/path_alias/tests/src/Unit/AliasManagerTest.php',
 ];
-$ignoreErrors[] = [
-	'message' => '#^Function pgsql_requirements\\(\\) has no return type specified\\.$#',
-	'identifier' => 'missingType.return',
-	'count' => 1,
-	'path' => __DIR__ . '/modules/pgsql/pgsql.install',
-];
 $ignoreErrors[] = [
 	'message' => '#^Method Drupal\\\\pgsql\\\\Driver\\\\Database\\\\pgsql\\\\Connection\\:\\:addSavepoint\\(\\) has no return type specified\\.$#',
 	'identifier' => 'missingType.return',
@@ -32695,12 +32635,6 @@
 	'count' => 1,
 	'path' => __DIR__ . '/modules/rest/tests/src/Unit/EventSubscriber/ResourceResponseSubscriberTest.php',
 ];
-$ignoreErrors[] = [
-	'message' => '#^Function search_requirements\\(\\) has no return type specified\\.$#',
-	'identifier' => 'missingType.return',
-	'count' => 1,
-	'path' => __DIR__ . '/modules/search/search.install',
-];
 $ignoreErrors[] = [
 	'message' => '#^Function search_theme_suggestions_search_result\\(\\) has no return type specified\\.$#',
 	'identifier' => 'missingType.return',
@@ -35017,12 +34951,6 @@
 	'count' => 1,
 	'path' => __DIR__ . '/modules/system/src/TimeZoneResolver.php',
 ];
-$ignoreErrors[] = [
-	'message' => '#^Function system_requirements\\(\\) has no return type specified\\.$#',
-	'identifier' => 'missingType.return',
-	'count' => 1,
-	'path' => __DIR__ . '/modules/system/system.install',
-];
 $ignoreErrors[] = [
 	'message' => '#^Variable \\$directories might not be defined\\.$#',
 	'identifier' => 'variable.undefined',
@@ -37461,12 +37389,6 @@
 	'count' => 1,
 	'path' => __DIR__ . '/modules/system/tests/modules/error_test/src/Controller/ErrorTestController.php',
 ];
-$ignoreErrors[] = [
-	'message' => '#^Function experimental_module_requirements_test_requirements\\(\\) has no return type specified\\.$#',
-	'identifier' => 'missingType.return',
-	'count' => 1,
-	'path' => __DIR__ . '/modules/system/tests/modules/experimental_module_requirements_test/experimental_module_requirements_test.install',
-];
 $ignoreErrors[] = [
 	'message' => '#^Method Drupal\\\\experimental_module_requirements_test\\\\Hook\\\\ExperimentalModuleRequirementsTestHooks\\:\\:help\\(\\) has no return type specified\\.$#',
 	'identifier' => 'missingType.return',
@@ -38547,12 +38469,6 @@
 	'count' => 1,
 	'path' => __DIR__ . '/modules/system/tests/modules/render_placeholder_message_test/src/RenderPlaceholderMessageTestController.php',
 ];
-$ignoreErrors[] = [
-	'message' => '#^Function requirements1_test_requirements\\(\\) has no return type specified\\.$#',
-	'identifier' => 'missingType.return',
-	'count' => 1,
-	'path' => __DIR__ . '/modules/system/tests/modules/requirements1_test/requirements1_test.install',
-];
 $ignoreErrors[] = [
 	'message' => '#^Method Drupal\\\\router_test\\\\RouteTestSubscriber\\:\\:alterRoutes\\(\\) has no return type specified\\.$#',
 	'identifier' => 'missingType.return',
@@ -39171,12 +39087,6 @@
 	'count' => 1,
 	'path' => __DIR__ . '/modules/system/tests/modules/update_script_test/src/Controller/UpdateScriptTestController.php',
 ];
-$ignoreErrors[] = [
-	'message' => '#^Function update_script_test_requirements\\(\\) has no return type specified\\.$#',
-	'identifier' => 'missingType.return',
-	'count' => 1,
-	'path' => __DIR__ . '/modules/system/tests/modules/update_script_test/update_script_test.install',
-];
 $ignoreErrors[] = [
 	'message' => '#^Method Drupal\\\\Tests\\\\system\\\\Functional\\\\Batch\\\\ProcessingTest\\:\\:_resultMessages\\(\\) has no return type specified\\.$#',
 	'identifier' => 'missingType.return',
@@ -42555,12 +42465,6 @@
 	'count' => 1,
 	'path' => __DIR__ . '/modules/update/update.fetch.inc',
 ];
-$ignoreErrors[] = [
-	'message' => '#^Function update_requirements\\(\\) has no return type specified\\.$#',
-	'identifier' => 'missingType.return',
-	'count' => 1,
-	'path' => __DIR__ . '/modules/update/update.install',
-];
 $ignoreErrors[] = [
 	'message' => '#^Function update_manager_batch_project_get\\(\\) has no return type specified\\.$#',
 	'identifier' => 'missingType.return',
@@ -54459,18 +54363,6 @@
 	'count' => 1,
 	'path' => __DIR__ . '/modules/workspaces/tests/src/Kernel/WorkspacesFileItemTest.php',
 ];
-$ignoreErrors[] = [
-	'message' => '#^Function workspaces_requirements\\(\\) has no return type specified\\.$#',
-	'identifier' => 'missingType.return',
-	'count' => 1,
-	'path' => __DIR__ . '/modules/workspaces/workspaces.install',
-];
-$ignoreErrors[] = [
-	'message' => '#^Function demo_umami_requirements\\(\\) has no return type specified\\.$#',
-	'identifier' => 'missingType.return',
-	'count' => 1,
-	'path' => __DIR__ . '/profiles/demo_umami/demo_umami.install',
-];
 $ignoreErrors[] = [
 	'message' => '#^Method Drupal\\\\demo_umami_content\\\\InstallHelper\\:\\:create\\(\\) has no return type specified\\.$#',
 	'identifier' => 'missingType.return',
@@ -54651,12 +54543,6 @@
 	'count' => 1,
 	'path' => __DIR__ . '/profiles/tests/testing/modules/drupal_system_listing_compatible_test/tests/src/Kernel/SystemListingCrossProfileCompatibleTest.php',
 ];
-$ignoreErrors[] = [
-	'message' => '#^Function testing_requirements_requirements\\(\\) has no return type specified\\.$#',
-	'identifier' => 'missingType.return',
-	'count' => 1,
-	'path' => __DIR__ . '/profiles/tests/testing_requirements/testing_requirements.install',
-];
 $ignoreErrors[] = [
 	'message' => '#^Function simpletest_script_execute_batch\\(\\) has no return type specified\\.$#',
 	'identifier' => 'missingType.return',
diff --git a/core/lib/Drupal/Core/Extension/module.api.php b/core/lib/Drupal/Core/Extension/module.api.php
index 3df937f4d19a..a30fc7a80d2c 100644
--- a/core/lib/Drupal/Core/Extension/module.api.php
+++ b/core/lib/Drupal/Core/Extension/module.api.php
@@ -1119,7 +1119,7 @@ function hook_updater_info_alter(&$updaters) {
  *     - REQUIREMENT_ERROR: The requirement failed with an error.
  *     Defaults to REQUIREMENT_OK when installing, REQUIREMENT_INFO otherwise.
  */
-function hook_requirements($phase) {
+function hook_requirements($phase): array {
   $requirements = [];
 
   // Report Drupal version
diff --git a/core/modules/file/file.install b/core/modules/file/file.install
index 698cd5c404a4..bce27470f19d 100644
--- a/core/modules/file/file.install
+++ b/core/modules/file/file.install
@@ -62,7 +62,7 @@ function file_schema(): array {
  *
  * Display information about getting upload progress bars working.
  */
-function file_requirements($phase) {
+function file_requirements($phase): array {
   $requirements = [];
 
   if ($phase != 'runtime') {
diff --git a/core/modules/image/image.install b/core/modules/image/image.install
index e23421795441..b99e17924ef6 100644
--- a/core/modules/image/image.install
+++ b/core/modules/image/image.install
@@ -35,7 +35,7 @@ function image_uninstall(): void {
 /**
  * Implements hook_requirements().
  */
-function image_requirements($phase) {
+function image_requirements($phase): array {
   if ($phase != 'runtime') {
     return [];
   }
diff --git a/core/modules/jsonapi/jsonapi.install b/core/modules/jsonapi/jsonapi.install
index 8db31414e1e4..c5a60c424fbe 100644
--- a/core/modules/jsonapi/jsonapi.install
+++ b/core/modules/jsonapi/jsonapi.install
@@ -30,7 +30,7 @@ function jsonapi_install(): void {
 /**
  * Implements hook_requirements().
  */
-function jsonapi_requirements($phase) {
+function jsonapi_requirements($phase): array {
   $requirements = [];
   if ($phase === 'runtime') {
     $module_handler = \Drupal::moduleHandler();
diff --git a/core/modules/layout_discovery/layout_discovery.install b/core/modules/layout_discovery/layout_discovery.install
index e6c99e089bcf..28222bc093ba 100644
--- a/core/modules/layout_discovery/layout_discovery.install
+++ b/core/modules/layout_discovery/layout_discovery.install
@@ -8,7 +8,7 @@
 /**
  * Implements hook_requirements().
  */
-function layout_discovery_requirements($phase) {
+function layout_discovery_requirements($phase): array {
   $requirements = [];
   if ($phase === 'install') {
     if (\Drupal::moduleHandler()->moduleExists('layout_plugin')) {
diff --git a/core/modules/locale/locale.install b/core/modules/locale/locale.install
index 774465e195b8..30aa89000b8a 100644
--- a/core/modules/locale/locale.install
+++ b/core/modules/locale/locale.install
@@ -14,7 +14,7 @@
 /**
  * Implements hook_requirements().
  */
-function locale_requirements($phase) {
+function locale_requirements($phase): array {
   $requirements = [];
   if ($phase == 'runtime') {
     $available_updates = [];
diff --git a/core/modules/media/media.install b/core/modules/media/media.install
index db6e3563ad11..f0acbf482da4 100644
--- a/core/modules/media/media.install
+++ b/core/modules/media/media.install
@@ -18,7 +18,7 @@
 /**
  * Implements hook_requirements().
  */
-function media_requirements($phase) {
+function media_requirements($phase): array {
   $requirements = [];
   if ($phase == 'install') {
     $destination = 'public://media-icons/generic';
diff --git a/core/modules/mysql/mysql.install b/core/modules/mysql/mysql.install
index 6523af0e9dff..547f9cab1cd0 100644
--- a/core/modules/mysql/mysql.install
+++ b/core/modules/mysql/mysql.install
@@ -11,7 +11,7 @@
 /**
  * Implements hook_requirements().
  */
-function mysql_requirements($phase) {
+function mysql_requirements($phase): array {
   $requirements = [];
 
   if ($phase === 'runtime') {
diff --git a/core/modules/navigation/navigation.install b/core/modules/navigation/navigation.install
index 72b843b23a28..f056735888c6 100644
--- a/core/modules/navigation/navigation.install
+++ b/core/modules/navigation/navigation.install
@@ -8,7 +8,7 @@
 /**
  * Implements hook_requirements().
  */
-function navigation_requirements($phase) {
+function navigation_requirements($phase): array {
   $requirements = [];
 
   if ($phase === 'runtime') {
diff --git a/core/modules/node/node.install b/core/modules/node/node.install
index ddde78929ad5..d959f80dfcdf 100644
--- a/core/modules/node/node.install
+++ b/core/modules/node/node.install
@@ -12,7 +12,7 @@
 /**
  * Implements hook_requirements().
  */
-function node_requirements($phase) {
+function node_requirements($phase): array {
   $requirements = [];
   if ($phase === 'runtime') {
     // Only show rebuild button if there are either 0, or 2 or more, rows
diff --git a/core/modules/pgsql/pgsql.install b/core/modules/pgsql/pgsql.install
index 881e871bff73..3adeb4f5dff3 100644
--- a/core/modules/pgsql/pgsql.install
+++ b/core/modules/pgsql/pgsql.install
@@ -10,7 +10,7 @@
 /**
  * Implements hook_requirements().
  */
-function pgsql_requirements() {
+function pgsql_requirements(): array {
   $requirements = [];
   // Test with PostgreSQL databases for the status of the pg_trgm extension.
   if (Database::isActiveConnection()) {
diff --git a/core/modules/search/search.install b/core/modules/search/search.install
index 2ca98bc1cfe0..8873e1fbbf99 100644
--- a/core/modules/search/search.install
+++ b/core/modules/search/search.install
@@ -128,7 +128,7 @@ function search_schema(): array {
  *
  * For the Status Report, return information about search index status.
  */
-function search_requirements($phase) {
+function search_requirements($phase): array {
   $requirements = [];
 
   if ($phase == 'runtime') {
diff --git a/core/modules/system/system.install b/core/modules/system/system.install
index 54ff584efa54..28eeff954bcb 100644
--- a/core/modules/system/system.install
+++ b/core/modules/system/system.install
@@ -63,7 +63,7 @@
 /**
  * Implements hook_requirements().
  */
-function system_requirements($phase) {
+function system_requirements($phase): array {
   global $install_state;
 
   // Get the current default PHP requirements for this version of Drupal.
diff --git a/core/modules/system/tests/modules/experimental_module_requirements_test/experimental_module_requirements_test.install b/core/modules/system/tests/modules/experimental_module_requirements_test/experimental_module_requirements_test.install
index 977ccac9f6c9..beaa3cd15b70 100644
--- a/core/modules/system/tests/modules/experimental_module_requirements_test/experimental_module_requirements_test.install
+++ b/core/modules/system/tests/modules/experimental_module_requirements_test/experimental_module_requirements_test.install
@@ -10,7 +10,7 @@
 /**
  * Implements hook_requirements().
  */
-function experimental_module_requirements_test_requirements() {
+function experimental_module_requirements_test_requirements(): array {
   $requirements = [];
   if (\Drupal::state()->get('experimental_module_requirements_test_requirements', FALSE)) {
     $requirements['experimental_module_requirements_test_requirements'] = [
diff --git a/core/modules/system/tests/modules/requirements1_test/requirements1_test.install b/core/modules/system/tests/modules/requirements1_test/requirements1_test.install
index a578af75b42d..70767c16544d 100644
--- a/core/modules/system/tests/modules/requirements1_test/requirements1_test.install
+++ b/core/modules/system/tests/modules/requirements1_test/requirements1_test.install
@@ -10,7 +10,7 @@
 /**
  * Implements hook_requirements().
  */
-function requirements1_test_requirements($phase) {
+function requirements1_test_requirements($phase): array {
   $requirements = [];
 
   // Always fails requirements.
diff --git a/core/modules/system/tests/modules/update_script_test/update_script_test.install b/core/modules/system/tests/modules/update_script_test/update_script_test.install
index 7b03c2021cc8..5a641fd95644 100644
--- a/core/modules/system/tests/modules/update_script_test/update_script_test.install
+++ b/core/modules/system/tests/modules/update_script_test/update_script_test.install
@@ -10,7 +10,7 @@
 /**
  * Implements hook_requirements().
  */
-function update_script_test_requirements($phase) {
+function update_script_test_requirements($phase): array {
   $requirements = [];
 
   if ($phase == 'update') {
diff --git a/core/modules/update/update.install b/core/modules/update/update.install
index b9fb4d70e4e6..454a198c909e 100644
--- a/core/modules/update/update.install
+++ b/core/modules/update/update.install
@@ -33,7 +33,7 @@
  * @see _update_cron_notify()
  * @see \Drupal\update\UpdateManagerInterface
  */
-function update_requirements($phase) {
+function update_requirements($phase): array {
   $requirements = [];
   if ($phase == 'runtime') {
     if ($available = update_get_available(FALSE)) {
diff --git a/core/modules/workspaces/workspaces.install b/core/modules/workspaces/workspaces.install
index 6dfb3312fb89..a798b4a2c22b 100644
--- a/core/modules/workspaces/workspaces.install
+++ b/core/modules/workspaces/workspaces.install
@@ -11,7 +11,7 @@
 /**
  * Implements hook_requirements().
  */
-function workspaces_requirements($phase) {
+function workspaces_requirements($phase): array {
   $requirements = [];
   if ($phase === 'install') {
     if (\Drupal::moduleHandler()->moduleExists('workspace')) {
diff --git a/core/profiles/demo_umami/demo_umami.install b/core/profiles/demo_umami/demo_umami.install
index 1e305aec7239..a9f04bf0c1bb 100644
--- a/core/profiles/demo_umami/demo_umami.install
+++ b/core/profiles/demo_umami/demo_umami.install
@@ -10,7 +10,7 @@
 /**
  * Implements hook_requirements().
  */
-function demo_umami_requirements($phase) {
+function demo_umami_requirements($phase): array {
   $requirements = [];
   if ($phase == 'runtime') {
     $profile = \Drupal::installProfile();
diff --git a/core/profiles/tests/testing_requirements/testing_requirements.install b/core/profiles/tests/testing_requirements/testing_requirements.install
index 02ee31d47216..7cdb44d9d299 100644
--- a/core/profiles/tests/testing_requirements/testing_requirements.install
+++ b/core/profiles/tests/testing_requirements/testing_requirements.install
@@ -10,7 +10,7 @@
 /**
  * Implements hook_requirements().
  */
-function testing_requirements_requirements($phase) {
+function testing_requirements_requirements($phase): array {
   $requirements = [];
 
   if ($phase === 'install') {
-- 
GitLab