diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 1f3665db9..bcd1b32dc 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -26,37 +26,30 @@ jobs: strategy: fail-fast: false matrix: - php: ['7.4', '8.0', '8.1'] + php: ['8.1', '8.2'] wp: ['latest'] multisite: ['0', '1'] extensions: ['gd'] experimental: [false] include: - # WP Trunk - - php: '7.4' + # PHP 8.2 / experimental + - php: '8.2' wp: 'trunk' + dependency-version: 'highest' multisite: '0' experimental: true - # PHP 8.0 - - php: '8.0' - wp: 'latest' + # PHP 8.3 / experimental + - php: '8.3' + wp: 'trunk' + dependency-version: 'highest' multisite: '0' - experimental: false - # PHP 8.1 + experimental: true + # Coverage - php: '8.1' wp: 'latest' + dependency-version: 'highest' multisite: '0' experimental: false - # PHP 8.1 / experimental - - php: '8.1' - wp: 'trunk' - multisite: '0' - experimental: true - # PHP 8.2 / experimental - - php: '8.2' - wp: 'trunk' - multisite: '0' - experimental: true steps: - name: Checkout diff --git a/composer.json b/composer.json index 015420ea9..57e3c4889 100644 --- a/composer.json +++ b/composer.json @@ -40,7 +40,11 @@ }, "require-dev": { "automattic/wordbless": "^0.4.2", - "yoast/wp-test-utils": "^1.0" + "yoast/wp-test-utils": "^1.0", + "wp-coding-standards/wpcs": "^3.1", + "phpcompatibility/php-compatibility": "^9", + "szepeviktor/phpstan-wordpress": "^1.3", + "10up/phpcs-composer": "^3.0" }, "extra": { "installer-paths": { @@ -53,10 +57,14 @@ "config": { "allow-plugins": { "roots/wordpress-core-installer": true, - "composer/installers": true + "composer/installers": true, + "dealerdirect/phpcodesniffer-composer-installer": true } }, "scripts": { - "test": "phpunit" + "test": "phpunit", + "cs": "@php ./vendor/bin/phpcs", + "cs:fix": "@php ./vendor/bin/phpcbf", + "phpstan": "@php ./vendor/bin/phpstan analyse" } } diff --git a/phpcs.xml.dist b/phpcs.xml.dist new file mode 100644 index 000000000..b5cc39e17 --- /dev/null +++ b/phpcs.xml.dist @@ -0,0 +1,32 @@ + + + + . + + */node_modules/* + */wordpress/* + */vendor/* + */resources/* + */dist/* + */tests/* + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/phpstan.neon b/phpstan.neon new file mode 100644 index 000000000..5ce8f6de7 --- /dev/null +++ b/phpstan.neon @@ -0,0 +1,15 @@ +parameters: + editorUrl: 'vscode://file/%%file%%:%%line%%' + level: 5 # Increase until "max" + paths: + - src/ + - %currentWorkingDirectory%/ + excludePaths: + - tests/* + - docs/* + - vendor/* + - wordpress/* + ignoreErrors: + +includes: + - vendor/szepeviktor/phpstan-wordpress/extension.neon \ No newline at end of file diff --git a/tests/TestTimberStarterTheme.php b/tests/TestTimberStarterTheme.php index d52d901e1..33a6651ae 100644 --- a/tests/TestTimberStarterTheme.php +++ b/tests/TestTimberStarterTheme.php @@ -6,15 +6,15 @@ class TestTimberStarterTheme extends BaseTestCase { public function set_up() { - switch_theme( basename( dirname( __DIR__ ) ) . '/theme' ); + switch_theme(basename(dirname(__DIR__)) . '/theme'); - require dirname( __DIR__ ) . '/functions.php'; + require dirname(__DIR__) . '/functions.php'; - Timber::$dirname = array_merge( (array) Timber::$dirname, [ '../views' ] ); - Timber::$dirname = array_unique( Timber::$dirname ); + Timber::$dirname = array_merge((array) Timber::$dirname, [ '../views' ]); + Timber::$dirname = array_unique(Timber::$dirname); // WorDBless includes wp-settings.php - do_action( 'after_setup_theme' ); + do_action('after_setup_theme'); parent::set_up(); } diff --git a/tests/bootstrap.php b/tests/bootstrap.php index 9ffd4932e..fb3f98213 100644 --- a/tests/bootstrap.php +++ b/tests/bootstrap.php @@ -2,7 +2,7 @@ use WorDBless\Load; -if (! file_exists( dirname(__DIR__) . '/wordpress/wp-content')) { +if (! file_exists(dirname(__DIR__) . '/wordpress/wp-content')) { mkdir(dirname(__DIR__) . '/wordpress/wp-content'); } @@ -11,18 +11,18 @@ } copy( - dirname( __DIR__ ) . '/vendor/automattic/wordbless/src/dbless-wpdb.php', - dirname( __DIR__ ) . '/wordpress/wp-content/db.php' + dirname(__DIR__) . '/vendor/automattic/wordbless/src/dbless-wpdb.php', + dirname(__DIR__) . '/wordpress/wp-content/db.php' ); -$theme_base_name = basename( dirname( __DIR__ ) ); -$src = realpath( dirname( dirname( __DIR__ ) ) . '/' . $theme_base_name ); -$dest = dirname( __DIR__ ) . '/wordpress/wp-content/themes/' . $theme_base_name; +$theme_base_name = basename(dirname(__DIR__)); +$src = realpath(dirname(dirname(__DIR__)) . '/' . $theme_base_name); +$dest = dirname(__DIR__) . '/wordpress/wp-content/themes/' . $theme_base_name; if ( is_dir($src) && ! file_exists($dest) ) { symlink($src, $dest); } -require_once dirname( __DIR__ ) . '/vendor/autoload.php'; +require_once dirname(__DIR__) . '/vendor/autoload.php'; Load::load();