「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > WordPress コーディング標準における PHP_CodeSniffer Null Trim() エラーの修正

WordPress コーディング標準における PHP_CodeSniffer Null Trim() エラーの修正

2024 年 11 月 1 日に公開
ブラウズ:916

PHP 8.x を使用して WordPress プロジェクトで作業しているときに、次のエラーが発生する場合があります:

致命的なエラー: PHP_CodeSniffer\Exceptions\RuntimeException がキャッチされません: トリム(): string 型のパラメーター #1 ($string) に null を渡すことは /path/...

では非推奨です

このエラーは、PHP 8.x の非推奨の警告により発生します。PHP 8.x では、trim() 関数に null を渡すことが許可されなくなりました。具体的には、この問題は、PHP_CodeSniffer セットアップの一部である WordPress コーディング標準 (WPCS) スニフ内で発生します。この記事の執筆時点では、PHP_CodeSniffer と WordPress コーディング標準の最新バージョンでも、この問題は解決しません。

PHP_CodeSniffer と WPCS について

PHP_CodeSniffer は、指定されたルールに対する違反が PHP コードにないかチェックすることで、開発者がコーディング標準を維持するのに役立つツールです。 WordPress コーディング標準 (WPCS) は、WordPress プロジェクトで一貫性のあるクリーンなコードを記述するための一連のガイドラインを提供します。上記のエラーは通常、PHP の動作の変更により、コード スニペットがこれらの標準に準拠していないことを示します。

固定する

これを修正するには、問題の原因となっているファイルを手動で変更し、trim() が呼び出される行を見つけてコードを更新して、trim() の呼び出し時に null 値が適切に処理されるようにします。

たとえば、ファイル vendor/wp-coding-standards/wpcs/WordPress/Sniffs/NamingConventions/PrefixAllGlobalsSniff.php で、280 行目を見つけて次の行を置き換えます。

