From e2a70be465781e71f1a47623c70413dae9f15047 Mon Sep 17 00:00:00 2001 From: Nilambar Sharma Date: Mon, 5 Feb 2024 11:41:00 +0545 Subject: [PATCH 1/5] Detect missing readme headers --- .../Checker/Checks/Plugin_Readme_Check.php | 81 ++++++++++++++++--- 1 file changed, 68 insertions(+), 13 deletions(-) diff --git a/includes/Checker/Checks/Plugin_Readme_Check.php b/includes/Checker/Checks/Plugin_Readme_Check.php index 581d2abe2..9f00ddec7 100644 --- a/includes/Checker/Checks/Plugin_Readme_Check.php +++ b/includes/Checker/Checks/Plugin_Readme_Check.php @@ -77,6 +77,9 @@ protected function check_files( Check_Result $result, array $files ) { // Check the readme file for plugin name. $this->check_name( $result, $readme_file, $parser ); + // Check the readme file for missing headers. + $this->check_headers( $result, $readme_file, $parser ); + // Check the readme file for default text. $this->check_default_text( $result, $readme_file, $parser ); @@ -119,6 +122,45 @@ private function check_name( Check_Result $result, string $readme_file, Parser $ } } + /** + * Checks the readme file for missing headers. + * + * @since n.e.x.t + * + * @param Check_Result $result The Check Result to amend. + * @param string $readme_file Readme file. + * @param Parser $parser The Parser object. + */ + private function check_headers( Check_Result $result, string $readme_file, Parser $parser ) { + $ignored_warnings = $this->get_ignored_warnings( $parser ); + + $fields = array( + 'tested' => array( + 'label' => __( 'Tested up to', 'plugin-check' ), + 'ignore_key' => 'tested_header_ignored', + ), + 'contributors' => array( + 'label' => __( 'Contributors', 'plugin-check' ), + 'ignore_key' => 'contributor_ignored', + ), + ); + + foreach ( $fields as $field_key => $field ) { + if ( empty( $parser->{$field_key} ) && ! in_array( $field['ignore_key'], $ignored_warnings, true ) ) { + $this->add_result_warning_for_file( + $result, + sprintf( + /* translators: %s: plugin header tag */ + __( 'The "%s" field is missing.', 'plugin-check' ), + $field['label'] + ), + 'missing_readme_header', + $readme_file + ); + } + } + } + /** * Checks the readme file for default text. * @@ -252,10 +294,6 @@ private function check_for_warnings( Check_Result $result, string $readme_file, $latest_wordpress_version = (float) $this->get_wordpress_stable_version(); - $ignored_warnings = array( - 'contributor_ignored', - ); - $messages = array( 'contributor_ignored' => sprintf( /* translators: %s: plugin header tag */ @@ -306,15 +344,7 @@ private function check_for_warnings( Check_Result $result, string $readme_file, ), ); - /** - * Filter the list of ignored readme parser warnings. - * - * @since n.e.x.t - * - * @param array $ignored_warnings Array of ignored warning keys. - * @param Parser $parser The Parser object. - */ - $ignored_warnings = (array) apply_filters( 'wp_plugin_check_ignored_readme_warnings', $ignored_warnings, $parser ); + $ignored_warnings = $this->get_ignored_warnings( $parser ); $warning_keys = array_diff( $warning_keys, $ignored_warnings ); @@ -365,4 +395,29 @@ private function get_wordpress_stable_version() { return $version; } + /** + * Returns ignored warnings. + * + * @since n.e.x.t + * + * @param Parser $parser The Parser object. + * @return array Ignore warnings. + */ + private function get_ignored_warnings( Parser $parser ) { + $ignored_warnings = array( + 'contributor_ignored', + ); + + /** + * Filter the list of ignored readme parser warnings. + * + * @since n.e.x.t + * + * @param array $ignored_warnings Array of ignored warning keys. + * @param Parser $parser The Parser object. + */ + $ignored_warnings = (array) apply_filters( 'wp_plugin_check_ignored_readme_warnings', $ignored_warnings, $parser ); + + return $ignored_warnings; + } } From ecc4a54a2da1e44f6a7f2b1ab7d962cb376caf3f Mon Sep 17 00:00:00 2001 From: Nilambar Sharma Date: Wed, 7 Feb 2024 12:12:33 +0545 Subject: [PATCH 2/5] Update condition for detecting missing headers --- includes/Checker/Checks/Plugin_Readme_Check.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/includes/Checker/Checks/Plugin_Readme_Check.php b/includes/Checker/Checks/Plugin_Readme_Check.php index 9f00ddec7..1bd540618 100644 --- a/includes/Checker/Checks/Plugin_Readme_Check.php +++ b/includes/Checker/Checks/Plugin_Readme_Check.php @@ -145,8 +145,10 @@ private function check_headers( Check_Result $result, string $readme_file, Parse ), ); + $parser_warnings = $parser->warnings ?? array(); + foreach ( $fields as $field_key => $field ) { - if ( empty( $parser->{$field_key} ) && ! in_array( $field['ignore_key'], $ignored_warnings, true ) ) { + if ( empty( $parser->{$field_key} ) && ! in_array( $field['ignore_key'], $ignored_warnings, true ) && ! isset( $parser_warnings[ $field['ignore_key'] ] ) ) { $this->add_result_warning_for_file( $result, sprintf( From 9a125df343462b41c267ff55013e95726fbf3211 Mon Sep 17 00:00:00 2001 From: Nilambar Sharma Date: Mon, 18 Mar 2024 12:36:32 +0545 Subject: [PATCH 3/5] Update version in new methods --- composer.lock | 8 ++++---- includes/Checker/Checks/Plugin_Readme_Check.php | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/composer.lock b/composer.lock index ca96af356..2c075ea77 100644 --- a/composer.lock +++ b/composer.lock @@ -12,12 +12,12 @@ "source": { "type": "git", "url": "https://github.com/afragen/wordpress-plugin-readme-parser.git", - "reference": "0dc64ee6d4cb6d32e3855d016763d9bd08652e0f" + "reference": "67fba498d0b112acf84386b95e4905c539a33f0b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/afragen/wordpress-plugin-readme-parser/zipball/0dc64ee6d4cb6d32e3855d016763d9bd08652e0f", - "reference": "0dc64ee6d4cb6d32e3855d016763d9bd08652e0f", + "url": "https://api.github.com/repos/afragen/wordpress-plugin-readme-parser/zipball/67fba498d0b112acf84386b95e4905c539a33f0b", + "reference": "67fba498d0b112acf84386b95e4905c539a33f0b", "shasum": "" }, "require": { @@ -51,7 +51,7 @@ "issues": "https://github.com/afragen/wordpress-plugin-readme-parser/issues", "source": "https://github.com/afragen/wordpress-plugin-readme-parser/tree/master" }, - "time": "2024-02-02T17:46:48+00:00" + "time": "2024-03-07T14:38:36+00:00" }, { "name": "automattic/vipwpcs", diff --git a/includes/Checker/Checks/Plugin_Readme_Check.php b/includes/Checker/Checks/Plugin_Readme_Check.php index fcaa3f04a..d32c6950c 100644 --- a/includes/Checker/Checks/Plugin_Readme_Check.php +++ b/includes/Checker/Checks/Plugin_Readme_Check.php @@ -125,7 +125,7 @@ private function check_name( Check_Result $result, string $readme_file, Parser $ /** * Checks the readme file for missing headers. * - * @since n.e.x.t + * @since 1.0.2 * * @param Check_Result $result The Check Result to amend. * @param string $readme_file Readme file. @@ -145,7 +145,7 @@ private function check_headers( Check_Result $result, string $readme_file, Parse ), ); - $parser_warnings = $parser->warnings ?? array(); + $parser_warnings = is_array( $parser->warnings ) ? $parser->warnings : array(); foreach ( $fields as $field_key => $field ) { if ( empty( $parser->{$field_key} ) && ! in_array( $field['ignore_key'], $ignored_warnings, true ) && ! isset( $parser_warnings[ $field['ignore_key'] ] ) ) { @@ -400,7 +400,7 @@ private function get_wordpress_stable_version() { /** * Returns ignored warnings. * - * @since n.e.x.t + * @since 1.0.2 * * @param Parser $parser The Parser object. * @return array Ignore warnings. @@ -413,7 +413,7 @@ private function get_ignored_warnings( Parser $parser ) { /** * Filter the list of ignored readme parser warnings. * - * @since n.e.x.t + * @since 1.0.2 * * @param array $ignored_warnings Array of ignored warning keys. * @param Parser $parser The Parser object. From 9db310a20c1c3631dad39b4386784c1ed74a4415 Mon Sep 17 00:00:00 2001 From: Nilambar Sharma Date: Mon, 18 Mar 2024 13:04:31 +0545 Subject: [PATCH 4/5] Update test to reflect missing readme header warning --- .../Checker/Checks/Plugin_Readme_Check_Tests.php | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/tests/phpunit/tests/Checker/Checks/Plugin_Readme_Check_Tests.php b/tests/phpunit/tests/Checker/Checks/Plugin_Readme_Check_Tests.php index 82d88cff9..beefe3469 100644 --- a/tests/phpunit/tests/Checker/Checks/Plugin_Readme_Check_Tests.php +++ b/tests/phpunit/tests/Checker/Checks/Plugin_Readme_Check_Tests.php @@ -67,14 +67,21 @@ public function test_run_with_errors_empty_name() { $this->assertNotEmpty( $errors ); $this->assertArrayHasKey( 'readme.txt', $errors ); - $this->assertEmpty( $warnings ); - $this->assertEquals( 0, $check_result->get_warning_count() ); + // After https://github.com/WordPress/plugin-check/issues/402 there will be warning of missing "Tested up to" field. + $this->assertNotEmpty( $warnings ); + $this->assertEquals( 1, $check_result->get_warning_count() ); // Check for empty name error. $this->assertArrayHasKey( 0, $errors['readme.txt'] ); $this->assertArrayHasKey( 0, $errors['readme.txt'][0] ); $this->assertArrayHasKey( 'code', $errors['readme.txt'][0][0][0] ); $this->assertEquals( 'empty_plugin_name', $errors['readme.txt'][0][0][0]['code'] ); + + // Tested up to warning. + $this->assertArrayHasKey( 0, $warnings['readme.txt'] ); + $this->assertArrayHasKey( 0, $warnings['readme.txt'][0] ); + $this->assertArrayHasKey( 'code', $warnings['readme.txt'][0][0][0] ); + $this->assertEquals( 'missing_readme_header', $warnings['readme.txt'][0][0][0]['code'] ); } public function test_run_with_errors_default_text() { From 58d94d6ff1499e841ec683755580d9acbd9a2c36 Mon Sep 17 00:00:00 2001 From: Nilambar Sharma Date: Tue, 25 Jun 2024 10:50:49 +0545 Subject: [PATCH 5/5] Fix typos --- includes/Checker/Checks/Plugin_Readme_Check.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/includes/Checker/Checks/Plugin_Readme_Check.php b/includes/Checker/Checks/Plugin_Readme_Check.php index d32c6950c..9a1fcf051 100644 --- a/includes/Checker/Checks/Plugin_Readme_Check.php +++ b/includes/Checker/Checks/Plugin_Readme_Check.php @@ -397,13 +397,14 @@ private function get_wordpress_stable_version() { return $version; } + /** * Returns ignored warnings. * * @since 1.0.2 * * @param Parser $parser The Parser object. - * @return array Ignore warnings. + * @return array Ignored warnings. */ private function get_ignored_warnings( Parser $parser ) { $ignored_warnings = array(