diff options
Diffstat (limited to 'build/code_sniffer')
| -rw-r--r-- | build/code_sniffer/phpbb/Sniffs/Commenting/FileCommentSniff.php | 210 | ||||
| -rw-r--r-- | build/code_sniffer/phpbb/Tests/Commenting/FileCommentUnitTest.inc | 19 | ||||
| -rw-r--r-- | build/code_sniffer/phpbb/Tests/Commenting/FileCommentUnitTest.php | 51 | ||||
| -rw-r--r-- | build/code_sniffer/phpbb/build.xml | 23 | ||||
| -rw-r--r-- | build/code_sniffer/phpbb/phpbbCodingStandard.php | 43 | ||||
| -rw-r--r-- | build/code_sniffer/ruleset-minimum.xml | 12 | ||||
| -rw-r--r-- | build/code_sniffer/ruleset-php-legacy.xml | 25 | ||||
| -rw-r--r-- | build/code_sniffer/ruleset-php-strict.xml | 42 | 
8 files changed, 425 insertions, 0 deletions
| diff --git a/build/code_sniffer/phpbb/Sniffs/Commenting/FileCommentSniff.php b/build/code_sniffer/phpbb/Sniffs/Commenting/FileCommentSniff.php new file mode 100644 index 0000000000..68e9e6bb86 --- /dev/null +++ b/build/code_sniffer/phpbb/Sniffs/Commenting/FileCommentSniff.php @@ -0,0 +1,210 @@ +<?php +/**  +* +* @package code_sniffer +* @version $Id: $ +* @copyright (c) 2007 phpBB Group  +* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2  +* +*/ + +/** +* Checks that each source file contains the standard header. +*  +* Based on Coding Guidelines 1.ii File Header. +* +* @package code_sniffer +* @author Manuel Pichler <mapi@phpundercontrol.org> +*/ +class phpbb_Sniffs_Commenting_FileCommentSniff implements PHP_CodeSniffer_Sniff +{ +	/** +	* Returns an array of tokens this test wants to listen for. +	* +	* @return array +	*/ +	public function register() +	{ +		return array(T_OPEN_TAG); +	} + +	/** +	* Processes this test, when one of its tokens is encountered. +	* +	* @param PHP_CodeSniffer_File $phpcsFile The file being scanned. +	* @param int				  $stackPtr  The position of the current token +	*										in the stack passed in $tokens. +	* +	* @return null +	*/ +	public function process(PHP_CodeSniffer_File $phpcsFile, $stackPtr) +	{ +		// We are only interested in the first file comment. +		if ($stackPtr !== 0) +		{ +			if ($phpcsFile->findPrevious(T_OPEN_TAG, $stackPtr - 1) !== false) +			{ +                return; +			} +		} +		 +		// Fetch next non whitespace token +		$tokens = $phpcsFile->getTokens(); +		$start  = $phpcsFile->findNext(T_WHITESPACE, $stackPtr + 1, null, true); + +		// Skip empty files +		if ($tokens[$start]['code'] === T_CLOSE_TAG) +		{ +			return; +		} +		// Mark as error if this is not a doc comment +		else if ($start === false || $tokens[$start]['code'] !== T_DOC_COMMENT) +		{ +			$phpcsFile->addError('Missing required file doc comment.', $stackPtr); +			return; +		} +		 +		// Find comment end token +		$end = $phpcsFile->findNext(T_DOC_COMMENT, $start + 1, null, true) - 1; +		 +		// If there is no end, skip processing here +		if ($end === false) +		{ +			return; +		} +		 +		// List of found comment tags +		$tags = array(); +		 +		// check comment lines without the first(/**) an last(*/) line +		for ($i = $start + 1, $c = ($end - $start); $i <= $c; ++$i) +		{ +			$line = $tokens[$i]['content']; + +			// Check that each line starts with a '*' +			if (substr($line, 0, 1) !== '*') +			{ +                $message = 'The file doc comment should not be idented.'; +				$phpcsFile->addWarning($message, $i); +			} +			else if (preg_match('/^\*\s+@([\w]+)\s+(.*)$/', $line, $match) !== 0) +			{ +				$tags[$match[1]] = array($match[2], $i); +			} +		} +		 +		// Check that the first and last line is empty +		if (trim($tokens[$start + 1]['content']) !== '*') +		{ +			$message = 'The first file comment line should be empty.'; +            $phpcsFile->addWarning($message, ($start + 1));			 +		} +        if (trim($tokens[$end - $start]['content']) !== '*') +        { +        	$message = 'The last file comment line should be empty.'; +            $phpcsFile->addWarning($message, ($end - $start));          +        } +         +        $this->processPackage($phpcsFile, $start, $tags); +        $this->processVersion($phpcsFile, $start, $tags); +        $this->processCopyright($phpcsFile, $start, $tags); +        $this->processLicense($phpcsFile, $start, $tags); +		 +        //print_r($tags); +	} +	 +	/** +	 * Checks that the tags array contains a valid package tag +	 * +	 * @param PHP_CodeSniffer_File $phpcsFile The context source file instance. +	 * @param integer The stack pointer for the first comment token. +	 * @param array(string=>array) $tags The found file doc comment tags. +	 *  +	 * @return null +	 */ +	protected function processPackage(PHP_CodeSniffer_File $phpcsFile, $ptr, $tags) +	{ +		if (!isset($tags['package'])) +		{ +			$message = 'Missing require @package tag in file doc comment.'; +			$phpcsFile->addError($message, $ptr); +		} +		else if (preg_match('/^([\w]+)$/', $tags['package'][0]) === 0) +		{ +            $message = 'Invalid content found for @package tag.'; +            $phpcsFile->addWarning($message, $tags['package'][1]);			 +		} +	} +	 +	/** +     * Checks that the tags array contains a valid version tag +     * +     * @param PHP_CodeSniffer_File $phpcsFile The context source file instance. +     * @param integer The stack pointer for the first comment token. +     * @param array(string=>array) $tags The found file doc comment tags. +     *  +     * @return null +	 */ +	protected function processVersion(PHP_CodeSniffer_File $phpcsFile, $ptr, $tags) +    { +        if (!isset($tags['version'])) +        { +            $message = 'Missing require @version tag in file doc comment.'; +            $phpcsFile->addError($message, $ptr); +        } +        else if (preg_match('/^\$Id:[^\$]+\$$/', $tags['version'][0]) === 0) +        { +            $message = 'Invalid content found for @version tag, use "$Id: $".'; +            $phpcsFile->addError($message, $tags['version'][1]);             +        } +    } +     +    /** +     * Checks that the tags array contains a valid copyright tag +     * +     * @param PHP_CodeSniffer_File $phpcsFile The context source file instance. +     * @param integer The stack pointer for the first comment token. +     * @param array(string=>array) $tags The found file doc comment tags. +     *  +     * @return null +     */ +    protected function processCopyright(PHP_CodeSniffer_File $phpcsFile, $ptr, $tags) +    { +        if (!isset($tags['copyright'])) +        { +            $message = 'Missing require @copyright tag in file doc comment.'; +            $phpcsFile->addError($message, $ptr); +        } +        else if (preg_match('/^\(c\) 2[0-9]{3} phpBB Group\s*$/', $tags['copyright'][0]) === 0) +        { +            $message = 'Invalid content found for @copyright tag, use "(c) <year> phpBB Group".'; +            $phpcsFile->addError($message, $tags['copyright'][1]);             +        } +    } +     +    /** +     * Checks that the tags array contains a valid license tag +     * +     * @param PHP_CodeSniffer_File $phpcsFile The context source file instance. +     * @param integer The stack pointer for the first comment token. +     * @param array(string=>array) $tags The found file doc comment tags. +     *  +     * @return null +     */ +    protected function processLicense(PHP_CodeSniffer_File $phpcsFile, $ptr, $tags) +    { +    	$license = 'http://opensource.org/licenses/gpl-license.php GNU Public License'; +    	 +        if (!isset($tags['license'])) +        { +            $message = 'Missing require @license tag in file doc comment.'; +            $phpcsFile->addError($message, $ptr); +        } +        else if (trim($tags['license'][0]) !== $license) +        { +            $message = 'Invalid content found for @license tag, use '  +                     . '"' . $license . '".'; +            $phpcsFile->addError($message, $tags['license'][1]);             +        } +    } +} diff --git a/build/code_sniffer/phpbb/Tests/Commenting/FileCommentUnitTest.inc b/build/code_sniffer/phpbb/Tests/Commenting/FileCommentUnitTest.inc new file mode 100644 index 0000000000..0ace1c1bda --- /dev/null +++ b/build/code_sniffer/phpbb/Tests/Commenting/FileCommentUnitTest.inc @@ -0,0 +1,19 @@ +<?php +/**  +* +* @package code_sniffer³ +* @version $Id: $ +* @copyright (c) 2008 phpBB Group  +* @license http://opensource.org/licenses/gpl-license.php BSD License + * +*/ +?> +<?php +/**  +* Broken but not first file doc comment. +*  +* @version @package_version@ +* @license   http://www.opensource.org/licenses/bsd-license.php  BSD License +* @copyright (c) 2007 phpBB Group   +* +*/ diff --git a/build/code_sniffer/phpbb/Tests/Commenting/FileCommentUnitTest.php b/build/code_sniffer/phpbb/Tests/Commenting/FileCommentUnitTest.php new file mode 100644 index 0000000000..affa27b56c --- /dev/null +++ b/build/code_sniffer/phpbb/Tests/Commenting/FileCommentUnitTest.php @@ -0,0 +1,51 @@ +<?php +/**  +* +* @package code_sniffer +* @version $Id: $ +* @copyright (c) 2007 phpBB Group  +* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2  +* +*/ + +/** +* Unit test class for the EmptyStatement sniff. +* +* @package code_sniffer +* @author Manuel Pichler <mapi@phpundercontrol.org> +*/ +class phpbb_Tests_Commenting_FileCommentUnitTest extends AbstractSniffUnitTest +{ +	 +	/** +	* Returns the lines where errors should occur. +	* +	* The key of the array should represent the line number and the value +	* should represent the number of errors that should occur on that line. +	* +	* @return array(int => int) +	*/ +	public function getErrorList() +	{ +		return array( +            7  =>  1 // BSD License error :) +		); +	}//end getErrorList() + + +	/** +	* Returns the lines where warnings should occur. +	* +	* The key of the array should represent the line number and the value +	* should represent the number of warnings that should occur on that line. +	* +	* @return array(int => int) +	*/ +	public function getWarningList() +	{ +		return array( +		    4  =>  1, +            8  =>  1 +        ); +	}//end getWarningList() +} diff --git a/build/code_sniffer/phpbb/build.xml b/build/code_sniffer/phpbb/build.xml new file mode 100644 index 0000000000..b6d3bf6451 --- /dev/null +++ b/build/code_sniffer/phpbb/build.xml @@ -0,0 +1,23 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project name="code_sniffer" basedir="." default="install"> + +  <property name="working.dir" value="${basedir}" /> +  <property name="target.dir" value="/usr/share/php/PHP/CodeSniffer/Standards" /> + +  <!-- +  Install phpbb sniff +  --> +  <target name="install"> +    <delete dir="${target.dir}/phpbb" /> +    <mkdir dir="${target.dir}/phpbb"/> + +    <copy todir="${target.dir}/phpbb"> +	<fileset file="${working.dir}/phpbbCodingStandard.php" /> +    </copy> +    <copy todir="${target.dir}/phpbb/Sniffs"> +	<fileset dir="${working.dir}/Sniffs" /> +    </copy> + +  </target> + +</project> diff --git a/build/code_sniffer/phpbb/phpbbCodingStandard.php b/build/code_sniffer/phpbb/phpbbCodingStandard.php new file mode 100644 index 0000000000..adbba9d915 --- /dev/null +++ b/build/code_sniffer/phpbb/phpbbCodingStandard.php @@ -0,0 +1,43 @@ +<?php +/**  +* +* @package code_sniffer +* @version $Id: $ +* @copyright (c) 2007 phpBB Group  +* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2  +* +*/ + +/** + * @ignore + */ +if (class_exists('PHP_CodeSniffer_Standards_CodingStandard', true) === false) { +    throw new PHP_CodeSniffer_Exception( +        'Class PHP_CodeSniffer_Standards_CodingStandard not found' +    ); +} + +/** + * Primary class for the phpbb coding standard. + * + * @package code_sniffer + */ +class PHP_CodeSniffer_Standards_phpbb_phpbbCodingStandard extends PHP_CodeSniffer_Standards_CodingStandard +{ +	/** +    * Return a list of external sniffs to include with this standard. +    * +    * External locations can be single sniffs, a whole directory of sniffs, or +    * an entire coding standard. Locations start with the standard name. For +    * example: +    *  PEAR                              => include all sniffs in this standard +    *  PEAR/Sniffs/Files                 => include all sniffs in this dir +    *  PEAR/Sniffs/Files/LineLengthSniff => include this single sniff +    * +    * @return array +    */ +    public function getIncludedSniffs() +    { +        return array(); +    } +} diff --git a/build/code_sniffer/ruleset-minimum.xml b/build/code_sniffer/ruleset-minimum.xml new file mode 100644 index 0000000000..2de1fb4be4 --- /dev/null +++ b/build/code_sniffer/ruleset-minimum.xml @@ -0,0 +1,12 @@ +<?xml version="1.0"?> +<ruleset name="phpBB Minimum Standard"> + + <description>phpBB minimum coding standard</description> + + <!-- All code files MUST use only UTF-8 without BOM. --> + <rule ref="Generic.Files.ByteOrderMark" /> + + <!-- All code files MUST use the Unix LF (linefeed) line ending. --> + <rule ref="Generic.Files.LineEndings" /> + +</ruleset> diff --git a/build/code_sniffer/ruleset-php-legacy.xml b/build/code_sniffer/ruleset-php-legacy.xml new file mode 100644 index 0000000000..ebc85c4fef --- /dev/null +++ b/build/code_sniffer/ruleset-php-legacy.xml @@ -0,0 +1,25 @@ +<?xml version="1.0"?> +<ruleset name="phpBB PHP Legacy Standard"> + + <description>phpBB legacy coding standard for PHP files</description> + + <rule ref="./ruleset-minimum.xml" /> + + <!-- The body of each structure MUST be enclosed by braces. --> + <rule ref="Generic.ControlStructures.InlineControlStructure" /> +  + <!-- All PHP files MUST end with a single blank line. --> +  + <!-- Class constants MUST be declared in all upper case with underscore separators. --> + <rule ref="Generic.NamingConventions.UpperCaseConstantName" /> + + <!-- Only <?php, no short tags. --> + <rule ref="Generic.PHP.DisallowShortOpenTag.EchoFound" /> + + <!-- Method arguments with default values MUST go at the end of the argument list. --> + <rule ref="PEAR.Functions.ValidDefaultValue" /> + + <!-- The ?> closing tag MUST be omitted from files containing only PHP. --> + <rule ref="Zend.Files.ClosingTag" /> + +</ruleset> diff --git a/build/code_sniffer/ruleset-php-strict.xml b/build/code_sniffer/ruleset-php-strict.xml new file mode 100644 index 0000000000..8580090c69 --- /dev/null +++ b/build/code_sniffer/ruleset-php-strict.xml @@ -0,0 +1,42 @@ +<?xml version="1.0"?> +<ruleset name="phpBB PHP Strict Standard"> + + <description>phpBB coding standard for PHP files</description> + + <rule ref="./ruleset-php-legacy.xml" /> + + <!-- There SHOULD NOT be more than 80 characters per line +      There MUST NOT be more than 120 characters per line --> + <!-- + <rule ref="Generic.Files.LineLength"> +  <properties> +   <property name="lineLimit" value="80"/> +   <property name="absoluteLineLimit" value="120"/> +  </properties> + </rule> + --> + + <!-- The PHP constants true, false, and null MUST be in lower case. --> + <rule ref="Generic.PHP.LowerCaseConstant" /> + + <!-- PHP keywords MUST be in lower case. --> + <rule ref="Generic.PHP.LowerCaseKeyword" /> + + <!-- There MUST NOT be trailing whitespace at the end of lines. --> + <rule ref="Squiz.WhiteSpace.SuperfluousWhitespace" /> +  + <!-- There MUST NOT be whitespace before the first content of a file --> + <rule ref="Squiz.WhiteSpace.SuperfluousWhitespace.StartFile" /> + + <!-- There MUST NOT be whitespace after the last content of a file --> + <rule ref="Squiz.WhiteSpace.SuperfluousWhitespace.EndFile" /> +  + <!-- Functions MUST NOT contain multiple empty lines in a row --> + <rule ref="Squiz.WhiteSpace.SuperfluousWhitespace.EmptyLines" /> + + <!-- When present, all use declarations MUST go after the namespace declaration. +      There MUST be one use keyword per declaration. +      There MUST be one blank line after the use block. --> + <rule ref="PSR2.Namespaces.UseDeclaration" /> + +</ruleset> | 
