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

Reply via email to