aboutsummaryrefslogtreecommitdiffstats
path: root/build/code_sniffer/phpbb/Sniffs
diff options
context:
space:
mode:
authorTristan Darricau <github@nicofuma.fr>2014-06-20 15:02:08 +0200
committerTristan Darricau <github@nicofuma.fr>2014-06-22 00:45:34 +0200
commit32a2c95f903cbbfad909945887a1cbabd84d5039 (patch)
treecff91ac814a5e4c4fa88586ffecbc7e5687d41f1 /build/code_sniffer/phpbb/Sniffs
parent70d4ede9b204ba9d2c3e1ae14258cd8c879db403 (diff)
downloadforums-32a2c95f903cbbfad909945887a1cbabd84d5039.tar
forums-32a2c95f903cbbfad909945887a1cbabd84d5039.tar.gz
forums-32a2c95f903cbbfad909945887a1cbabd84d5039.tar.bz2
forums-32a2c95f903cbbfad909945887a1cbabd84d5039.tar.xz
forums-32a2c95f903cbbfad909945887a1cbabd84d5039.zip
[ticket/12723] Add Sniff ensuring PHP files use the correct file header
PHPBB3-12723
Diffstat (limited to 'build/code_sniffer/phpbb/Sniffs')
-rw-r--r--build/code_sniffer/phpbb/Sniffs/Commenting/FileCommentSniff.php222
1 files changed, 116 insertions, 106 deletions
diff --git a/build/code_sniffer/phpbb/Sniffs/Commenting/FileCommentSniff.php b/build/code_sniffer/phpbb/Sniffs/Commenting/FileCommentSniff.php
index fcf53b5061..1f64467d00 100644
--- a/build/code_sniffer/phpbb/Sniffs/Commenting/FileCommentSniff.php
+++ b/build/code_sniffer/phpbb/Sniffs/Commenting/FileCommentSniff.php
@@ -13,7 +13,7 @@
/**
* Checks that each source file contains the standard header.
-*
+*
* Based on Coding Guidelines 1.ii File Header.
*
* @package code_sniffer
@@ -47,10 +47,10 @@ class phpbb_Sniffs_Commenting_FileCommentSniff implements PHP_CodeSniffer_Sniff
{
if ($phpcsFile->findPrevious(T_OPEN_TAG, $stackPtr - 1) !== false)
{
- return;
+ return;
}
}
-
+
// Fetch next non whitespace token
$tokens = $phpcsFile->getTokens();
$start = $phpcsFile->findNext(T_WHITESPACE, $stackPtr + 1, null, true);
@@ -66,65 +66,68 @@ class phpbb_Sniffs_Commenting_FileCommentSniff implements PHP_CodeSniffer_Sniff
$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)
+ for ($i = $start + 1, $c = $end - 1; $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.';
+ $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);
+ if (!isset($tags[$match[1]]))
+ {
+ $tags[$match[1]] = array();
+ }
+
+ $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);
+ $phpcsFile->addWarning($message, ($start + 1));
+ }
+ if (trim($tokens[$end - 1]['content']) !== '*')
+ {
+ $message = 'The last file comment line should be empty.';
+ $phpcsFile->addWarning($message, $end - 1);
+ }
+
+ //$this->processPackage($phpcsFile, $start, $tags);
+ //$this->processVersion($phpcsFile, $start, $tags);
+ $this->processCopyright($phpcsFile, $start, $tags);
+ $this->processLicense($phpcsFile, $start, $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
- */
+ * 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']))
@@ -134,80 +137,87 @@ class phpbb_Sniffs_Commenting_FileCommentSniff implements PHP_CodeSniffer_Sniff
}
else if (preg_match('/^([\w]+)$/', $tags['package'][0]) === 0)
{
- $message = 'Invalid content found for @package tag.';
- $phpcsFile->addWarning($message, $tags['package'][1]);
+ $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
- */
+ * 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-2.0.php GNU General Public License v2';
-
- 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]);
- }
- }
+ {
+ 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)
+ {
+ $copyright = '(c) phpBB Limited <https://www.phpbb.com>';
+
+ if (!isset($tags['copyright']))
+ {
+ $message = 'Missing require @copyright tag in file doc comment.';
+ $phpcsFile->addError($message, $ptr);
+ }
+ else if ($tags['copyright'][0][0] !== $copyright)
+ {
+ $message = 'Invalid content found for the first @copyright tag, use "' . $copyright . '".';
+ $phpcsFile->addError($message, $tags['copyright'][0][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 = 'GNU General Public License, version 2 (GPL-2.0)';
+
+ if (!isset($tags['license']))
+ {
+ $message = 'Missing require @license tag in file doc comment.';
+ $phpcsFile->addError($message, $ptr);
+ }
+ else if (sizeof($tags['license']) !== 1)
+ {
+ $message = 'It must be only one @license tag in file doc comment.';
+ $phpcsFile->addError($message, $ptr);
+ }
+ else if (trim($tags['license'][0][0]) !== $license)
+ {
+ $message = 'Invalid content found for @license tag, use '
+ . '"' . $license . '".';
+ $phpcsFile->addError($message, $tags['license'][0][1]);
+ }
+ }
}