diff options
-rw-r--r-- | _cs/DokuWiki/Sniffs/NamingConventions/ConstructorNameSniff.php | 85 | ||||
-rw-r--r-- | _cs/DokuWiki/ruleset.xml | 103 |
2 files changed, 142 insertions, 46 deletions
diff --git a/_cs/DokuWiki/Sniffs/NamingConventions/ConstructorNameSniff.php b/_cs/DokuWiki/Sniffs/NamingConventions/ConstructorNameSniff.php new file mode 100644 index 000000000..7dd6d9366 --- /dev/null +++ b/_cs/DokuWiki/Sniffs/NamingConventions/ConstructorNameSniff.php @@ -0,0 +1,85 @@ +<?php +/** + * Generic_Sniffs_NamingConventions_ConstructorNameSniff. + * + * PHP version 5 + * + * @category PHP + * @package PHP_CodeSniffer + * @author Greg Sherwood <gsherwood@squiz.net> + * @author Leif Wickland <lwickland@rightnow.com> + * @copyright 2006-2011 Squiz Pty Ltd (ABN 77 084 670 600) + * @license http://matrix.squiz.net/developer/tools/php_cs/licence BSD Licence + * @link http://pear.php.net/package/PHP_CodeSniffer + */ + +if (class_exists('PHP_CodeSniffer_Standards_AbstractScopeSniff', true) === false) { + $error = 'Class PHP_CodeSniffer_Standards_AbstractScopeSniff not found'; + throw new PHP_CodeSniffer_Exception($error); +} + +/** + * Generic_Sniffs_NamingConventions_ConstructorNameSniff. + * + * Favor PHP 5 constructor syntax, which uses "function __construct()". + * Avoid PHP 4 constructor syntax, which uses "function ClassName()". + * + * @category PHP + * @package PHP_CodeSniffer + * @author Leif Wickland <lwickland@rightnow.com> + * @license http://matrix.squiz.net/developer/tools/php_cs/licence BSD Licence + * @version Release: 1.3.3 + * @link http://pear.php.net/package/PHP_CodeSniffer + */ +class DokuWiki_Sniffs_NamingConventions_ConstructorNameSniff extends Generic_Sniffs_NamingConventions_ConstructorNameSniff +{ + /** + * Processes this test when one of its tokens is encountered. + * + * @param PHP_CodeSniffer_File $phpcsFile The current file being scanned. + * @param int $stackPtr The position of the current token + * in the stack passed in $tokens. + * @param int $currScope A pointer to the start of the scope. + * + * @return void + */ + protected function processTokenWithinScope( + PHP_CodeSniffer_File $phpcsFile, + $stackPtr, + $currScope + ) { + $className = $phpcsFile->getDeclarationName($currScope); + $methodName = $phpcsFile->getDeclarationName($stackPtr); + + if (strcasecmp($methodName, $className) === 0) { + $error = 'PHP4 style constructors are discouraged; use "__construct()" instead'; + $phpcsFile->addWarning($error, $stackPtr, 'OldStyle'); + } else if (strcasecmp($methodName, '__construct') !== 0) { + // Not a constructor. + return; + } + + $tokens = $phpcsFile->getTokens(); + + $parentClassName = $phpcsFile->findExtendedClassName($currScope); + if ($parentClassName === false) { + return; + } + + $endFunctionIndex = $tokens[$stackPtr]['scope_closer']; + $startIndex = $stackPtr; + while ($doubleColonIndex = $phpcsFile->findNext(array(T_DOUBLE_COLON), $startIndex, $endFunctionIndex)) { + if ($tokens[($doubleColonIndex + 1)]['code'] === T_STRING + && $tokens[($doubleColonIndex + 1)]['content'] === $parentClassName + ) { + $error = 'PHP4 style calls to parent constructors are discouraged; use "parent::__construct()" instead'; + $phpcsFile->addWarning($error, ($doubleColonIndex + 1), 'OldStyleCall'); + } + + $startIndex = ($doubleColonIndex + 1); + } + + }//end processTokenWithinScope() + + +}//end class diff --git a/_cs/DokuWiki/ruleset.xml b/_cs/DokuWiki/ruleset.xml index 4135c0860..bfbef87fe 100644 --- a/_cs/DokuWiki/ruleset.xml +++ b/_cs/DokuWiki/ruleset.xml @@ -2,52 +2,63 @@ <ruleset name="DokuWiki"> <description>DokuWiki Coding Standard</description> - <rule ref="Generic.NamingConventions.ConstructorName" /> - <rule ref="Generic.Classes.DuplicateClassName" /> - <rule ref="Generic.CodeAnalysis.JumbledIncrementer" /> - <rule ref="Generic.CodeAnalysis.UnnecessaryFinalModifier" /> - <rule ref="Generic.CodeAnalysis.UnconditionalIfStatement" /> - <rule ref="Generic.CodeAnalysis.ForLoopShouldBeWhileLoop" /> - <rule ref="Generic.CodeAnalysis.ForLoopWithTestFunctionCall" /> - <rule ref="Generic.CodeAnalysis.UnusedFunctionParameter" /> - <rule ref="Generic.CodeAnalysis.EmptyStatement" /> - <rule ref="Generic.CodeAnalysis.UselessOverridingMethod" /> - <rule ref="Generic.Commenting.Todo" /> - <ruke ref="Generic.Files.ByteOrderMark" /> - <rule ref="Generic.Files.LineEndings" /> - <rule ref="Generic.Formatting.DisallowMultipleStatements" /> - <rule ref="Generic.Metrics.NestingLevel" /> -<!-- <rule ref="Generic./Metrics/CyclomaticComplexity" /> //FIXME we might need to tune this first --> - <rule ref="Generic.NamingConventions.UpperCaseConstantName" /> - <rule ref="Generic.PHP.LowerCaseConstant" /> - <rule ref="Generic.PHP.DeprecatedFunctions.php" /> - <rule ref="Generic.PHP.DisallowShortOpenTag" /> - <!-- Overridden rule ref="Generic.PHP.ForbiddenFunctions" /--> - <rule ref="Generic.WhiteSpace.DisallowTabIndent" /> - <rule ref="Generic.Classes.DuplicateClassName" /> - <rule ref="Generic.Functions.CallTimePassByReference" /> - <rule ref="Zend.Files.ClosingTag" /> - <rule ref="PEAR.Functions.ValidDefaultValue" /> - <rule ref="Squiz.PHP.Eval" /> - <rule ref="Squiz.PHP.NonExecutableCode" /> -<!-- <rule ref="Squiz./PHP/CommentedOutCode" /> //FIXME should ignore oneliners --> - <rule ref="Squiz.WhiteSpace.SuperfluousWhitespace" /> - <rule ref="Squiz.PHP.NonExecutableCode" /> - <rule ref="Squiz.CSS.LowercaseStyleDefinition" /> - <rule ref="Squiz.CSS.MissingColon" /> - <rule ref="Squiz.CSS.DisallowMultipleStyleDefinitions" /> - <rule ref="Squiz.CSS.ColonSpacing" /> - <rule ref="Squiz.CSS.ClassDefinitionClosingBraceSpace" /> - <rule ref="Squiz.CSS.SemicolonSpacing" /> - <rule ref="Squiz.CSS.Indentation" /> - <rule ref="Squiz.CSS.EmptyClassDefinition" /> - <rule ref="Squiz.CSS.ClassDefinitionNameSpacing" /> - <rule ref="Squiz.CSS.EmptyStyleDefinition" /> - <rule ref="Squiz.CSS.Opacity" /> - <rule ref="Squiz.CSS.ColourDefinition" /> - <rule ref="Squiz.CSS.DuplicateClassDefinition" /> - <rule ref="Squiz.CSS.ClassDefinitionOpeningBraceSpace" /> + <!-- ignore 3rd party libraries (that we haven't adopted) --> + <exclude-pattern>*/adLDAP.php</exclude-pattern> + <exclude-pattern>*/EmailAddressValidator.php</exclude-pattern> + <exclude-pattern>*/feedcreator.class.php</exclude-pattern> + <exclude-pattern>*/SimplePie.php</exclude-pattern> + <exclude-pattern>*/geshi.php</exclude-pattern> + <exclude-pattern>*/geshi/*</exclude-pattern> + <exclude-pattern>*/JSON.php</exclude-pattern> - <rule ref="Squiz.Commenting.DocCommentAlignment" /> + <!-- ignore devel only parts --> + <exclude-pattern>*/_test/*</exclude-pattern> + <exclude-pattern>*/_cs/*</exclude-pattern> + + <rule ref="Generic.Classes.DuplicateClassName" /> + <rule ref="Generic.CodeAnalysis.JumbledIncrementer" /> + <rule ref="Generic.CodeAnalysis.UnnecessaryFinalModifier" /> + <rule ref="Generic.CodeAnalysis.UnconditionalIfStatement" /> + <rule ref="Generic.CodeAnalysis.ForLoopShouldBeWhileLoop" /> + <rule ref="Generic.CodeAnalysis.ForLoopWithTestFunctionCall" /> + <rule ref="Generic.CodeAnalysis.UnusedFunctionParameter" /> + <rule ref="Generic.CodeAnalysis.EmptyStatement" /> + <rule ref="Generic.CodeAnalysis.UselessOverridingMethod" /> + <rule ref="Generic.Commenting.Todo" /> + <ruke ref="Generic.Files.ByteOrderMark" /> + <rule ref="Generic.Files.LineEndings" /> + <rule ref="Generic.Formatting.DisallowMultipleStatements" /> + <rule ref="Generic.Metrics.NestingLevel"> + <properties> + <property name="nestingLevel" value="6" /> + </properties> + </rule> + <rule ref="Generic.NamingConventions.UpperCaseConstantName" /> + <rule ref="Generic.PHP.LowerCaseConstant" /> + <rule ref="Generic.PHP.DeprecatedFunctions.php" /> + <rule ref="Generic.PHP.DisallowShortOpenTag" /> + <rule ref="Generic.PHP.ForbiddenFunctions" /> + <rule ref="Generic.WhiteSpace.DisallowTabIndent" /> + <rule ref="Generic.Classes.DuplicateClassName" /> + <rule ref="Generic.Functions.CallTimePassByReference" /> + <rule ref="Zend.Files.ClosingTag" /> + <rule ref="PEAR.Functions.ValidDefaultValue" /> + <rule ref="Squiz.PHP.Eval" /> + <rule ref="Squiz.WhiteSpace.SuperfluousWhitespace" /> + <rule ref="Squiz.CSS.LowercaseStyleDefinition" /> + <rule ref="Squiz.CSS.MissingColon" /> + <rule ref="Squiz.CSS.DisallowMultipleStyleDefinitions" /> + <rule ref="Squiz.CSS.ColonSpacing" /> + <rule ref="Squiz.CSS.ClassDefinitionClosingBraceSpace" /> + <rule ref="Squiz.CSS.SemicolonSpacing" /> + <rule ref="Squiz.CSS.Indentation" /> + <rule ref="Squiz.CSS.EmptyClassDefinition" /> + <rule ref="Squiz.CSS.ClassDefinitionNameSpacing" /> + <rule ref="Squiz.CSS.EmptyStyleDefinition" /> + <rule ref="Squiz.CSS.Opacity" /> + <rule ref="Squiz.CSS.ColourDefinition" /> + <rule ref="Squiz.CSS.DuplicateClassDefinition" /> + <rule ref="Squiz.CSS.ClassDefinitionOpeningBraceSpace" /> + <rule ref="Squiz.Commenting.DocCommentAlignment" /> </ruleset> |