Skip to content

Commit 1ac347e

Browse files
committed
Initial commit / v 1.0.0
- Adds the WordPress specific PHPCompatibility ruleset. - Adds README with basic installation and usage instructions. - Adds `composer.json` file which requires the PHPCompatibility standard. - Adds a Travis config to validate the ruleset XML and the Composer configuration on each update. - Adds `.gitignore` to ignore the `vendor` directory and the `composer.lock` file. - Adds `.gitattributes` to keep release archives clean. - Adds `.github/issue_template.md` to try and prevent issues related to the generic PHPCompatibility standard from being opened in this repository.
1 parent 0ed750f commit 1ac347e

File tree

7 files changed

+253
-1
lines changed

7 files changed

+253
-1
lines changed

.gitattributes

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
#
2+
# Exclude these files from release archives.
3+
# https://blog.madewithlove.be/post/gitattributes/
4+
#
5+
/.gitattributes export-ignore
6+
/.gitignore export-ignore
7+
/.travis.yml export-ignore
8+
/.github export-ignore
9+
10+
#
11+
# Auto detect text files and perform LF normalization
12+
# http://davidlaing.com/2012/09/19/customise-your-gitattributes-to-become-a-git-ninja/
13+
#
14+
* text=auto

.github/issue_template.md

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
<!--
2+
This repository is only for the WordPress PHPCompatibility ruleset, which prevents false positives from the PHPCompatibility standard by excluding back-fills and poly-fills which are included by WordPress.
3+
4+
If your issue is related to the PHPCompatibility sniffs, please open an issue in the PHPCompatibility repository: https://github.com/PHPCompatibility/PHPCompatibility/issues
5+
6+
Before opening a new issue, please search for duplicate issues to prevent opening a duplicate. If there is already an open issue, please leave a comment there.
7+
8+
If you are opening an issue to get a new back-fill / poly-fill which was added to WordPress excluded, please include links to the WordPress source code and the related Trac ticket to substantiate your request.
9+
10+
Thanks!
11+
-->

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
/vendor/
2+
composer.lock

.travis.yml

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
sudo: false
2+
3+
dist: trusty
4+
5+
cache:
6+
apt: true
7+
8+
language: php
9+
10+
## Cache composer downloads.
11+
cache:
12+
directories:
13+
# Cache directory for older Composer versions.
14+
- $HOME/.composer/cache/files
15+
# Cache directory for more recent Composer versions.
16+
- $HOME/.cache/composer/files
17+
18+
matrix:
19+
fast_finish: true
20+
include:
21+
- php: 7.2
22+
addons:
23+
apt:
24+
packages:
25+
- libxml2-utils
26+
- php: 5.4
27+
28+
before_install:
29+
# Speed up build time by disabling Xdebug when its not needed.
30+
- if [[ $COVERALLS_VERSION == "notset" ]]; then phpenv config-rm xdebug.ini || echo 'No xdebug config.'; fi
31+
- export XMLLINT_INDENT=" "
32+
- composer install
33+
34+
script:
35+
- |
36+
if [[ $TRAVIS_PHP_VERSION == "7.2" ]]; then
37+
# Validate the xml file.
38+
# @link http://xmlsoft.org/xmllint.html
39+
xmllint --noout ./PHPCompatibilityWP/ruleset.xml
40+
41+
# Check the code-style consistency of the xml file.
42+
diff -B ./PHPCompatibilityWP/ruleset.xml <(xmllint --format "./PHPCompatibilityWP/ruleset.xml")
43+
fi
44+
45+
# Validate the composer.json file.
46+
# @link https://getcomposer.org/doc/03-cli.md#validate
47+
- composer validate --no-check-all --with-dependencies --strict

