Lethexie has uploaded a new change for review.
https://gerrit.wikimedia.org/r/297355
Change subject: Add the SpaceBeforeClassBraceSniff
......................................................................
Add the SpaceBeforeClassBraceSniff
Add rule for class,interface,trait:
- single space before open brace.
- open brace should not on the new line.
Change-Id: I9739fa271f9228448097944fb4ddf5c6be6e216f
---
A MediaWiki/Sniffs/WhiteSpace/SpaceBeforeClassBraceSniff.php
M MediaWiki/Tests/files/NamingConventions/function_name.php
A MediaWiki/Tests/files/WhiteSpace/space_before_class_brace.php
A MediaWiki/Tests/files/WhiteSpace/space_before_class_brace.php.expect
A MediaWiki/Tests/files/WhiteSpace/space_before_class_brace.php.fixed
5 files changed, 135 insertions(+), 1 deletion(-)
git pull ssh://gerrit.wikimedia.org:29418/mediawiki/tools/codesniffer
refs/changes/55/297355/1
diff --git a/MediaWiki/Sniffs/WhiteSpace/SpaceBeforeClassBraceSniff.php
b/MediaWiki/Sniffs/WhiteSpace/SpaceBeforeClassBraceSniff.php
new file mode 100644
index 0000000..a126ab6
--- /dev/null
+++ b/MediaWiki/Sniffs/WhiteSpace/SpaceBeforeClassBraceSniff.php
@@ -0,0 +1,64 @@
+<?php
+/**
+ * make sure a space before class open brace.
+ * fail: class TestClass\t{
+ * fail: class TestClass{
+ * fail: class TestClass {
+ * pass: class TestClass {
+ */
+// @codingStandardsIgnoreStart
+class MediaWiki_Sniffs_WhiteSpace_SpaceBeforeClassBraceSniff
+ implements PHP_CodeSniffer_Sniff {
+ // @codingStandardsIgnoreEnd
+ /**
+ * @return array
+ */
+ public function register() {
+ return [
+ T_CLASS,
+ T_INTERFACE,
+ T_TRAIT,
+ ];
+ }
+
+ /**
+ * @param PHP_CodeSniffer_File $phpcsFile PHP_CodeSniffer_File object.
+ * @param int $stackPtr The index of current token.
+ * @return void
+ */
+ public function process( PHP_CodeSniffer_File $phpcsFile, $stackPtr ) {
+ $tokens = $phpcsFile->getTokens();
+ if ( $tokens[$stackPtr]['scope_opener'] === false ) {
+ return;
+ }
+ $openBrace = $tokens[$stackPtr]['scope_opener'];
+ $pre = $phpcsFile->findPrevious( T_WHITESPACE, ( $openBrace -1
), null, true );
+ $warning = 'Expected 1 space before class open brace and should
be same line.find %s';
+ $spaceCount = 0;
+ for ( $start = $pre + 1; $start < $openBrace; $start++ ) {
+ $content = $tokens[$start]['content'];
+ $contentSize = strlen( $content );
+ $spaceCount += $contentSize;
+ }
+
+ if ( $spaceCount !== 1 ||
+ $tokens[$openBrace]['line'] !== $tokens[$pre]['line']
+ ) {
+ $fix = $phpcsFile->addFixableWarning(
+ $warning,
+ $openBrace,
+ 'NoSpaceBeforeBrace',
+ [ $spaceCount ]
+ );
+ if ( $fix === true ) {
+ $phpcsFile->fixer->beginChangeset();
+ $phpcsFile->fixer->replaceToken( $openBrace, ''
);
+ $phpcsFile->fixer->addContent( $pre, ' {' );
+ for ( $i = ( $pre + 1 ); $i < $openBrace; $i++
) {
+ $phpcsFile->fixer->replaceToken( $i, ''
);
+ }
+ $phpcsFile->fixer->endChangeset();
+ }
+ }
+ }
+}
diff --git a/MediaWiki/Tests/files/NamingConventions/function_name.php
b/MediaWiki/Tests/files/NamingConventions/function_name.php
index 6228c18..144d7d4 100644
--- a/MediaWiki/Tests/files/NamingConventions/function_name.php
+++ b/MediaWiki/Tests/files/NamingConventions/function_name.php
@@ -2,7 +2,7 @@
/**
* Just for test.
*/
-class Test{
+class Test {
/**
* Lower camel case.
* @return void
diff --git a/MediaWiki/Tests/files/WhiteSpace/space_before_class_brace.php
b/MediaWiki/Tests/files/WhiteSpace/space_before_class_brace.php
new file mode 100644
index 0000000..b6a4288
--- /dev/null
+++ b/MediaWiki/Tests/files/WhiteSpace/space_before_class_brace.php
@@ -0,0 +1,27 @@
+<?php
+
+/**
+ * no space before class brace.
+ */
+class TestFailedExamples{
+ # coding...
+}
+
+/**
+ * too many space before class brace.
+ */
+class TestFailedExamples1 {
+ # coding...
+}
+
+/**
+ * brace on the new line.
+ */
+class TesFailedExamples2
+{
+ # coding...
+}
+
+class TestPassedExamples {
+ # coding...
+}
diff --git
a/MediaWiki/Tests/files/WhiteSpace/space_before_class_brace.php.expect
b/MediaWiki/Tests/files/WhiteSpace/space_before_class_brace.php.expect
new file mode 100644
index 0000000..e753b23
--- /dev/null
+++ b/MediaWiki/Tests/files/WhiteSpace/space_before_class_brace.php.expect
@@ -0,0 +1,17 @@
+
+FILE: ...er/MediaWiki/Tests/files/WhiteSpace/space_before_class_brace.php
+----------------------------------------------------------------------
+FOUND 0 ERRORS AND 3 WARNINGS AFFECTING 3 LINES
+----------------------------------------------------------------------
+ 6 | WARNING | [x] Expected 1 space before class open brace and
+ | | should be same line.find 0
+ 13 | WARNING | [x] Expected 1 space before class open brace and
+ | | should be same line.find 2
+ 21 | WARNING | [x] Expected 1 space before class open brace and
+ | | should be same line.find 1
+----------------------------------------------------------------------
+PHPCBF CAN FIX THE 3 MARKED SNIFF VIOLATIONS AUTOMATICALLY
+----------------------------------------------------------------------
+
+Time: 55ms; Memory: 3.5Mb
+
diff --git
a/MediaWiki/Tests/files/WhiteSpace/space_before_class_brace.php.fixed
b/MediaWiki/Tests/files/WhiteSpace/space_before_class_brace.php.fixed
new file mode 100644
index 0000000..9f32d72
--- /dev/null
+++ b/MediaWiki/Tests/files/WhiteSpace/space_before_class_brace.php.fixed
@@ -0,0 +1,26 @@
+<?php
+
+/**
+ * no space before class brace.
+ */
+class TestFailedExamples {
+ # coding...
+}
+
+/**
+ * too many space before class brace.
+ */
+class TestFailedExamples1 {
+ # coding...
+}
+
+/**
+ * brace on the new line.
+ */
+class TesFailedExamples2 {
+ # coding...
+}
+
+class TestPassedExamples {
+ # coding...
+}
--
To view, visit https://gerrit.wikimedia.org/r/297355
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I9739fa271f9228448097944fb4ddf5c6be6e216f
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/tools/codesniffer
Gerrit-Branch: master
Gerrit-Owner: Lethexie <[email protected]>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits