diff --git a/composer.json b/composer.json index c55a9a3af3..2ba2597b93 100644 --- a/composer.json +++ b/composer.json @@ -27,6 +27,7 @@ ], "recurse": false, "replace": false, + "merge-dev": true, "merge-extra": false } }, @@ -37,7 +38,10 @@ }, "scripts": { "pre-autoload-dump": "Drupal\\Core\\Composer\\Composer::preAutoloadDump", - "post-autoload-dump": "Drupal\\Core\\Composer\\Composer::ensureHtaccess", + "post-autoload-dump": [ + "Drupal\\Core\\Composer\\Composer::ensureHtaccess", + "Drupal\\Core\\Composer\\Composer::configurePhpcs" + ], "post-package-install": "Drupal\\Core\\Composer\\Composer::vendorTestCodeCleanup", "post-package-update": "Drupal\\Core\\Composer\\Composer::vendorTestCodeCleanup" } diff --git a/composer.lock b/composer.lock index 17ab6fa92b..af38dceda3 100644 --- a/composer.lock +++ b/composer.lock @@ -4,8 +4,8 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", "This file is @generated automatically" ], - "hash": "64b08387a4402f685cc35b1ad9197380", - "content-hash": "0e7de9d6c3256344615aad4b059a850a", + "hash": "b01a2ef4418bb7dc3118216d8a890202", + "content-hash": "73a3f86d302f3605b38a2c0127bd5478", "packages": [ { "name": "asm89/stack-cors", @@ -2842,6 +2842,42 @@ "time": "2015-06-14 21:17:01" }, { + "name": "drupal/coder", + "version": "8.2.8", + "source": { + "type": "git", + "url": "https://github.com/klausi/coder.git", + "reference": "6d717e1a5a5dd592ebbeaafad11746849fb52532" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/klausi/coder/zipball/6d717e1a5a5dd592ebbeaafad11746849fb52532", + "reference": "6d717e1a5a5dd592ebbeaafad11746849fb52532", + "shasum": "" + }, + "require": { + "php": ">=5.4.0", + "squizlabs/php_codesniffer": ">=2.5.1", + "symfony/yaml": ">=2.0.0" + }, + "require-dev": { + "phpunit/phpunit": ">=3.7" + }, + "type": "library", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "GPL-2.0+" + ], + "description": "Coder is a library to review Drupal code.", + "homepage": "https://www.drupal.org/project/coder", + "keywords": [ + "code review", + "phpcs", + "standards" + ], + "time": "2016-07-05 20:48:03" + }, + { "name": "fabpot/goutte", "version": "v3.1.2", "source": { @@ -3903,6 +3939,84 @@ "time": "2015-06-21 13:59:46" }, { + "name": "squizlabs/php_codesniffer", + "version": "2.6.2", + "source": { + "type": "git", + "url": "https://github.com/squizlabs/PHP_CodeSniffer.git", + "reference": "4edb770cb853def6e60c93abb088ad5ac2010c83" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/4edb770cb853def6e60c93abb088ad5ac2010c83", + "reference": "4edb770cb853def6e60c93abb088ad5ac2010c83", + "shasum": "" + }, + "require": { + "ext-simplexml": "*", + "ext-tokenizer": "*", + "ext-xmlwriter": "*", + "php": ">=5.1.2" + }, + "require-dev": { + "phpunit/phpunit": "~4.0" + }, + "bin": [ + "scripts/phpcs", + "scripts/phpcbf" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.x-dev" + } + }, + "autoload": { + "classmap": [ + "CodeSniffer.php", + "CodeSniffer/CLI.php", + "CodeSniffer/Exception.php", + "CodeSniffer/File.php", + "CodeSniffer/Fixer.php", + "CodeSniffer/Report.php", + "CodeSniffer/Reporting.php", + "CodeSniffer/Sniff.php", + "CodeSniffer/Tokens.php", + "CodeSniffer/Reports/", + "CodeSniffer/Tokenizers/", + "CodeSniffer/DocGenerators/", + "CodeSniffer/Standards/AbstractPatternSniff.php", + "CodeSniffer/Standards/AbstractScopeSniff.php", + "CodeSniffer/Standards/AbstractVariableSniff.php", + "CodeSniffer/Standards/IncorrectPatternException.php", + "CodeSniffer/Standards/Generic/Sniffs/", + "CodeSniffer/Standards/MySource/Sniffs/", + "CodeSniffer/Standards/PEAR/Sniffs/", + "CodeSniffer/Standards/PSR1/Sniffs/", + "CodeSniffer/Standards/PSR2/Sniffs/", + "CodeSniffer/Standards/Squiz/Sniffs/", + "CodeSniffer/Standards/Zend/Sniffs/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Greg Sherwood", + "role": "lead" + } + ], + "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.", + "homepage": "http://www.squizlabs.com/php-codesniffer", + "keywords": [ + "phpcs", + "standards" + ], + "time": "2016-07-13 23:29:13" + }, + { "name": "symfony/browser-kit", "version": "v3.1.7", "source": { diff --git a/core/composer.json b/core/composer.json index 4d9024d92a..b0ae3bc426 100644 --- a/core/composer.json +++ b/core/composer.json @@ -38,6 +38,7 @@ "require-dev": { "behat/mink": "1.7.x-dev", "behat/mink-goutte-driver": "~1.2", + "drupal/coder": "8.2.8", "jcalderonzumba/gastonjs": "~1.0.2", "jcalderonzumba/mink-phantomjs-driver": "~0.3.1", "mikey179/vfsStream": "~1.2", @@ -167,6 +168,9 @@ }, "scripts": { "pre-autoload-dump": "Drupal\\Core\\Composer\\Composer::preAutoloadDump", - "post-autoload-dump": "Drupal\\Core\\Composer\\Composer::ensureHtaccess" + "post-autoload-dump": [ + "Drupal\\Core\\Composer\\Composer::ensureHtaccess", + "Drupal\\Core\\Composer\\Composer::configurePhpcs" + ] } } diff --git a/core/lib/Drupal/Core/Composer/Composer.php b/core/lib/Drupal/Core/Composer/Composer.php index 263be4c6e9..b2dc781dbb 100644 --- a/core/lib/Drupal/Core/Composer/Composer.php +++ b/core/lib/Drupal/Core/Composer/Composer.php @@ -6,6 +6,7 @@ use Composer\Script\Event; use Composer\Installer\PackageEvent; use Composer\Semver\Constraint\Constraint; +use PHP_CodeSniffer; /** * Provides static functions for composer script events. @@ -18,6 +19,7 @@ class Composer { 'behat/mink' => ['tests', 'driver-testsuite'], 'behat/mink-browserkit-driver' => ['tests'], 'behat/mink-goutte-driver' => ['tests'], + 'drupal/coder' => ['coder_sniffer/Drupal/Test', 'coder_sniffer/DrupalPractice/Test'], 'doctrine/cache' => ['tests'], 'doctrine/collections' => ['tests'], 'doctrine/common' => ['tests'], @@ -136,6 +138,28 @@ public static function ensureHtaccess(Event $event) { } /** + * Configures phpcs if present. + * + * @param \Composer\Script\Event $event + */ + public static function configurePhpcs(Event $event) { + // Grab the local repo which tells us what's been installed. + $local_repository = $event->getComposer() + ->getRepositoryManager() + ->getLocalRepository(); + // Make sure both phpcs and coder are installed. + $phpcs_package = $local_repository->findPackage('squizlabs/php_codesniffer', '*'); + $coder_package = $local_repository->findPackage('drupal/coder', '*'); + if (!empty($phpcs_package) && !empty($coder_package)) { + $config = $event->getComposer()->getConfig(); + $vendor_dir = $config->get('vendor-dir'); + // Set phpcs' installed_paths config to point to our coder_sniffer + // directory. + PHP_CodeSniffer::setConfigData('installed_paths', $vendor_dir . '/drupal/coder/coder_sniffer'); + } + } + + /** * Remove possibly problematic test files from vendored projects. * * @param \Composer\Installer\PackageEvent $event