From eed05d9ca96fd9668fd9a285f5abf40d629c548e Mon Sep 17 00:00:00 2001 From: Thrijith Thankachan Date: Wed, 17 Apr 2019 22:09:22 +0530 Subject: [PATCH 01/13] PHPCS: Add new ruleset to the project Update .distignore and .gitignore with phpcs/phpunit config files Update wp-cli-tests to 2.1 --- .distignore | 2 ++ .gitignore | 3 +++ phpcs.xml.dist | 72 ++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 77 insertions(+) create mode 100644 phpcs.xml.dist diff --git a/.distignore b/.distignore index b964b40c7..95b52fb02 100644 --- a/.distignore +++ b/.distignore @@ -6,6 +6,8 @@ .travis.yml behat.yml circle.yml +phpcs.xml.dist +phpunit.xml.dist bin/ features/ utils/ diff --git a/.gitignore b/.gitignore index ff4941991..bcf211b32 100644 --- a/.gitignore +++ b/.gitignore @@ -6,3 +6,6 @@ vendor/ *.tar.gz composer.lock *.log +phpunit.xml +phpcs.xml +.phpcs.xml diff --git a/phpcs.xml.dist b/phpcs.xml.dist new file mode 100644 index 000000000..064410413 --- /dev/null +++ b/phpcs.xml.dist @@ -0,0 +1,72 @@ + + + Custom ruleset for WP-CLI cron-command + + + + + . + + + */node_modules/* + */vendor/* + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + */src/Cron_Command\.php$ + */src/Cron_(Event|Schedule)_Command\.php$ + + + From 1114e4d34468c9825c735de7b2e3957d24b47a95 Mon Sep 17 00:00:00 2001 From: Thrijith Thankachan Date: Wed, 17 Apr 2019 22:11:21 +0530 Subject: [PATCH 02/13] PHPCS: Add prefix to global variables --- cron-command.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/cron-command.php b/cron-command.php index eedb81eaa..f65975da4 100644 --- a/cron-command.php +++ b/cron-command.php @@ -4,9 +4,9 @@ return; } -$autoload = dirname( __FILE__ ) . '/vendor/autoload.php'; -if ( file_exists( $autoload ) ) { - require_once $autoload; +$wpcli_cron_autoload = dirname( __FILE__ ) . '/vendor/autoload.php'; +if ( file_exists( $wpcli_cron_autoload ) ) { + require_once $wpcli_cron_autoload; } WP_CLI::add_command( 'cron', 'Cron_Command' ); From 5ac098d151e0fbd1dab191a2a7c467d8d5efdc75 Mon Sep 17 00:00:00 2001 From: Thrijith Thankachan Date: Wed, 17 Apr 2019 22:22:24 +0530 Subject: [PATCH 03/13] PHPCS: Fix up errors in src/Cron_Command.php --- src/Cron_Command.php | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/src/Cron_Command.php b/src/Cron_Command.php index b93c86fa6..b1e7d7c53 100644 --- a/src/Cron_Command.php +++ b/src/Cron_Command.php @@ -69,15 +69,18 @@ protected static function get_cron_spawn() { $sslverify = \WP_CLI\Utils\wp_version_compare( 4.0, '<' ); $doing_wp_cron = sprintf( '%.22F', microtime( true ) ); - $cron_request = apply_filters( 'cron_request', array( - 'url' => site_url( 'wp-cron.php?doing_wp_cron=' . $doing_wp_cron ), - 'key' => $doing_wp_cron, - 'args' => array( - 'timeout' => 3, - 'blocking' => true, - 'sslverify' => apply_filters( 'https_local_ssl_verify', $sslverify ) + $cron_request = apply_filters( + 'cron_request', // phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound + array( + 'url' => site_url( 'wp-cron.php?doing_wp_cron=' . $doing_wp_cron ), + 'key' => $doing_wp_cron, + 'args' => array( + 'timeout' => 3, + 'blocking' => true, + 'sslverify' => apply_filters( 'https_local_ssl_verify', $sslverify ), // phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound + ), ) - ) ); + ); # Enforce a blocking request in case something that's hooked onto the 'cron_request' filter sets it to false $cron_request['args']['blocking'] = true; From c99bed3ce2b8755d76662bea0db0842b64aebb68 Mon Sep 17 00:00:00 2001 From: Thrijith Thankachan Date: Wed, 17 Apr 2019 23:54:05 +0530 Subject: [PATCH 04/13] PHPCS: Fix up errors in src/Cron_Event_Command.php --- src/Cron_Event_Command.php | 63 ++++++++++++++++++++------------------ 1 file changed, 33 insertions(+), 30 deletions(-) diff --git a/src/Cron_Event_Command.php b/src/Cron_Event_Command.php index fde3a77f0..f3c33553f 100644 --- a/src/Cron_Event_Command.php +++ b/src/Cron_Event_Command.php @@ -31,6 +31,7 @@ class Cron_Event_Command extends WP_CLI_Command { 'next_run_relative', 'recurrence', ); + private static $time_format = 'Y-m-d H:i:s'; /** @@ -112,7 +113,7 @@ public function list_( $args, $assoc_args ) { } } - if ( 'ids' == $formatter->format ) { + if ( 'ids' === $formatter->format ) { echo implode( ' ', wp_list_pluck( $events, 'hook' ) ); } else { $formatter->display_items( $events ); @@ -153,13 +154,13 @@ public function list_( $args, $assoc_args ) { */ public function schedule( $args, $assoc_args ) { - $hook = $args[0]; - $next_run = \WP_CLI\Utils\get_flag_value( $args, 1, 'now' ); + $hook = $args[0]; + $next_run = \WP_CLI\Utils\get_flag_value( $args, 1, 'now' ); $recurrence = \WP_CLI\Utils\get_flag_value( $args, 2, false ); if ( empty( $next_run ) ) { $timestamp = time(); - } else if ( is_numeric( $next_run ) ) { + } elseif ( is_numeric( $next_run ) ) { $timestamp = absint( $next_run ); } else { $timestamp = strtotime( $next_run ); @@ -173,7 +174,7 @@ public function schedule( $args, $assoc_args ) { $schedules = wp_get_schedules(); - if ( ! isset( $schedules[$recurrence] ) ) { + if ( ! isset( $schedules[ $recurrence ] ) ) { WP_CLI::error( sprintf( "'%s' is not a valid schedule name for recurrence.", $recurrence ) ); } @@ -226,7 +227,7 @@ public function run( $args, $assoc_args ) { } $hooks = wp_list_pluck( $events, 'hook' ); - foreach( $args as $hook ) { + foreach ( $args as $hook ) { if ( ! in_array( $hook, $hooks, true ) ) { WP_CLI::error( sprintf( "Invalid cron event '%s'", $hook ) ); } @@ -234,7 +235,7 @@ public function run( $args, $assoc_args ) { if ( \WP_CLI\Utils\get_flag_value( $assoc_args, 'due-now' ) ) { $due_events = array(); - foreach( $events as $event ) { + foreach ( $events as $event ) { if ( ! empty( $args ) && ! in_array( $event->hook, $args, true ) ) { continue; } @@ -243,10 +244,10 @@ public function run( $args, $assoc_args ) { } } $events = $due_events; - } else if ( ! \WP_CLI\Utils\get_flag_value( $assoc_args, 'all' ) ) { + } elseif ( ! \WP_CLI\Utils\get_flag_value( $assoc_args, 'all' ) ) { $due_events = array(); - foreach( $events as $event ) { - if ( in_array( $event->hook, $args ) ) { + foreach ( $events as $event ) { + if ( in_array( $event->hook, $args, true ) ) { $due_events[] = $event; } } @@ -255,9 +256,9 @@ public function run( $args, $assoc_args ) { $executed = 0; foreach ( $events as $event ) { - $start = microtime( true ); + $start = microtime( true ); $result = self::run_event( $event ); - $total = round( microtime( true ) - $start, 3 ); + $total = round( microtime( true ) - $start, 3 ); $executed++; WP_CLI::log( sprintf( "Executed the cron event '%s' in %ss.", $event->hook, $total ) ); } @@ -275,17 +276,17 @@ public function run( $args, $assoc_args ) { protected static function run_event( stdClass $event ) { if ( ! defined( 'DOING_CRON' ) ) { - define( 'DOING_CRON', true ); + define( 'DOING_CRON', true ); // phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedConstantFound } - if ( $event->schedule != false ) { + if ( false !== $event->schedule ) { $new_args = array( $event->time, $event->schedule, $event->hook, $event->args ); call_user_func_array( 'wp_reschedule_event', $new_args ); } wp_unschedule_event( $event->time, $event->hook, $event->args ); - do_action_ref_array( $event->hook, $event->args ); + do_action_ref_array( $event->hook, $event->args ); // phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.DynamicHooknameFound return true; @@ -316,7 +317,7 @@ public function delete( $args, $assoc_args ) { $deleted = 0; foreach ( $events as $event ) { - if ( $event->hook == $hook ) { + if ( $event->hook === $hook ) { $result = self::delete_event( $event ); if ( $result ) { $deleted++; @@ -327,7 +328,7 @@ public function delete( $args, $assoc_args ) { } if ( $deleted ) { - $message = ( 1 == $deleted ) ? "Deleted the cron event '%2\$s'." : "Deleted %1\$d instances of the cron event '%2\$s'."; + $message = ( 1 === $deleted ) ? "Deleted the cron event '%2\$s'." : "Deleted %1\$d instances of the cron event '%2\$s'."; WP_CLI::success( sprintf( $message, $deleted, $hook ) ); } else { WP_CLI::error( sprintf( "Invalid cron event '%s'.", $hook ) ); @@ -344,7 +345,7 @@ public function delete( $args, $assoc_args ) { protected static function delete_event( stdClass $event ) { $crons = _get_cron_array(); - if ( ! isset( $crons[$event->time][$event->hook][$event->sig] ) ) { + if ( ! isset( $crons[ $event->time ][ $event->hook ][ $event->sig ] ) ) { return false; } @@ -425,13 +426,13 @@ private static function interval( $since ) { // array of time period chunks $chunks = array( - array( 60 * 60 * 24 * 365 , \_n_noop( '%s year', '%s years' ) ), - array( 60 * 60 * 24 * 30 , \_n_noop( '%s month', '%s months' ) ), + array( 60 * 60 * 24 * 365, \_n_noop( '%s year', '%s years' ) ), + array( 60 * 60 * 24 * 30, \_n_noop( '%s month', '%s months' ) ), array( 60 * 60 * 24 * 7, \_n_noop( '%s week', '%s weeks' ) ), - array( 60 * 60 * 24 , \_n_noop( '%s day', '%s days' ) ), - array( 60 * 60 , \_n_noop( '%s hour', '%s hours' ) ), - array( 60 , \_n_noop( '%s minute', '%s minutes' ) ), - array( 1 , \_n_noop( '%s second', '%s seconds' ) ), + array( 60 * 60 * 24, \_n_noop( '%s day', '%s days' ) ), + array( 60 * 60, \_n_noop( '%s hour', '%s hours' ) ), + array( 60, \_n_noop( '%s minute', '%s minutes' ) ), + array( 1, \_n_noop( '%s second', '%s seconds' ) ), ); // we only want to output two chunks of time here, eg: @@ -441,11 +442,12 @@ private static function interval( $since ) { // step one: the first chunk for ( $i = 0, $j = count( $chunks ); $i < $j; $i++ ) { - $seconds = $chunks[$i][0]; - $name = $chunks[$i][1]; + $seconds = $chunks[ $i ][0]; + $name = $chunks[ $i ][1]; // finding the biggest chunk (if the chunk fits, break) - if ( ( $count = floor( $since / $seconds ) ) != 0 ){ + $count = floor( $since / $seconds ); + if ( floatval( 0 ) !== $count ) { break; } } @@ -455,10 +457,11 @@ private static function interval( $since ) { // step two: the second chunk if ( $i + 1 < $j ) { - $seconds2 = $chunks[$i + 1][0]; - $name2 = $chunks[$i + 1][1]; + $seconds2 = $chunks[ $i + 1 ][0]; + $name2 = $chunks[ $i + 1 ][1]; - if ( ( $count2 = floor( ( $since - ( $seconds * $count ) ) / $seconds2 ) ) != 0 ) { + $count2 = floor( ( $since - ( $seconds * $count ) ) / $seconds2 ); + if ( floatval( 0 ) !== $count2 ) { // add to output var $output .= ' ' . sprintf( \_n( $name2[0], $name2[1], $count2 ), $count2 ); } From 3714f2c0fdf13bd826f7bd06547255f7e9882650 Mon Sep 17 00:00:00 2001 From: Thrijith Thankachan Date: Thu, 18 Apr 2019 00:03:43 +0530 Subject: [PATCH 05/13] PHPCS: Fix up errors in src/Cron_Schedule_Command.php --- src/Cron_Schedule_Command.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Cron_Schedule_Command.php b/src/Cron_Schedule_Command.php index 08e4eae2c..46d850ec4 100644 --- a/src/Cron_Schedule_Command.php +++ b/src/Cron_Schedule_Command.php @@ -79,7 +79,7 @@ public function list_( $args, $assoc_args ) { $schedules = self::get_schedules(); - if ( 'ids' == $formatter->format ) { + if ( 'ids' === $formatter->format ) { echo implode( ' ', wp_list_pluck( $schedules, 'name' ) ); } else { $formatter->display_items( $schedules ); @@ -106,7 +106,7 @@ protected static function format_schedule( array $schedule, $name ) { */ protected static function get_schedules() { $schedules = wp_get_schedules(); - if ( !empty( $schedules ) ) { + if ( ! empty( $schedules ) ) { uasort( $schedules, 'Cron_Schedule_Command::sort' ); $schedules = array_map( 'Cron_Schedule_Command::format_schedule', $schedules, array_keys( $schedules ) ); } From c1a62fffd1021c7dc79117c345e96f598f9dfe62 Mon Sep 17 00:00:00 2001 From: Thrijith Thankachan Date: Thu, 18 Apr 2019 00:36:16 +0530 Subject: [PATCH 06/13] PHPCS: Refactor usage of translatable functions --- src/Cron_Event_Command.php | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/src/Cron_Event_Command.php b/src/Cron_Event_Command.php index f3c33553f..6ba7f8177 100644 --- a/src/Cron_Event_Command.php +++ b/src/Cron_Event_Command.php @@ -1,5 +1,7 @@ Date: Thu, 18 Apr 2019 01:07:42 +0530 Subject: [PATCH 07/13] PHPCS: Update variable name Update file exclude pattern in ruleset and minor fixes --- cron-command.php | 6 +++--- phpcs.xml.dist | 7 +++---- 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/cron-command.php b/cron-command.php index f65975da4..96022abec 100644 --- a/cron-command.php +++ b/cron-command.php @@ -4,9 +4,9 @@ return; } -$wpcli_cron_autoload = dirname( __FILE__ ) . '/vendor/autoload.php'; -if ( file_exists( $wpcli_cron_autoload ) ) { - require_once $wpcli_cron_autoload; +$wpcli_cron_autoloader = dirname( __FILE__ ) . '/vendor/autoload.php'; +if ( file_exists( $wpcli_cron_autoloader ) ) { + require_once $wpcli_cron_autoloader; } WP_CLI::add_command( 'cron', 'Cron_Command' ); diff --git a/phpcs.xml.dist b/phpcs.xml.dist index 064410413..45558471b 100644 --- a/phpcs.xml.dist +++ b/phpcs.xml.dist @@ -10,10 +10,10 @@ ############################################################################# --> - + . - */node_modules/* */vendor/* @@ -65,8 +65,7 @@ - */src/Cron_Command\.php$ - */src/Cron_(Event|Schedule)_Command\.php$ + */src/(Cron|Cron_Event|Cron_Schedule)_Command\.php$ From 4358df7ce3c9d5bf00490bad3443494a17649437 Mon Sep 17 00:00:00 2001 From: Thrijith Thankachan Date: Thu, 18 Apr 2019 03:40:45 +0530 Subject: [PATCH 08/13] PHPCS: Update ruleset --- phpcs.xml.dist | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/phpcs.xml.dist b/phpcs.xml.dist index 45558471b..0d228cdfa 100644 --- a/phpcs.xml.dist +++ b/phpcs.xml.dist @@ -45,13 +45,6 @@ https://github.com/PHPCompatibility/PHPCompatibility#sniffing-your-code-for-compatibility-with-specific-php-versions --> - - - - - - - @@ -65,7 +58,7 @@ - */src/(Cron|Cron_Event|Cron_Schedule)_Command\.php$ + */src/Cron_(Event_|Schedule_)?Command\.php$ From d925ac2fc6a35b362bad4069106ad3372d895a32 Mon Sep 17 00:00:00 2001 From: Thrijith Thankachan Date: Thu, 18 Apr 2019 04:05:46 +0530 Subject: [PATCH 09/13] PHPCS: Add comment for whitelist, Update code usage where namespace function was used --- src/Cron_Command.php | 23 ++++++++++++----------- src/Cron_Event_Command.php | 16 ++++++++-------- 2 files changed, 20 insertions(+), 19 deletions(-) diff --git a/src/Cron_Command.php b/src/Cron_Command.php index b1e7d7c53..941458035 100644 --- a/src/Cron_Command.php +++ b/src/Cron_Command.php @@ -69,17 +69,18 @@ protected static function get_cron_spawn() { $sslverify = \WP_CLI\Utils\wp_version_compare( 4.0, '<' ); $doing_wp_cron = sprintf( '%.22F', microtime( true ) ); - $cron_request = apply_filters( - 'cron_request', // phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound - array( - 'url' => site_url( 'wp-cron.php?doing_wp_cron=' . $doing_wp_cron ), - 'key' => $doing_wp_cron, - 'args' => array( - 'timeout' => 3, - 'blocking' => true, - 'sslverify' => apply_filters( 'https_local_ssl_verify', $sslverify ), // phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound - ), - ) + $cron_request_array = array( + 'url' => site_url( 'wp-cron.php?doing_wp_cron=' . $doing_wp_cron ), + 'key' => $doing_wp_cron, + 'args' => array( + 'timeout' => 3, + 'blocking' => true, + 'sslverify' => apply_filters( 'https_local_ssl_verify', $sslverify ), // phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound -- Calling native WordPress hook. + ), + ); + $cron_request = apply_filters( + 'cron_request', // phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound -- 'cron_request', // phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound -- Calling native WordPress hook. + $cron_request_array ); # Enforce a blocking request in case something that's hooked onto the 'cron_request' filter sets it to false diff --git a/src/Cron_Event_Command.php b/src/Cron_Event_Command.php index 6ba7f8177..5cba3ab05 100644 --- a/src/Cron_Event_Command.php +++ b/src/Cron_Event_Command.php @@ -157,8 +157,8 @@ public function list_( $args, $assoc_args ) { public function schedule( $args, $assoc_args ) { $hook = $args[0]; - $next_run = \WP_CLI\Utils\get_flag_value( $args, 1, 'now' ); - $recurrence = \WP_CLI\Utils\get_flag_value( $args, 2, false ); + $next_run = Utils\get_flag_value( $args, 1, 'now' ); + $recurrence = Utils\get_flag_value( $args, 2, false ); if ( empty( $next_run ) ) { $timestamp = time(); @@ -218,7 +218,7 @@ public function schedule( $args, $assoc_args ) { */ public function run( $args, $assoc_args ) { - if ( empty( $args ) && ! \WP_CLI\Utils\get_flag_value( $assoc_args, 'due-now' ) && ! \WP_CLI\Utils\get_flag_value( $assoc_args, 'all' ) ) { + if ( empty( $args ) && ! Utils\get_flag_value( $assoc_args, 'due-now' ) && ! Utils\get_flag_value( $assoc_args, 'all' ) ) { WP_CLI::error( 'Please specify one or more cron events, or use --due-now/--all.' ); } @@ -235,7 +235,7 @@ public function run( $args, $assoc_args ) { } } - if ( \WP_CLI\Utils\get_flag_value( $assoc_args, 'due-now' ) ) { + if ( Utils\get_flag_value( $assoc_args, 'due-now' ) ) { $due_events = array(); foreach ( $events as $event ) { if ( ! empty( $args ) && ! in_array( $event->hook, $args, true ) ) { @@ -246,7 +246,7 @@ public function run( $args, $assoc_args ) { } } $events = $due_events; - } elseif ( ! \WP_CLI\Utils\get_flag_value( $assoc_args, 'all' ) ) { + } elseif ( ! Utils\get_flag_value( $assoc_args, 'all' ) ) { $due_events = array(); foreach ( $events as $event ) { if ( in_array( $event->hook, $args, true ) ) { @@ -278,7 +278,7 @@ public function run( $args, $assoc_args ) { protected static function run_event( stdClass $event ) { if ( ! defined( 'DOING_CRON' ) ) { - define( 'DOING_CRON', true ); // phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedConstantFound + define( 'DOING_CRON', true ); // phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedConstantFound -- Using native WordPress constant. } if ( false !== $event->schedule ) { @@ -288,7 +288,7 @@ protected static function run_event( stdClass $event ) { wp_unschedule_event( $event->time, $event->hook, $event->args ); - do_action_ref_array( $event->hook, $event->args ); // phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.DynamicHooknameFound + do_action_ref_array( $event->hook, $event->args ); // phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.DynamicHooknameFound -- Can't prefix dynamic hooks here, calling registered hooks. return true; @@ -398,7 +398,7 @@ protected static function get_cron_events() { 'sig' => $sig, 'args' => $data['args'], 'schedule' => $data['schedule'], - 'interval' => \WP_CLI\Utils\get_flag_value( $data, 'interval' ), + 'interval' => Utils\get_flag_value( $data, 'interval' ), ); } From 42346d581ae6e34be68cb08dcf8a3f8c044a960c Mon Sep 17 00:00:00 2001 From: Thrijith Thankachan Date: Thu, 18 Apr 2019 12:55:34 +0530 Subject: [PATCH 10/13] PHPCS: Use version 2.1 and above for wp-cli-test --- composer.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/composer.json b/composer.json index 09f2dff18..fd2519c7c 100644 --- a/composer.json +++ b/composer.json @@ -16,7 +16,7 @@ }, "require-dev": { "wp-cli/entity-command": "^1.3 || ^2", - "wp-cli/wp-cli-tests": "^2.0.11" + "wp-cli/wp-cli-tests": "^2.1" }, "config": { "process-timeout": 7200, From 7c9aa0bf217dbb703d3b288da7b954cc0397514f Mon Sep 17 00:00:00 2001 From: Thrijith Thankachan Date: Fri, 19 Apr 2019 19:41:42 +0530 Subject: [PATCH 11/13] PHPCS: Update ruleset and remove previously excluded directories --- phpcs.xml.dist | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/phpcs.xml.dist b/phpcs.xml.dist index 0d228cdfa..4c5ea7966 100644 --- a/phpcs.xml.dist +++ b/phpcs.xml.dist @@ -13,11 +13,6 @@ . - - */node_modules/* - */vendor/* - @@ -29,11 +24,11 @@ - +