PHPCompatibilityWP/ruleset.xml

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
<?xml version="1.0"?>
2+
<ruleset name="PHPCompatibilityWP">
3+
<description>WordPress specific ruleset which checks for PHP cross version compatibility.</description>
4+
5+
<!--
6+
The WordPress minimum PHP requirement is PHP 5.2.4.
7+
Add the following in your project PHPCS ruleset to enforce this:
8+
<config name="testVersion" value="5.2-"/>
9+
10+
This directive is not included in this ruleset as individual projects may use
11+
a different (higher) minimum PHP version.
12+
-->
13+
14+
<rule ref="PHPCompatibility">
15+
<!-- Contained in /wp-includes/compat.php. -->
16+
<exclude name="PHPCompatibility.PHP.NewFunctions.hash_hmacFound"/>
17+
<exclude name="PHPCompatibility.PHP.NewFunctions.json_encodeFound"/>
18+
<exclude name="PHPCompatibility.PHP.NewFunctions.json_decodeFound"/>
19+
<exclude name="PHPCompatibility.PHP.NewFunctions.hash_equalsFound"/>
20+
<exclude name="PHPCompatibility.PHP.NewConstants.json_pretty_printFound"/>
21+
<exclude name="PHPCompatibility.PHP.NewFunctions.json_last_error_msgFound"/>
22+
<exclude name="PHPCompatibility.PHP.NewInterfaces.jsonserializableFound"/>
23+
<exclude name="PHPCompatibility.PHP.NewFunctions.array_replace_recursiveFound"/>
24+
<exclude name="PHPCompatibility.PHP.NewFunctions.is_iterableFound"/>
25+
<exclude name="PHPCompatibility.PHP.NewFunctions.is_countableFound"/>
26+
27+
<!-- Contained in /wp-includes/spl-autoload-compat.php. -->
28+
<exclude name="PHPCompatibility.PHP.NewFunctions.spl_autoload_registerFound"/>
29+
<exclude name="PHPCompatibility.PHP.NewFunctions.spl_autoload_unregisterFound"/>
30+
<exclude name="PHPCompatibility.PHP.NewFunctions.spl_autoload_functionsFound"/>
31+
32+
<!-- Contained in /wp-includes/random_compat/random.php. -->
33+
<exclude name="PHPCompatibility.PHP.NewConstants.php_version_idFound"/>
34+
35+
<!-- Contained in /wp-includes/random_compat/*.php (various files). -->
36+
<exclude name="PHPCompatibility.PHP.NewFunctions.random_bytesFound"/>
37+
38+
<!-- Contained in /wp-includes/random_compat/random_int.php. -->
39+
<exclude name="PHPCompatibility.PHP.NewFunctions.random_intFound"/>
40+
41+
<!-- Contained in /wp-includes/random_compat/error_polyfill.php. -->
42+
<exclude name="PHPCompatibility.PHP.NewClasses.errorFound"/>
43+
<exclude name="PHPCompatibility.PHP.NewClasses.typeerrorFound"/>
44+
</rule>
45+
46+
<!-- Whitelist the WP Core mysql_to_rfc3339() function. -->
47+
<rule ref="PHPCompatibility.PHP.RemovedExtensions">
48+
<properties>
49+
<!-- Contained in /wp-includes/functions.php. -->
50+
<property name="functionWhitelist" type="array" value="mysql_to_rfc3339"/>
51+
</properties>
52+
</rule>
53+
54+
</ruleset>

README.md

Lines changed: 97 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,98 @@
1+
[![Latest Stable Version](https://poser.pugx.org/PHPCompatibility/phpcompatibility-wp/v/stable.png)](https://packagist.org/packages/PHPCompatibility/phpcompatibility-wp)
2+
[![Latest Unstable Version](https://poser.pugx.org/PHPCompatibility/phpcompatibility-wp/v/unstable.png)](https://packagist.org/packages/PHPCompatibility/phpcompatibility-wp)
3+
[![License](https://poser.pugx.org/PHPCompatibility/phpcompatibility-wp/license.png)](https://github.com/PHPCompatibility/PHPCompatibilityWP/blob/master/LICENSE)
4+
[![Build Status](https://travis-ci.org/PHPCompatibility/PHPCompatibilityWP.png?branch=master)](https://travis-ci.org/PHPCompatibility/PHPCompatibilityWP)
5+
16
# PHPCompatibilityWP
2-
PHPCompatibility ruleset for WordPress projects
7+
8+
Using the PHPCompatibilityWP standard, you can analyse the codebase of a WordPress-based project for PHP cross-version compatibility.
9+
10+
11+
## What's in this repo ?
12+
13+
A PHPCompatibility ruleset for projects based on the WordPress CMS.
14+
15+
This WordPress specific ruleset prevents false positives from the [PHPCompatibility standard](https://github.com/PHPCompatibility/PHPCompatibility) by excluding back-fills and poly-fills which are provided by WordPress.
16+
17+
18+
## Requirements
19+
20+
* [PHP_CodeSniffer](https://github.com/squizlabs/PHP_CodeSniffer).
21+
* PHP 5.3+ for use with [PHP_CodeSniffer](https://github.com/squizlabs/PHP_CodeSniffer) 2.3.0+.
22+
* PHP 5.4+ for use with [PHP_CodeSniffer](https://github.com/squizlabs/PHP_CodeSniffer) 3.0.2+.
23+
24+
Use the latest stable release of PHP_CodeSniffer for the best results.
25+
The minimum _recommended_ version of PHP_CodeSniffer is PHPCS 2.6.0.
26+
* [PHPCompatibility](https://github.com/PHPCompatibility/PHPCompatibility).
27+
28+
29+
## Installation instructions
30+
31+
### Installation instructions using Composer
32+
33+
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:
34+
```bash
35+
composer require --dev dealerdirect/phpcodesniffer-composer-installer:^0.4.3 phpcompatibility/phpcompatibility-wp:*
36+
composer install
37+
```
38+
39+
If you already have a Composer PHPCS plugin installed, run:
40+
```bash
41+
composer require --dev phpcompatibility/phpcompatibility-wp:*
42+
composer install
43+
```
44+
45+
Next, run:
46+
```bash
47+
vendor/bin/phpcs -i
48+
```
49+
If all went well, you will now see that the PHPCompatibility and PHPCompatibilityWP standards are installed for PHP_CodeSniffer.
50+
51+
### Installation instructions without Composer (unsupported)
52+
53+
* Install [PHP CodeSniffer](https://github.com/squizlabs/PHP_CodeSniffer) via [your preferred method](https://github.com/squizlabs/PHP_CodeSniffer#installation).
54+
55+
PHP CodeSniffer offers a variety of installation methods to suit your work-flow: Composer, [PEAR](http://pear.php.net/PHP_CodeSniffer), a Phar file, zipped/tarred release archives or checking the repository out using Git.
56+
57+
* Install [PHPCompatibility](https://github.com/PHPCompatibility/PHPCompatibility) by [cloning the PHPCompatibility repository](https://github.com/PHPCompatibility/PHPCompatibility#installation-via-a-git-check-out-to-an-arbitrary-directory-method-2).
58+
59+
* Install [PHPCompatibilityWP](https://github.com/PHPCompatibility/PHPCompatibilityWP) by cloning this repository.
60+
61+
* Add the paths to the directories in which you placed your copies of the PHPCompatibility repo and the PHPCompatibilityWP repo to the PHP CodeSniffer configuration using the below command from the command line:
62+
```bash
63+
phpcs --config-set installed_paths /path/to/PHPCompatibility,/path/to/PHPCompatibilityWP
64+
```
65+
For more information, see the PHP CodeSniffer wiki on the [`installed_paths` configuration variable](https://github.com/squizlabs/PHP_CodeSniffer/wiki/Configuration-Options#setting-the-installed-standard-paths).
66+
67+
* Verify that the PHPCompatibility standard is registered correctly by running `phpcs -i` on the command line. PHPCompatibility should be listed as one of the available standards.
68+
69+
70+
## How to use
71+
72+
Now you can use the following command to inspect your code:
73+
```bash
74+
./vendor/bin/phpcs -p . --standard=PHPCompatibilityWP
75+
76+
# Or if you installed without using Composer:
77+
phpcs -p . --standard=PHPCompatibilityWP
78+
```
79+
80+
By default, you will only receive notifications about deprecated and/or removed PHP features.
81+
82+
To get the most out of the PHPCompatibilityWP standard, you should specify a `testVersion` to check against. That will enable the checks for both deprecated/removed PHP features as well as the detection of code using new PHP features.
83+
84+
The minimum PHP requirement of the WordPress project at this time is PHP 5.2.4. If you want to enforce this, either add `--runtime-set testVersion 5.2-` to your command-line command or add `<config name="testVersion" value="5.2-"/>` to your [custom ruleset](https://github.com/PHPCompatibility/PHPCompatibility#using-a-custom-ruleset).
85+
86+
For more detailed information about setting the `testVersion`, see the README of the generic [PHPCompatibility](https://github.com/PHPCompatibility/PHPCompatibility#sniffing-your-code-for-compatibility-with-specific-php-versions) standard.
87+
88+
89+
## License
90+
91+
All code within the PHPCompatibility organisation is released under the GNU Lesser General Public License (LGPL). For more information, visit https://www.gnu.org/copyleft/lesser.html
92+
93+
94+
## Changelog
95+
96+
### 1.0.0 - 2018-07-17
97+
98+
Initial release of the PHPCompatibilityWP ruleset.

composer.json

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
{
2+
"name" : "phpcompatibility/phpcompatibility-wp",
3+
"description" : "A set of sniffs for PHP_CodeSniffer that checks for PHP version compatibility for WordPress projects.",
4+
"type" : "phpcodesniffer-standard",
5+
"keywords" : [ "compatibility", "phpcs", "standards", "wordpress" ],
6+
"homepage" : "http://phpcompatibility.com/",
7+
"license" : "LGPL-3.0-or-later",
8+
"authors" : [ {
9+
"name" : "Wim Godden",
10+
"role" : "lead"
11+
},
12+
{
13+
"name" : "Juliette Reinders Folmer",
14+
"role" : "lead"
15+
} ],
16+
"support" : {
17+
"issues" : "https://github.com/PHPCompatibility/PHPCompatibilityWP/issues",
18+
"source" : "https://github.com/PHPCompatibility/PHPCompatibilityWP"
19+
},
20+
"require" : {
21+
"phpcompatibility/php-compatibility" : "*"
22+
},
23+
"suggest" : {
24+
"dealerdirect/phpcodesniffer-composer-installer": "^0.4.3 || This Composer plugin will sort out the PHPCS 'installed_paths' automatically.",
25+
"roave/security-advisories": "dev-master || Helps prevent installing dependencies with known security issues."
26+
},
27+
"prefer-stable" : true
28+
}

0 commit comments

Comments
 (0)