diff --git a/includes/CLI/Plugin_Check_Command.php b/includes/CLI/Plugin_Check_Command.php index 3510091f8..bd2984958 100644 --- a/includes/CLI/Plugin_Check_Command.php +++ b/includes/CLI/Plugin_Check_Command.php @@ -70,6 +70,9 @@ public function __construct( Plugin_Context $plugin_context ) { * : Exclude checks provided as an argument in comma-separated values, e.g. i18n_usage, late_escaping. * Applies after evaluating `--checks`. * + * [--exclude-codes=] + * : Exclude error codes provided as an argument in comma-separated values. + * * [--format=] * : Format to display the results. Options are table, csv, and json. The default will be a table. * --- @@ -155,6 +158,7 @@ public function check( $args, $assoc_args ) { 'include-low-severity-errors' => false, 'include-low-severity-warnings' => false, 'slug' => '', + 'exclude-codes' => '', ) ); @@ -162,6 +166,9 @@ public function check( $args, $assoc_args ) { $plugin = isset( $args[0] ) ? $args[0] : ''; $checks = wp_parse_list( $options['checks'] ); + // Exclude codes. + $exclude_codes = isset( $options['exclude-codes'] ) ? wp_parse_list( $options['exclude-codes'] ) : array(); + // Create the categories array from CLI arguments. $categories = isset( $options['categories'] ) ? wp_parse_list( $options['categories'] ) : array(); @@ -258,6 +265,10 @@ static function ( $dirs ) use ( $excluded_files ) { } $file_results = $this->flatten_file_results( $file_errors, $file_warnings ); + if ( ! empty( $exclude_codes ) ) { + $file_results = $this->get_filtered_results_by_exclude_codes( $file_results, $exclude_codes ); + } + if ( '' !== $error_severity || '' !== $warning_severity ) { $file_results = $this->get_filtered_results_by_severity( $file_results, intval( $error_severity ), intval( $warning_severity ), $include_low_severity_errors, $include_low_severity_warnings ); } @@ -271,6 +282,10 @@ static function ( $dirs ) use ( $excluded_files ) { foreach ( $warnings as $file_name => $file_warnings ) { $file_results = $this->flatten_file_results( array(), $file_warnings ); + if ( ! empty( $exclude_codes ) ) { + $file_results = $this->get_filtered_results_by_exclude_codes( $file_results, $exclude_codes ); + } + if ( '' !== $error_severity || '' !== $warning_severity ) { $file_results = $this->get_filtered_results_by_severity( $file_results, intval( $error_severity ), intval( $warning_severity ), $include_low_severity_errors, $include_low_severity_warnings ); } @@ -666,4 +681,22 @@ private function get_filtered_results_by_severity( $results, $error_severity, $w return array_merge( $errors, $warnings ); } + + /** + * Returns check results filtered by exclude codes. + * + * @since 1.4.0 + * + * @param array $results Check results. + * @param array $exclude_codes Array of error codes to be excludes. + * @return array Filtered results. + */ + private function get_filtered_results_by_exclude_codes( $results, $exclude_codes ) { + return array_filter( + $results, + static function ( $result ) use ( $exclude_codes ) { + return ! in_array( $result['code'], $exclude_codes, true ); + } + ); + } }