From 2cd039c5b5873718c77d00335c4f36d77aa502e5 Mon Sep 17 00:00:00 2001 From: Anton Vlasenko Date: Fri, 28 Apr 2023 13:48:06 +0200 Subject: [PATCH] Add Gutenberg.CodeAnalysis.GuardedFunctionAndClassNames sniff. Guard WP_Html_Span. Guard classes against redeclaration. Master is the main branch now. Fix CS errors. --- composer.json | 9 +- .../class-wp-html-attribute-token.php | 4 + .../html-api/class-wp-html-span.php | 4 + .../html-api/class-wp-html-tag-processor.php | 4 + .../class-wp-html-text-replacement.php | 4 + lib/compat/wordpress-6.2/rest-api.php | 70 +++++------ lib/compat/wordpress-6.3/theme-previews.php | 110 +++++++++--------- ...ass-wp-classic-to-block-menu-converter.php | 4 + ...-rest-block-editor-settings-controller.php | 4 + .../class-wp-rest-customizer-nonces.php | 4 + ...wp-rest-navigation-fallback-controller.php | 4 + lib/experimental/kses.php | 70 ++++++----- lib/experiments-page.php | 42 +++---- phpcs.xml.dist | 16 +++ 14 files changed, 210 insertions(+), 139 deletions(-) diff --git a/composer.json b/composer.json index 3f16ba495a94ca..a3db79caa99ec9 100644 --- a/composer.json +++ b/composer.json @@ -32,8 +32,15 @@ "wp-coding-standards/wpcs": "^2.2", "sirbrillig/phpcs-variable-analysis": "^2.8", "spatie/phpunit-watcher": "^1.23", - "yoast/phpunit-polyfills": "^1.0" + "yoast/phpunit-polyfills": "^1.0", + "gutenberg-coding-standards/gbcs": "dev-master" }, + "repositories": [ + { + "type": "vcs", + "url": "https://github.com/anton-vlasenko/Gutenberg-Coding-Standards.git" + } + ], "require": { "composer/installers": "~1.0" }, diff --git a/lib/compat/wordpress-6.2/html-api/class-wp-html-attribute-token.php b/lib/compat/wordpress-6.2/html-api/class-wp-html-attribute-token.php index 2c52164a979f02..cc03c1441ee042 100644 --- a/lib/compat/wordpress-6.2/html-api/class-wp-html-attribute-token.php +++ b/lib/compat/wordpress-6.2/html-api/class-wp-html-attribute-token.php @@ -7,6 +7,10 @@ * @since 6.2.0 */ +if ( class_exists( 'WP_HTML_Attribute_Token' ) ) { + return; +} + /** * Data structure for the attribute token that allows to drastically improve performance. * diff --git a/lib/compat/wordpress-6.2/html-api/class-wp-html-span.php b/lib/compat/wordpress-6.2/html-api/class-wp-html-span.php index d92778cd3a2223..e38bc551923170 100644 --- a/lib/compat/wordpress-6.2/html-api/class-wp-html-span.php +++ b/lib/compat/wordpress-6.2/html-api/class-wp-html-span.php @@ -7,6 +7,10 @@ * @since 6.2.0 */ +if ( class_exists( 'WP_HTML_Span' ) ) { + return; +} + /** * Represents a textual span inside an HTML document. * diff --git a/lib/compat/wordpress-6.2/html-api/class-wp-html-tag-processor.php b/lib/compat/wordpress-6.2/html-api/class-wp-html-tag-processor.php index 8c41e732154b49..b6366d8e8136a5 100644 --- a/lib/compat/wordpress-6.2/html-api/class-wp-html-tag-processor.php +++ b/lib/compat/wordpress-6.2/html-api/class-wp-html-tag-processor.php @@ -26,6 +26,10 @@ * @since 6.2.0 */ +if ( class_exists( 'WP_HTML_Tag_Processor' ) ) { + return; +} + /** * Modifies attributes in an HTML document for tags matching a query. * diff --git a/lib/compat/wordpress-6.2/html-api/class-wp-html-text-replacement.php b/lib/compat/wordpress-6.2/html-api/class-wp-html-text-replacement.php index 912b4a56a5eb42..b3f70c8e7c57f4 100644 --- a/lib/compat/wordpress-6.2/html-api/class-wp-html-text-replacement.php +++ b/lib/compat/wordpress-6.2/html-api/class-wp-html-text-replacement.php @@ -7,6 +7,10 @@ * @since 6.2.0 */ +if ( class_exists( 'WP_HTML_Text_Replacement' ) ) { + return; +} + /** * Data structure used to replace existing content from start to end that allows to drastically improve performance. * diff --git a/lib/compat/wordpress-6.2/rest-api.php b/lib/compat/wordpress-6.2/rest-api.php index 58597e16d99282..d4630b1d904711 100644 --- a/lib/compat/wordpress-6.2/rest-api.php +++ b/lib/compat/wordpress-6.2/rest-api.php @@ -100,42 +100,46 @@ function gutenberg_modify_rest_sidebars_response( $response ) { } add_filter( 'rest_prepare_sidebar', 'gutenberg_modify_rest_sidebars_response' ); - -/** - * Add the `block_types` value to the `pattern-directory-item` schema. - * - * @since 6.2.0 Added 'block_types' property. - */ -function add_block_pattern_block_types_schema() { - register_rest_field( - 'pattern-directory-item', - 'block_types', - array( - 'schema' => array( - 'description' => __( 'The block types which can use this pattern.', 'gutenberg' ), - 'type' => 'array', - 'uniqueItems' => true, - 'items' => array( 'type' => 'string' ), - 'context' => array( 'view', 'embed' ), - ), - ) - ); +if ( ! function_exists( 'add_block_pattern_block_types_schema' ) ) { + /** + * Add the `block_types` value to the `pattern-directory-item` schema. + * + * @since 6.2.0 Added 'block_types' property. + */ + function add_block_pattern_block_types_schema() { + register_rest_field( + 'pattern-directory-item', + 'block_types', + array( + 'schema' => array( + 'description' => __( 'The block types which can use this pattern.', 'gutenberg' ), + 'type' => 'array', + 'uniqueItems' => true, + 'items' => array( 'type' => 'string' ), + 'context' => array( 'view', 'embed' ), + ), + ) + ); + } } add_filter( 'rest_api_init', 'add_block_pattern_block_types_schema' ); -/** - * Add the `block_types` value into the API response. - * - * @since 6.2.0 Added 'block_types' property. - * - * @param WP_REST_Response $response The response object. - * @param object $raw_pattern The unprepared pattern. - */ -function filter_block_pattern_response( $response, $raw_pattern ) { - $data = $response->get_data(); - $data['block_types'] = array_map( 'sanitize_text_field', $raw_pattern->meta->wpop_block_types ); - $response->set_data( $data ); - return $response; +if ( ! function_exists( 'filter_block_pattern_response' ) ) { + /** + * Add the `block_types` value into the API response. + * + * @param WP_REST_Response $response The response object. + * @param object $raw_pattern The unprepared pattern. + * + * @since 6.2.0 Added 'block_types' property. + */ + function filter_block_pattern_response( $response, $raw_pattern ) { + $data = $response->get_data(); + $data['block_types'] = array_map( 'sanitize_text_field', $raw_pattern->meta->wpop_block_types ); + $response->set_data( $data ); + + return $response; + } } add_filter( 'rest_prepare_block_pattern', 'filter_block_pattern_response', 10, 2 ); diff --git a/lib/compat/wordpress-6.3/theme-previews.php b/lib/compat/wordpress-6.3/theme-previews.php index 5671274925765f..9bf985939e771d 100644 --- a/lib/compat/wordpress-6.3/theme-previews.php +++ b/lib/compat/wordpress-6.3/theme-previews.php @@ -51,65 +51,69 @@ function gutenberg_attach_theme_preview_middleware() { ); } -/** - * Temporary function to add a live preview button to block themes. - * Remove when https://core.trac.wordpress.org/ticket/58190 lands. - */ -function add_live_preview_button() { - global $pagenow; - if ( 'themes.php' === $pagenow ) { - ?> - - livePreviewButton.setAttribute('aria-label', ''.replace('%s', themeName)); - livePreviewButton.setAttribute('class', 'button button-primary'); - livePreviewButton.setAttribute( - 'href', - `/wp-admin/site-editor.php?theme_preview=${themePath}&return=themes.php` - ); - livePreviewButton.innerHTML = ''; - themeInfo.querySelector('.theme-actions').appendChild(livePreviewButton); - }); - } - - - - + + -
-

- -
- - - -
-
- +
+

+ +
+ + + +
+
+ + @@ -103,4 +104,19 @@ /phpunit/* + + + ./phpunit/* + ./packages/* + ./bin/generate-gutenberg-php + + + + + + + + + +