From 2178c7ada9e41c7aee7e328b0756622d0c81bcc5 Mon Sep 17 00:00:00 2001 From: nicolasconnault Date: Wed, 20 May 2009 14:09:26 +0000 Subject: [PATCH] MDL-19247 Added detection of blank lines before control structures, plus other tidbits. --- .../Standards/Moodle/MoodleCodingStandard.php | 8 +-- .../Sniffs/Classes/ClassDeclarationSniff.php | 41 +++++------ .../ControlStructureBlankLineSniff.php | 69 +++++++++++++++++++ 3 files changed, 87 insertions(+), 31 deletions(-) create mode 100644 lib/pear/PHP/CodeSniffer/Standards/Moodle/Sniffs/WhiteSpace/ControlStructureBlankLineSniff.php diff --git a/lib/pear/PHP/CodeSniffer/Standards/Moodle/MoodleCodingStandard.php b/lib/pear/PHP/CodeSniffer/Standards/Moodle/MoodleCodingStandard.php index bf264eb761..5bf062b8da 100644 --- a/lib/pear/PHP/CodeSniffer/Standards/Moodle/MoodleCodingStandard.php +++ b/lib/pear/PHP/CodeSniffer/Standards/Moodle/MoodleCodingStandard.php @@ -31,12 +31,8 @@ if (class_exists('PHP_CodeSniffer_Standards_CodingStandard', true) === false) { /** * Moodle Coding Standard. * - * @category PHP - * @package PHP_CodeSniffer - * @author Nicolas Connault - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - * @version Release: @package_version@ - * @link http://pear.php.net/package/PHP_CodeSniffer + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @version Release: @package_version@ */ class php_codesniffer_standards_moodle_moodlecodingstandard extends php_codesniffer_standards_codingstandard { /** diff --git a/lib/pear/PHP/CodeSniffer/Standards/Moodle/Sniffs/Classes/ClassDeclarationSniff.php b/lib/pear/PHP/CodeSniffer/Standards/Moodle/Sniffs/Classes/ClassDeclarationSniff.php index cca131a436..a6b68fb091 100644 --- a/lib/pear/PHP/CodeSniffer/Standards/Moodle/Sniffs/Classes/ClassDeclarationSniff.php +++ b/lib/pear/PHP/CodeSniffer/Standards/Moodle/Sniffs/Classes/ClassDeclarationSniff.php @@ -30,8 +30,7 @@ * @copyright 2009 Nicolas Connault * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ -class moodle_sniffs_classes_classdeclarationsniff implements php_codesniffer_sniff -{ +class moodle_sniffs_classes_classdeclarationsniff implements php_codesniffer_sniff { /** @@ -39,13 +38,8 @@ class moodle_sniffs_classes_classdeclarationsniff implements php_codesniffer_sni * * @return array */ - public function register() - { - return array( - T_CLASS, - T_INTERFACE, - ); - + public function register() { + return array(T_CLASS, T_INTERFACE); } @@ -58,8 +52,7 @@ class moodle_sniffs_classes_classdeclarationsniff implements php_codesniffer_sni * * @return void */ - public function process(PHP_CodeSniffer_File $phpcsfile, $stackptr) - { + public function process(PHP_CodeSniffer_File $phpcsfile, $stackptr) { $tokens = $phpcsfile->gettokens(); if (isset($tokens[$stackptr]['scope_opener']) === false) { @@ -70,33 +63,31 @@ class moodle_sniffs_classes_classdeclarationsniff implements php_codesniffer_sni return; } - $curlyBrace = $tokens[$stackptr]['scope_opener']; - $lastcontent = $phpcsfile->findPrevious(T_WHITESPACE, ($curlyBrace - 1), $stackptr, true); + $curlybrace = $tokens[$stackptr]['scope_opener']; + $lastcontent = $phpcsfile->findPrevious(T_WHITESPACE, ($curlybrace - 1), $stackptr, true); $classline = $tokens[$lastcontent]['line']; - $braceline = $tokens[$curlyBrace]['line']; + $braceline = $tokens[$curlybrace]['line']; + if ($braceline != $classline) { $error = 'Opening brace of a '; $error .= $tokens[$stackptr]['content']; $error .= ' must be on the same line as the definition'; - $phpcsfile->adderror($error, $curlyBrace); + $phpcsfile->adderror($error, $curlybrace); return; } - if ($tokens[($curlyBrace - 1)]['code'] === T_WHITESPACE) { - $prevcontent = $tokens[($curlyBrace - 1)]['content']; + if ($tokens[($curlybrace - 1)]['code'] === T_WHITESPACE) { + $prevcontent = $tokens[($curlybrace - 1)]['content']; + if ($prevcontent !== $phpcsfile->eolChar) { - $blankSpace = substr($prevcontent, strpos($prevcontent, $phpcsfile->eolChar)); - $spaces = strlen($blankSpace); + $blankspace = substr($prevcontent, strpos($prevcontent, $phpcsfile->eolChar)); + $spaces = strlen($blankspace); + if ($spaces !== 1) { $error = "Expected 1 space before opening brace; $spaces found"; - $phpcsfile->adderror($error, $curlyBrace); + $phpcsfile->adderror($error, $curlybrace); } } } - } - - } - -?> diff --git a/lib/pear/PHP/CodeSniffer/Standards/Moodle/Sniffs/WhiteSpace/ControlStructureBlankLineSniff.php b/lib/pear/PHP/CodeSniffer/Standards/Moodle/Sniffs/WhiteSpace/ControlStructureBlankLineSniff.php new file mode 100644 index 0000000000..14644f3c40 --- /dev/null +++ b/lib/pear/PHP/CodeSniffer/Standards/Moodle/Sniffs/WhiteSpace/ControlStructureBlankLineSniff.php @@ -0,0 +1,69 @@ +. +/** + * moodle_sniffs_whitespace_controlstructureblanklinesniff + * + * @package lib-pear-php-codesniffer-standards-moodle-sniffs-whitespace + * @copyright 2008 Nicolas Connault + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +/** + * moodle_sniffs_controlstructureblanklinesniff + * + * Checks that there is a blank line before control structures + * + * @copyright 2008 Nicolas Connault + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ +class moodle_sniffs_whitespace_controlstructureblanklinesniff implements php_codesniffer_sniff { + + + /** + * Returns an array of tokens this test wants to listen for. + * + * @return array + */ + public function register() { + return array(T_IF, T_FOR, T_FOREACH, T_WHILE, T_SWITCH); + } + + + /** + * Processes this test, when one of its tokens is encountered. + * + * @param PHP_CodeSniffer_File $phpcsfile All the tokens found in the document. + * @param int $stackptr The position of the current token in the + * stack passed in $tokens. + * + * @return void + */ + public function process(PHP_CodeSniffer_File $phpcsfile, $stackptr) { + $tokens = $phpcsfile->gettokens(); + $previoustoken = $stackptr - 1; + + while ($tokens[$previoustoken]['line'] == $tokens[$stackptr]['line']) { + $previoustoken = $phpcsfile->findprevious(T_WHITESPACE, ($previoustoken - 1), null, true); + } + + $previous_non_ws_token = $tokens[$previoustoken]; + + if ($previous_non_ws_token['line'] == ($tokens[$stackptr]['line'] - 1)) { + $phpcsfile->addWarning('You should add a blank line before control structures', $stackptr); + } + } +} -- 2.39.5