Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
99 changes: 67 additions & 32 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,45 +6,51 @@
Convenience package to install all the external PHP_CodeSniffer rulesets which the [PHPCompatibility organisation](https://github.com/PHPCompatibility) maintains, in one go using Composer.


## Funding

**This project needs funding.**

The project team has spend thousands of hours creating and maintaining the PHPCompatibility packages. This is unsustainable without funding.

If you use PHPCompatibility, please fund this work by setting up a monthly contribution to the [PHP_CodeSniffer Open Collective].


## What's included in this package ?

### Base ruleset

* [![PHPCompatibility Current Version](https://img.shields.io/packagist/v/phpcompatibility/php-compatibility?label=stable)](https://packagist.org/packages/phpcompatibility/php-compatibility) [PHPCompatibility](https://github.com/PHPCompatibility/PHPCompatibility) - External PHP_CodeSniffer standard to check your codebase for PHP cross-version compatibility.
* [![PHPCompatibility Current Version](https://img.shields.io/packagist/v/phpcompatibility/php-compatibility?label=stable)](https://packagist.org/packages/phpcompatibility/php-compatibility) [PHPCompatibility] - External PHP_CodeSniffer standard to check your codebase for PHP cross-version compatibility.

### Framework/CMS specific rulesets

* [![PHPCompatibilityJoomla Current Version](https://img.shields.io/packagist/v/phpcompatibility/phpcompatibility-joomla?label=stable)](https://packagist.org/packages/PHPCompatibility/phpcompatibility-joomla) [PHPCompatibilityJoomla](https://github.com/PHPCompatibility/PHPCompatibilityJoomla) - PHPCompatibility ruleset specific for Joomla projects.
* [![PHPCompatibilityWP Current Version](https://img.shields.io/packagist/v/phpcompatibility/phpcompatibility-wp?label=stable)](https://packagist.org/packages/PHPCompatibility/phpcompatibility-wp) [PHPCompatibilityWP](https://github.com/PHPCompatibility/PHPCompatibilityWP) - PHPCompatibility ruleset specific for WordPress projects.
* [![PHPCompatibilityJoomla Current Version](https://img.shields.io/packagist/v/phpcompatibility/phpcompatibility-joomla?label=stable)](https://packagist.org/packages/PHPCompatibility/phpcompatibility-joomla) [PHPCompatibilityJoomla] - PHPCompatibility ruleset specific for Joomla projects.
* [![PHPCompatibilityWP Current Version](https://img.shields.io/packagist/v/phpcompatibility/phpcompatibility-wp?label=stable)](https://packagist.org/packages/PHPCompatibility/phpcompatibility-wp) [PHPCompatibilityWP] - PHPCompatibility ruleset specific for WordPress projects.

### Polyfill provider specific rulesets
* [![PHPCompatibilityPasswordCompat Current Version](https://img.shields.io/packagist/v/phpcompatibility/phpcompatibility-passwordcompat?label=stable)](https://packagist.org/packages/phpcompatibility/phpcompatibility-passwordcompat) [PHPCompatibilityPasswordCompat](https://github.com/PHPCompatibility/PHPCompatibilityPasswordCompat) - PHPCompatibility ruleset specific for projects which use @ircmaxell's [`password_compat`](https://github.com/ircmaxell/password_compat) polyfill library.
* [![PHPCompatibilityParagonie Current Version](https://img.shields.io/packagist/v/phpcompatibility/phpcompatibility-paragonie?label=stable)](https://packagist.org/packages/phpcompatibility/phpcompatibility-paragonie) [PHPCompatibilityParagonie](https://github.com/PHPCompatibility/PHPCompatibilityParagonie) - PHPCompatibility rulesets for projects using either the Paragonie [`random_compat`](https://github.com/paragonie/random_compat) or the Paragonie [`sodium_compat`](https://github.com/paragonie/sodium_compat) polyfill library, or both.
* [![PHPCompatibilitySymfony Current Version](https://img.shields.io/packagist/v/phpcompatibility/phpcompatibility-symfony?label=stable)](https://packagist.org/packages/phpcompatibility/phpcompatibility-symfony) [PHPCompatibilitySymfony](https://github.com/PHPCompatibility/PHPCompatibilitySymfony) - PHPCompatibility rulesets for projects using any of the [PHP polyfill libraries](https://github.com/symfony?utf8=?&q=polyfill) provided by the Symfony project.
For more details about the available rulesets, please check out the [README of the PHPCompatibilitySymfony](https://github.com/PHPCompatibility/PHPCompatibilitySymfony/blob/master/README.md) repository.
* [![PHPCompatibilityPasswordCompat Current Version](https://img.shields.io/packagist/v/phpcompatibility/phpcompatibility-passwordcompat?label=stable)](https://packagist.org/packages/phpcompatibility/phpcompatibility-passwordcompat) [PHPCompatibilityPasswordCompat] - PHPCompatibility ruleset specific for projects which use @ircmaxell's [`password_compat`] polyfill library.
* [![PHPCompatibilityParagonie Current Version](https://img.shields.io/packagist/v/phpcompatibility/phpcompatibility-paragonie?label=stable)](https://packagist.org/packages/phpcompatibility/phpcompatibility-paragonie) [PHPCompatibilityParagonie] - PHPCompatibility rulesets for projects using either the Paragonie [`random_compat`] or the Paragonie [`sodium_compat`] polyfill library, or both.
* [![PHPCompatibilitySymfony Current Version](https://img.shields.io/packagist/v/phpcompatibility/phpcompatibility-symfony?label=stable)](https://packagist.org/packages/phpcompatibility/phpcompatibility-symfony) [PHPCompatibilitySymfony] - PHPCompatibility rulesets for projects using any of the [PHP polyfill libraries] provided by the Symfony project.
For more details about the available rulesets, please check out the [README of the PHPCompatibilitySymfony][PHPCompatibilitySymfony-readme] repository.


## Requirements

* PHP 5.3+ for use with [PHP_CodeSniffer](https://github.com/PHPCSStandards/PHP_CodeSniffer) 2.3.0+.
* PHP 5.4+ for use with [PHP_CodeSniffer](https://github.com/PHPCSStandards/PHP_CodeSniffer) 3.0.2+.
* [Composer](https://getcomposer.org/)

Use the latest stable release of PHP_CodeSniffer for the best results.
The minimum _recommended_ version of PHP_CodeSniffer is version 2.6.0.
* PHP > 5.4
* [PHP_CodeSniffer] > 3.13.3.
Use the latest stable release of PHP_CodeSniffer for the best results.
* [Composer]


## Installation instructions

If you don't have a Composer plugin installed to manage the `installed_paths` setting for PHP_CodeSniffer, run the following from the command-line:
```bash
composer config allow-plugins.dealerdirect/phpcodesniffer-composer-installer true
composer require --dev dealerdirect/phpcodesniffer-composer-installer:"^0.7" phpcompatibility/phpcompatibility-all:"*"
```
The only supported installation method is via [Composer].

[Composer] will automatically install the project dependencies and register the external rulesets with PHP_CodeSniffer using the [Composer PHPCS plugin].

If you already have a Composer PHP_CodeSniffer plugin installed, run:
Run the following from the root of your project:
```bash
composer require --dev phpcompatibility/phpcompatibility-all:"*"
composer config allow-plugins.dealerdirect/phpcodesniffer-composer-installer true
composer require --dev phpcompatibility/phpcompatibility-all:"^2.0@dev"
```

Next, run:
Expand All @@ -54,18 +60,29 @@ vendor/bin/phpcs -i
If all went well, you will now see that the `PHPCompatibility`, `PHPCompatibilityJoomla`, `PHPCompatibilityWP` and a number of polyfill related standards are installed for PHP_CodeSniffer.


## Upgrade instructions

To upgrade this package, run the following command:
```bash
composer update --dev phpcompatibility/phpcompatibility-all --with-dependencies
```

> [!TIP]
> If you have a _root_ requirement in your project for one of the packages used by this project, you may need to update with `--with-all-dependencies` instead.


## How to use

Now you can use any of the following commands to inspect your code:
You can now use any of the following commands to inspect your code:
```bash
./vendor/bin/phpcs -p . --standard=PHPCompatibility
./vendor/bin/phpcs -p . --standard=PHPCompatibilityJoomla
./vendor/bin/phpcs -p . --standard=PHPCompatibilityWP
./vendor/bin/phpcs -p . --standard=PHPCompatibilityPasswordCompat
./vendor/bin/phpcs -p . --standard=PHPCompatibilityParagonieRandomCompat
./vendor/bin/phpcs -p . --standard=PHPCompatibilityParagonieSodiumCompat
./vendor/bin/phpcs -p . --standard=PHPCompatibilitySymfonyPolyfillPHP54
./vendor/bin/phpcs -p . --standard=PHPCompatibilitySymfonyPolyfillPHP73
vendor/bin/phpcs -p . --standard=PHPCompatibility
vendor/bin/phpcs -p . --standard=PHPCompatibilityJoomla
vendor/bin/phpcs -p . --standard=PHPCompatibilityWP
vendor/bin/phpcs -p . --standard=PHPCompatibilityPasswordCompat
vendor/bin/phpcs -p . --standard=PHPCompatibilityParagonieRandomCompat
vendor/bin/phpcs -p . --standard=PHPCompatibilityParagonieSodiumCompat
vendor/bin/phpcs -p . --standard=PHPCompatibilitySymfonyPolyfillPHP54
vendor/bin/phpcs -p . --standard=PHPCompatibilitySymfonyPolyfillPHP73
...etc...

# You can also combine the standards if your project uses several:
Expand All @@ -83,24 +100,42 @@ To get the most out of the PHPCompatibility standards, you should specify a `tes
For example:
```bash
# For a Joomla project which should be compatible with PHP 5.3 up to and including PHP 7.0:
./vendor/bin/phpcs -p . --standard=PHPCompatibilityJoomla --runtime-set testVersion 5.3-7.0
vendor/bin/phpcs -p . --standard=PHPCompatibilityJoomla --runtime-set testVersion 5.3-7.0

# For a project using both the Paragonie Sodium Compat polyfill, as well as the Symfony
# PHP 7.1 polyfill and which should be compatible with PHP 5.4 and higher:
vendor/bin/phpcs -p . --standard=PHPCompatibilityParagonieSodiumCompat,PHPCompatibilitySymfonyPolyfillPHP71 --runtime-set testVersion 5.4-
```

For more detailed information, see the README of the main [PHPCompatibility](https://github.com/PHPCompatibility/PHPCompatibility#sniffing-your-code-for-compatibility-with-specific-php-versions) standard.
For more detailed information, see the README of the main [PHPCompatibility][PHPCompatibility-testVersion] standard.


### Testing PHP files only

By default PHP_CodeSniffer will analyse PHP, JavaScript and CSS files. As the PHPCompatibility sniffs only target PHP code, you can make the run slightly faster by telling PHP_CodeSniffer to only check PHP files, like so:
```bash
./vendor/bin/phpcs -p . --standard=PHPCompatibilitySymfonyPolyfillPHP56 --extensions=php --runtime-set testVersion 5.3-
vendor/bin/phpcs -p . --standard=PHPCompatibilitySymfonyPolyfillPHP56 --extensions=php --runtime-set testVersion 5.3-
```

## License

All code within the PHPCompatibility organisation is released under the GNU Lesser General Public License (LGPL).
For more information, visit <https://www.gnu.org/licenses/lgpl-3.0.html>.


[Composer]: https://getcomposer.org/
[Composer PHPCS plugin]: https://github.com/PHPCSStandards/composer-installer/
[PHP_CodeSniffer]: https://github.com/PHPCSStandards/PHP_CodeSniffer
[PHP_CodeSniffer Open Collective]: https://opencollective.com/php_codesniffer
[PHPCompatibility]: https://github.com/PHPCompatibility/PHPCompatibility
[PHPCompatibility-testVersion]: https://github.com/PHPCompatibility/PHPCompatibility#sniffing-your-code-for-compatibility-with-specific-php-versions
[PHPCompatibilityParagonie]: https://github.com/PHPCompatibility/PHPCompatibilityParagonie
[PHPCompatibilityPasswordCompat]: https://github.com/PHPCompatibility/PHPCompatibilityPasswordCompat
[PHPCompatibilitySymfony]: https://github.com/PHPCompatibility/PHPCompatibilitySymfony
[PHPCompatibilityJoomla]: https://github.com/PHPCompatibility/PHPCompatibilityJoomla
[PHPCompatibilityWP]: https://github.com/PHPCompatibility/PHPCompatibilityWP
[`password_compat`]: https://github.com/ircmaxell/password_compat
[`random_compat`]: https://github.com/paragonie/random_compat
[`sodium_compat`]: https://github.com/paragonie/sodium_compat
[PHP polyfill libraries]: https://github.com/symfony?utf8=?&q=polyfill
[PHPCompatibilitySymfony-readme]: https://github.com/PHPCompatibility/PHPCompatibilitySymfony/blob/master/README.md
19 changes: 9 additions & 10 deletions composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -19,19 +19,18 @@
"security": "https://github.com/PHPCompatibility/PHPCompatibilityAll/security/policy"
},
"require" : {
"phpcompatibility/php-compatibility" : "*",
"phpcompatibility/phpcompatibility-wp" : "*",
"phpcompatibility/phpcompatibility-joomla" : "*",
"phpcompatibility/phpcompatibility-paragonie" : "*",
"phpcompatibility/phpcompatibility-passwordcompat" : "*",
"phpcompatibility/phpcompatibility-symfony" : "*"
},
"suggest" : {
"dealerdirect/phpcodesniffer-composer-installer": "^1.0 || This Composer plugin will sort out the PHP_CodeSniffer 'installed_paths' automatically.",
"roave/security-advisories": "dev-master || Helps prevent installing dependencies with known security issues."
"phpcompatibility/php-compatibility" : "^10.0.0@dev",
"phpcompatibility/phpcompatibility-wp" : "^3.0.0@dev",
"phpcompatibility/phpcompatibility-joomla" : "^3.0.0@dev",
"phpcompatibility/phpcompatibility-paragonie" : "^2.0.0@dev",
"phpcompatibility/phpcompatibility-passwordcompat" : "^2.0.0@dev",
"phpcompatibility/phpcompatibility-symfony" : "^2.0.0@dev"
},
"prefer-stable": true,
"config": {
"allow-plugins": {
"dealerdirect/phpcodesniffer-composer-installer": true
},
"lock": false
}
}