55use PHP_CodeSniffer \Files \File ;
66use PHP_CodeSniffer \Sniffs \Sniff ;
77use SlevomatCodingStandard \Helpers \FunctionHelper ;
8+ use SlevomatCodingStandard \Helpers \SniffSettingsHelper ;
89use SlevomatCodingStandard \Helpers \TokenHelper ;
910use function assert ;
10- use function in_array ;
1111use function is_bool ;
1212use function is_int ;
1313use function is_string ;
@@ -42,33 +42,29 @@ public function register(): array
4242 /**
4343 * @phpcsSuppress SlevomatCodingStandard.TypeHints.ParameterTypeHint.MissingNativeTypeHint
4444 * @param \PHP_CodeSniffer\Files\File $phpcsFile
45- * @param int $pointer
45+ * @param int $methodPointer
4646 */
47- public function process (File $ phpcsFile , $ pointer ): void
47+ public function process (File $ phpcsFile , $ methodPointer ): void
4848 {
49- if (!FunctionHelper::isMethod ($ phpcsFile , $ pointer )) {
49+ if (!FunctionHelper::isMethod ($ phpcsFile , $ methodPointer )) {
5050 return ;
5151 }
5252
5353 $ tokens = $ phpcsFile ->getTokens ();
5454
55- $ lineStartPointer = $ phpcsFile ->findFirstOnLine (T_OPEN_TAG , $ pointer , true );
56- assert (!is_bool ($ lineStartPointer ));
55+ $ signatureStartPointer = $ phpcsFile ->findFirstOnLine (T_OPEN_TAG , $ methodPointer , true );
56+ assert (!is_bool ($ signatureStartPointer ));
5757
58- $ methodSignatureEndPointer = $ phpcsFile ->findNext ([T_OPEN_CURLY_BRACKET , T_SEMICOLON ], $ pointer );
59- assert (is_int ($ methodSignatureEndPointer ));
58+ $ pointerAfterSignatureEnd = TokenHelper::findNext ($ phpcsFile , [T_OPEN_CURLY_BRACKET , T_SEMICOLON ], $ methodPointer + 1 );
6059
61- $ signatureEndLine = $ tokens [$ methodSignatureEndPointer ]['line ' ];
62- if (in_array ($ tokens [$ lineStartPointer ]['line ' ], [$ signatureEndLine , $ signatureEndLine - 1 ], true )) {
63- return ;
64- }
60+ $ signatureEndPointer = TokenHelper::findPreviousEffective ($ phpcsFile , $ pointerAfterSignatureEnd - 1 );
61+ assert (is_int ($ signatureEndPointer ));
6562
66- $ singleLineMethodSignatureEndPointer = $ methodSignatureEndPointer ;
67- if ($ tokens [$ methodSignatureEndPointer ]['code ' ] === T_OPEN_CURLY_BRACKET ) {
68- $ singleLineMethodSignatureEndPointer --;
63+ if ($ tokens [$ signatureStartPointer ]['line ' ] === $ tokens [$ signatureEndPointer ]['line ' ]) {
64+ return ;
6965 }
7066
71- $ methodSignature = TokenHelper::getContent ($ phpcsFile , $ lineStartPointer , $ singleLineMethodSignatureEndPointer );
67+ $ methodSignature = TokenHelper::getContent ($ phpcsFile , $ signatureStartPointer , $ signatureEndPointer );
7268 $ methodSignature = preg_replace (sprintf ('~%s[ \t]*~ ' , $ phpcsFile ->eolChar ), ' ' , $ methodSignature );
7369 assert (is_string ($ methodSignature ));
7470
@@ -79,31 +75,25 @@ public function process(File $phpcsFile, $pointer): void
7975 return str_repeat (' ' , strlen ($ matches [1 ]));
8076 }, $ methodSignature );
8177
82- if ($ this ->maxLineLength !== 0 && strlen ($ methodSignatureWithoutTabIndetation ) > $ this ->maxLineLength ) {
78+ $ maxLineLength = SniffSettingsHelper::normalizeInteger ($ this ->maxLineLength );
79+ if ($ maxLineLength !== 0 && strlen ($ methodSignatureWithoutTabIndetation ) > SniffSettingsHelper::normalizeInteger ($ maxLineLength )) {
8380 return ;
8481 }
8582
86- $ error = sprintf ('Signature of method "%s" should be placed on a single line. ' , FunctionHelper::getName ($ phpcsFile , $ pointer ));
87- $ fix = $ phpcsFile ->addFixableError ($ error , $ pointer , self ::CODE_REQUIRED_SINGLE_LINE_SIGNATURE );
83+ $ error = sprintf ('Signature of method "%s" should be placed on a single line. ' , FunctionHelper::getName ($ phpcsFile , $ methodPointer ));
84+ $ fix = $ phpcsFile ->addFixableError ($ error , $ methodPointer , self ::CODE_REQUIRED_SINGLE_LINE_SIGNATURE );
8885 if (!$ fix ) {
8986 return ;
9087 }
9188
92- $ whitespaceBeforeMethod = $ tokens [$ lineStartPointer ]['content ' ];
93-
9489 $ phpcsFile ->fixer ->beginChangeset ();
9590
96- for ($ i = $ lineStartPointer ; $ i <= $ methodSignatureEndPointer ; $ i ++) {
97- $ phpcsFile ->fixer ->replaceToken ($ i , '' );
98- }
91+ $ phpcsFile ->fixer ->replaceToken ($ signatureStartPointer , $ methodSignature );
9992
100- $ replacement = $ methodSignature ;
101- if ($ tokens [$ methodSignatureEndPointer ]['code ' ] === T_OPEN_CURLY_BRACKET ) {
102- $ replacement = sprintf ("%s \n%s{ " , $ methodSignature , $ whitespaceBeforeMethod );
93+ for ($ i = $ signatureStartPointer + 1 ; $ i <= $ signatureEndPointer ; $ i ++) {
94+ $ phpcsFile ->fixer ->replaceToken ($ i , '' );
10395 }
10496
105- $ phpcsFile ->fixer ->replaceToken ($ lineStartPointer , $ replacement );
106-
10797 $ phpcsFile ->fixer ->endChangeset ();
10898 }
10999
0 commit comments