From: Matthias Schmidt Date: Sat, 20 Apr 2019 14:04:50 +0000 (+0200) Subject: Resolve code sniffer-related TODOs X-Git-Tag: 5.2.0_Alpha_1~127 X-Git-Url: https://git.stricted.de/?a=commitdiff_plain;h=a5525bc90311ed0ef7630505ced01767b091cdb1;p=GitHub%2FWoltLab%2FWCF.git Resolve code sniffer-related TODOs See #2544 --- diff --git a/CodeSniff/WCF/Sniffs/Functions/OpeningFunctionBraceKernighanRitchieSniff.php b/CodeSniff/WCF/Sniffs/Functions/OpeningFunctionBraceKernighanRitchieSniff.php new file mode 100644 index 0000000000..abc922889a --- /dev/null +++ b/CodeSniff/WCF/Sniffs/Functions/OpeningFunctionBraceKernighanRitchieSniff.php @@ -0,0 +1,110 @@ + and Marc McIntyre + * and released under the terms of the BSD Licence. + * See: https://github.com/squizlabs/PHP_CodeSniffer/blob/master/CodeSniffer/Standards/Generic/Sniffs/Functions/OpeningFunctionBraceKernighanRitchieSniff.php + * + * @author Tim Duesterhus + * @license GNU Lesser General Public License + * @package WoltLabSuite\Core + */ +class OpeningFunctionBraceKernighanRitchieSniff implements Sniff { + /** + * Registers the tokens that this sniff wants to listen for. + * + * @return void + */ + public function register() { + return array(T_FUNCTION); + } + + /** + * 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 void + */ + public function process(File $phpcsFile, $stackPtr) { + $tokens = $phpcsFile->getTokens(); + + if (isset($tokens[$stackPtr]['scope_opener']) === false) { + return; + } + + $openingBrace = $tokens[$stackPtr]['scope_opener']; + + $next = $phpcsFile->findNext(array(T_COMMENT, T_DOC_COMMENT, T_WHITESPACE), ($openingBrace + 1), null, true); + if ($tokens[$next]['line'] === $tokens[$openingBrace]['line']) { + // the closing brace is fine + if ($tokens[$openingBrace]['bracket_closer'] !== $next) { + $error = 'Opening brace must be the last content on the line'; + $fix = $phpcsFile->addFixableError($error, $openingBrace, 'ContentAfterBrace'); + if ($fix === true) { + $phpcsFile->fixer->addNewline($openingBrace); + } + } + } + + // The end of the function occurs at the end of the argument list. Its + // like this because some people like to break long function declarations + // over multiple lines. + $functionLine = $tokens[$tokens[$stackPtr]['parenthesis_closer']]['line']; + $braceLine = $tokens[$openingBrace]['line']; + + $lineDifference = ($braceLine - $functionLine); + + if ($lineDifference > 0) { + $error = 'Opening brace should be on the same line as the declaration'; + $phpcsFile->addError($error, $openingBrace, 'BraceOnNewLine'); + $phpcsFile->recordMetric($stackPtr, 'Function opening brace placement', 'new line'); + return; + } + + $closeBracket = $tokens[$stackPtr]['parenthesis_closer']; + if ($tokens[($closeBracket + 1)]['code'] !== T_WHITESPACE) { + $length = 0; + } + else if ($tokens[($closeBracket + 1)]['content'] === "\t") { + $length = '\t'; + } + else { + $length = strlen($tokens[($closeBracket + 1)]['content']); + } + + if ($length !== 1) { + $error = 'Expected 1 space after closing parenthesis; found %s'; + $data = array($length); + $phpcsFile->addError($error, $closeBracket, 'SpaceAfterBracket', $data); + return; + } + + $closeBrace = $tokens[$stackPtr]['scope_opener']; + if ($tokens[($closeBrace - 1)]['code'] !== T_WHITESPACE) { + $length = 0; + } + else if ($tokens[($closeBrace - 1)]['content'] === "\t") { + $length = '\t'; + } + else { + $length = strlen($tokens[($closeBrace - 1)]['content']); + } + + if ($length !== 1) { + $error = 'Expected 1 space before opening brace; found %s'; + $data = array($length); + $phpcsFile->addError($error, $openingBrace, 'SpaceBeforeBrace', $data); + return; + } + + $phpcsFile->recordMetric($stackPtr, 'Function opening brace placement', 'same line'); + } +} diff --git a/CodeSniff/WCF/ruleset.xml b/CodeSniff/WCF/ruleset.xml index 93e0b2a32e..4ad1180e84 100644 --- a/CodeSniff/WCF/ruleset.xml +++ b/CodeSniff/WCF/ruleset.xml @@ -39,10 +39,9 @@ - - + diff --git a/wcfsetup/install/files/lib/core.functions.php b/wcfsetup/install/files/lib/core.functions.php index 970d31211f..a433fcf3c9 100644 --- a/wcfsetup/install/files/lib/core.functions.php +++ b/wcfsetup/install/files/lib/core.functions.php @@ -90,7 +90,9 @@ namespace { } if (!function_exists('is_countable')) { - function is_countable($var) { return is_array($var) || $var instanceof Countable || $var instanceof ResourceBundle || $var instanceof SimpleXmlElement; } + function is_countable($var) { + return is_array($var) || $var instanceof Countable || $var instanceof ResourceBundle || $var instanceof SimpleXmlElement; + } } }