Using the TYPO3 Coding Standard

In general

The coding standards

The TYPO3 Coding Standard consists of the sniff pool and the special standard (e.g. TYPO3v4 or FLOW3). The folder TYPO3 contains the sniff pool. This is the home of all sniffs which we (re)implemented for our Coding Guidelines. This are all the shiny sniffs for the TYPO3v4 and the FLOW3 CGL.

The folder TYPO3v4 contains no sniffs but a ruleset.xml file. In this file we refer to the needed sniffs for the specified standard. So we take some shipped sniffs from PHP_CodeSniffer and our own ones from TYPO3 folder.

In both folders there are also package.xml files. This are the definition files for building PEAR packages from.

Structure:

|- CodingStandardName
   |- Sniffs
   |- Tests
   |- Builds
      |- PEAR-Package-Majorversion.Minorversion.Serviceversion.tgz
   |- ruleset.xml
   |- package.xml

Example:

|- TYPO3
|  |- Sniffs
|  |  |- Classes
|  |  |  |- LowercaseClassKeywordsSniff.php
|  |  |  |- ...
|  |  |- Commenting
|  |  |- ...
|  |- Tests
|  |  |- Classes
|  |  |- ... 
|  |- Builds
|  |  |- PHPCS_TYPO3_SniffPool-0.0.3.tgz
|  |- ruleset.xml
|  |- package.xml
|- TYPO3v4
    |- Builds
    |  |- PHPCS_TYPO3v4_Standard-0.0.3.tgz   
    |- ruleset.xml
    |- package.xml     

Use the Codesniffer

For users

The easiest way to install the TYPO3 Coding Standard is via PEAR. We assume PEAR is installed on your machine (Otherwise read the manual at http://pear.php.net/).

Go to http://pear.typo3.org and follow the instructions there. The package know his dependencies very well, so you will be ask to install the mentioned PEAR packages if they are not installed yet.

Note: Its very important to install the PHP_CoderSniffer >= version 1.3.0RC1.

With "phpcs -i" you could verify if the standards are installed.

phpcs -i
The installed coding standards are MySource, PEAR, PHPCS, Squiz, TYPO3, TYPO3v4 and Zend

For developer / contributer

If you are a user who want to develop / contribute / play around with the full copy of our development cycle, you need to check out the trunk of PHP_CoderSniffer:

svn co http://svn.php.net/repository/pear/packages/PHP_CodeSniffer/trunk/ PHP_CodeSniffer/CodeSniffer

After this you need to clone our complete repository:

git clone git://git.typo3.org/Teams/forge.typo3.org/hudson-helpers/tools/PHP_CodeSniffer.git PHP_CodeSniffer/TYPO3_CGL_Standard

Now you must symlink the coding standards into the PHP_CodeSniffer checkout.

For example:
  • Checkout-Path for PHP_CodeSniffer: /Users/Your/Path/Development/PHP_CodeSniffer/CodeSniffer
  • Checkout-Path for TYPO3 Standards: /Users/Your/Path/Development/PHP_CodeSniffer/TYPO3_CGL_Standard

The folder structure looks now like this:

|- Development
  |- PHP_CodeSniffer
  |  |- CodeSniffer
  |     |- .svn
  |     |- CodeSniffer
  |     |- scripts
  |     |- tests
  |     |- CodeSniffer.php
  |     |- CodeSniffer.sample.conf
  |     |- LICENCE
  |     |- package.xml
  |-TYPO3_CGL_Standard
     |- .git
     |- TYPO3
     |  |- Sniffs
     |  |  |- Classes
     |  |  |  |- LowercaseClassKeywordsSniff.php
     |  |  |  |- ...
     |  |  |- Commenting
     |  |  |- ...
     |  |- Tests
     |  |  |- Classes
     |  |  |- ... 
     |  |- Builds
     |  |  |- PHPCS_TYPO3_SniffPool-0.0.3.tgz
     |  |- ruleset.xml
     |  |- package.xml
     |- TYPO3v4
         |- Builds
         |  |- PHPCS_TYPO3v4_Standard-0.0.3.tgz   
         |- ruleset.xml
         |- package.xml

According to the folder structure above, you have to symlink the standards:

ln -s /Users/Your/Path/Development/PHP_CodeSniffer/TYPO3_CGL_Standard/TYPO3 /Users/Your/Path/Development/PHP_CodeSniffer/CodeSniffer/Standards/TYPO3 
ln -s /Users/Your/Path/Development/PHP_CodeSniffer/TYPO3_CGL_Standard/TYPO3v4 /Users/Your/Path/Development/PHP_CodeSniffer/CodeSniffer/Standards/TYPO3v4 

With "php Users/Your/Path/Development/PHP_CodeSniffer/scripts/phpcs -i" you could verify if the standards are installed.

php Users/Your/Path/Development/PHP_CodeSniffer/scripts/phpcs -i
The installed coding standards are MySource, PEAR, PHPCS, Squiz, TYPO3, TYPO3v4 and Zend

To run the unit tests you must fire the following command (PHPUnit must be installed!):

phpunit Users/Your/Path/Development/CodeSniffer/tests/AllTests.php

Providing patches

Since we are on git and gerrit you could push your patches right ahead into gerrit. So its easier for us to review / annotate / merge your patch.

For more informations about git and gerrit please read the informations on behind the following links carefully.

Git and Gerrit Quickstart Guide
Working with Gerrit as a Developer

According to our branching model we push every change into "develop" branch. So when pushing you have to type this command into your terminal:

git push ssh://review.typo3.org/forge.typo3.org/hudson-helpers/tools/PHP_CodeSniffer.git HEAD:refs/for/develop

Note 1: The name of you local branch doesn't matter - you push allways into develop
Note 2: Pushes to other branches will be refused!