// this 
$cl_prefixes = trim( PHPCSHelper::get_config_data( 'prefixes' );

// to this 

$cl_prefixes = is_null( PHPCSHelper::get_config_data( 'prefixes' ) ) ? '' : trim( PHPCSHelper::get_config_data( 'prefixes' ) );

ただし、ソフトウェア開発における多くの意思決定と同様、これができるからといって、そうすべきであるというわけではありません

Fixing PHP_CodeSniffer Null Trim() Errors in WordPress Coding Standards

前のアプローチでエラーは解決する可能性がありますが、

ベンダー ファイルの変更は持続可能な解決策ではないことを覚えておくことが重要です。 Composer 経由で依存関係を更新するたびに、変更は失われます。

より良いアプローチは、パッチ ファイルを作成することです。

パッチファイルの作成

この問題に対するパッチを作成して適用する方法に関するステップバイステップのガイドです

パッチファイルを作成する

より堅牢な解決策は、パッチ ファイルを作成することです。この方法を使用すると、依存関係をインストールまたは更新するたびに変更を自動的に適用できます。

パッチ ファイルは、ファイルの 2 つのバージョン間の相違点を含むテキスト ファイルです。つまり、基本的には「前」と「後」のスナップショットです。

プロジェクト ディレクトリに、パッチ ファイルを保存するフォルダーを作成します:

mkdir -p パッチ

patches/ フォルダー内に、fix-null-trim.patch という名前の新しいパッチ ファイルを作成します。これはテキストエディタで行うことができます:

タッチパッチ/fix-null-trim.patch

テキスト エディタで fix-null-trim.patch を開き、次のコンテンツを追加します:


--- a/vendor/wp-coding-standards/wpcs/WordPress/Sniffs/NamingConventions/PrefixAllGlobalsSniff.php b/vendor/wp-coding-standards/wpcs/WordPress/Sniffs/NamingConventions/PrefixAllGlobalsSniff.php @@ -280,7 280,7 @@ // `trim()` を使用した元のコード // この行を更新します: - $cl_prefixes = trim( PHPCSHelper::get_config_data( 'prefixes' ) ); $cl_prefixes = is_null( PHPCSHelper::get_config_data( 'prefixes' ) ) ? '' :trim( PHPCSHelper::get_config_data( 'prefixes' ) ); --- a/vendor/wp-coding-standards/wpcs/WordPress/Sniffs/WP/I18nSniff.php b/vendor/wp-coding-standards/wpcs/WordPress/Sniffs/WP/I18nSniff.php @@ -194,7 194,7 @@ // `trim()` を使用した元のコード // この行を更新します: - $cl_text_domain = トリム(PHPCSHelper::get_config_data( 'text_domain' ) ); $cl_text_domain = is_null(PHPCSHelper::get_config_data( 'text_domain' )) ? '' :trim( PHPCSHelper::get_config_data( 'text_domain' ) ); --- a/vendor/wp-coding-standards/wpcs/WordPress/Sniffs/Sniff.php b/vendor/wp-coding-standards/wpcs/WordPress/Sniffs/Sniff.php @@ -1144,7 1144,7 @@ // `trim()` を使用した元のコード // この行を更新します: - $cl_supported_version = trim( PHPCSHelper::get_config_data( 'minimum_supported_wp_version' ) ); $cl_supported_version = is_null(PHPCSHelper::get_config_data( 'minimum_supported_wp_version' )) ? '' : trim( PHPCSHelper::get_config_data( 'minimum_supported_wp_version' ) );
  --- a/vendor/wp-coding-standards/wpcs/WordPress/Sniffs/NamingConventions/PrefixAllGlobalsSniff.php
    b/vendor/wp-coding-standards/wpcs/WordPress/Sniffs/NamingConventions/PrefixAllGlobalsSniff.php
@@ -280,7  280,7 @@

        // Original code with `trim()`
        // Update this line:
-       $cl_prefixes = trim( PHPCSHelper::get_config_data( 'prefixes' ) );
        $cl_prefixes = is_null( PHPCSHelper::get_config_data( 'prefixes' ) ) ? '' : trim( PHPCSHelper::get_config_data( 'prefixes' ) );

--- a/vendor/wp-coding-standards/wpcs/WordPress/Sniffs/WP/I18nSniff.php
    b/vendor/wp-coding-standards/wpcs/WordPress/Sniffs/WP/I18nSniff.php
@@ -194,7  194,7 @@

        // Original code with `trim()`
        // Update this line:
-       $cl_text_domain = trim( PHPCSHelper::get_config_data( 'text_domain' ) );
        $cl_text_domain = is_null(PHPCSHelper::get_config_data( 'text_domain' )) ? '' : trim( PHPCSHelper::get_config_data( 'text_domain' ) );

--- a/vendor/wp-coding-standards/wpcs/WordPress/Sniffs/Sniff.php
    b/vendor/wp-coding-standards/wpcs/WordPress/Sniffs/Sniff.php
@@ -1144,7  1144,7 @@

        // Original code with `trim()`
        // Update this line:
-       $cl_supported_version = trim( PHPCSHelper::get_config_data( 'minimum_supported_wp_version' ) );
        $cl_supported_version = is_null(PHPCSHelper::get_config_data( 'minimum_supported_wp_version' )) ? '' : trim( PHPCSHelper::get_config_data( 'minimum_supported_wp_version' ) );
このパッチは、PrefixAllGlobalsSniff.php の問題のある行を、trim() に null を渡すことを避けるために null 合体演算子 (??) を使用するより安全なバージョンに置き換えるよう Composer に指示します。

パッチを適用するには、composer.json を変更します。

次に、依存関係をインストールまたは更新するたびにこのパッチを自動的に適用するように Composer に指示する必要があります。

プロジェクトのcomposer.jsonファイルを開きます。 「extra」セクションに次の構成を追加します。 「追加」セクションがまだ存在しない場合は、作成する必要があります。


json "余分な": { 「パッチ」: { "wp-coding-standards/wpcs": { 「null tr​​im() の問題を修正」: 「patches/fix-null-trim.patch」 } } }
  --- a/vendor/wp-coding-standards/wpcs/WordPress/Sniffs/NamingConventions/PrefixAllGlobalsSniff.php
    b/vendor/wp-coding-standards/wpcs/WordPress/Sniffs/NamingConventions/PrefixAllGlobalsSniff.php
@@ -280,7  280,7 @@

        // Original code with `trim()`
        // Update this line:
-       $cl_prefixes = trim( PHPCSHelper::get_config_data( 'prefixes' ) );
        $cl_prefixes = is_null( PHPCSHelper::get_config_data( 'prefixes' ) ) ? '' : trim( PHPCSHelper::get_config_data( 'prefixes' ) );

--- a/vendor/wp-coding-standards/wpcs/WordPress/Sniffs/WP/I18nSniff.php
    b/vendor/wp-coding-standards/wpcs/WordPress/Sniffs/WP/I18nSniff.php
@@ -194,7  194,7 @@

        // Original code with `trim()`
        // Update this line:
-       $cl_text_domain = trim( PHPCSHelper::get_config_data( 'text_domain' ) );
        $cl_text_domain = is_null(PHPCSHelper::get_config_data( 'text_domain' )) ? '' : trim( PHPCSHelper::get_config_data( 'text_domain' ) );

--- a/vendor/wp-coding-standards/wpcs/WordPress/Sniffs/Sniff.php
    b/vendor/wp-coding-standards/wpcs/WordPress/Sniffs/Sniff.php
@@ -1144,7  1144,7 @@

        // Original code with `trim()`
        // Update this line:
-       $cl_supported_version = trim( PHPCSHelper::get_config_data( 'minimum_supported_wp_version' ) );
        $cl_supported_version = is_null(PHPCSHelper::get_config_data( 'minimum_supported_wp_version' )) ? '' : trim( PHPCSHelper::get_config_data( 'minimum_supported_wp_version' ) );
これにより、Composer は依存関係をインストールまたは更新するときに、fix-null-trim.patch ファイルを wp-coding-standards/wpcs パッケージに適用するように指示されます。

Composer パッチプラグインをインストールする

Composer 経由でパッチを適用するには、composer-patches プラグインが必要です。次のコマンドを実行してインストールします。

作曲家には cweagans/composer-patches が必要です

パッチを適用する

これで、次のコマンドを実行してパッチを適用できます:

作曲家のインストール

インストール中に、Composer は patches/ フォルダーから PrefixAllGlobalsSniff.php ファイルにパッチを適用します。

パッチ ファイルを作成して適用することで、修正が Composer のアップデート後も持続することを保証し、ソフトウェア開発のベスト プラクティスに準拠します。 これらの問題は将来のリリースで解決される可能性があるため、PHP_CodeSniffer と WordPress コーディング標準の更新を定期的に監視してください。この積極的なアプローチにより、コードの品質が向上するだけでなく、PHP 8.x 環境での開発ワークフローも改善されます。 この Gist でパッチ ファイルを共有しました。プロジェクトに同様の修正を実装するための参照として自由に使用してください!

リリースステートメント この記事は次の場所に転載されています: https://dev.to/sarahcssiqueira/fixing-phpcodesniffer-null-trim-errors-in-wordpress-coding-standards-31k1?1 侵害がある場合は、[email protected] までご連絡ください。それを削除するには
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3