MDL-19247 Added detection of blank lines before control structures, plus other tidbits.

This commit is contained in:
nicolasconnault 2009-05-20 14:09:26 +00:00
parent 8cc92fb2e6
commit 2178c7ada9
3 changed files with 87 additions and 31 deletions

View File

@ -31,12 +31,8 @@ if (class_exists('PHP_CodeSniffer_Standards_CodingStandard', true) === false) {
/**
* Moodle Coding Standard.
*
* @category PHP
* @package PHP_CodeSniffer
* @author Nicolas Connault <nicolasconnault@gmail.com>
* @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 {
/**

View File

@ -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);
}
}
}
}
}
?>

View File

@ -0,0 +1,69 @@
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* 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);
}
}
}