Skip to content

Commit f94f876

Browse files
✨ Add new rule
1 parent e041ee6 commit f94f876

18 files changed

+164
-16
lines changed
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
<?php
2+
3+
namespace SymfonyCustom\Sniffs\Namespaces;
4+
5+
use PHP_CodeSniffer\Files\File;
6+
use PHP_CodeSniffer\Sniffs\Sniff;
7+
use PHP_CodeSniffer\Util\Tokens;
8+
use SymfonyCustom\Sniffs\SniffHelper;
9+
10+
/**
11+
* Class UseWithoutStartingBackslashSniff
12+
*/
13+
class UseWithoutStartingBackslashSniff implements Sniff
14+
{
15+
/**
16+
* @return int[]
17+
*/
18+
public function register()
19+
{
20+
return [T_USE];
21+
}
22+
23+
/**
24+
* @param File $phpcsFile
25+
* @param int $stackPtr
26+
*
27+
* @return int|void
28+
*/
29+
public function process(File $phpcsFile, $stackPtr)
30+
{
31+
if (!SniffHelper::isGlobalUse($phpcsFile, $stackPtr)) {
32+
return;
33+
}
34+
35+
$tokens = $phpcsFile->getTokens();
36+
$classPtr = $phpcsFile->findNext(
37+
Tokens::$emptyTokens,
38+
$stackPtr + 1,
39+
null,
40+
true
41+
);
42+
43+
$lowerContent = strtolower($tokens[$classPtr]['content']);
44+
if ('function' === $lowerContent || 'const' === $lowerContent) {
45+
$classPtr = $phpcsFile->findNext(
46+
Tokens::$emptyTokens,
47+
$classPtr + 1,
48+
null,
49+
true
50+
);
51+
}
52+
53+
if (T_NS_SEPARATOR === $tokens[$classPtr]['code']
54+
|| (T_STRING === $tokens[$classPtr]['code']
55+
&& '\\' === $tokens[$classPtr]['content'])
56+
) {
57+
$error = 'Use statement cannot start with a backslash';
58+
$fix = $phpcsFile->addFixableError($error, $classPtr, 'BackslashAtStart');
59+
60+
if ($fix) {
61+
if (T_WHITESPACE !== $tokens[$classPtr - 1]['code']) {
62+
$phpcsFile->fixer->replaceToken($classPtr, ' ');
63+
} else {
64+
$phpcsFile->fixer->replaceToken($classPtr, '');
65+
}
66+
}
67+
}
68+
}
69+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
<?php
2+
3+
namespace Foo;
4+
5+
use \DateTime;
6+
use const \E_COMPILE_ERROR as ECE;
7+
use FUNCTION\array_combine as ac;
8+
9+
class Bar
10+
{
11+
use MyTrait;
12+
13+
public function __construct($foo)
14+
{
15+
$closure = function ($x) use ($foo) {
16+
};
17+
}
18+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
<?php
2+
3+
namespace Foo;
4+
5+
use DateTime;
6+
use const E_COMPILE_ERROR as ECE;
7+
use FUNCTION array_combine as ac;
8+
9+
class Bar
10+
{
11+
use MyTrait;
12+
13+
public function __construct($foo)
14+
{
15+
$closure = function ($x) use ($foo) {
16+
};
17+
}
18+
}
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
<?php
2+
3+
namespace SymfonyCustom\Tests\Namespaces;
4+
5+
use PHP_CodeSniffer\Tests\Standards\AbstractSniffUnitTest;
6+
7+
/**
8+
* Unit test class for the UseWithoutStartingBackslash sniff.
9+
*
10+
* @group SymfonyCustom
11+
*/
12+
class UseWithoutStartingBackslashUnitTest extends AbstractSniffUnitTest
13+
{
14+
/**
15+
* Returns the lines where errors should occur.
16+
*
17+
* The key of the array should represent the line number and the value
18+
* should represent the number of errors that should occur on that line.
19+
*
20+
* @return array<int, int>
21+
*/
22+
public function getErrorList()
23+
{
24+
return [
25+
2 => 1,
26+
3 => 1,
27+
4 => 1,
28+
];
29+
}
30+
31+
/**
32+
* Returns the lines where warnings should occur.
33+
*
34+
* The key of the array should represent the line number and the value
35+
* should represent the number of errors that should occur on that line.
36+
*
37+
* @return array(int => int)
38+
*/
39+
public function getWarningList()
40+
{
41+
return [];
42+
}
43+
}

TwigCS/Command/TwigCSCommand.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
namespace TwigCS\Command;
44

5-
use \Exception;
5+
use Exception;
66
use Symfony\Component\Console\Command\Command;
77
use Symfony\Component\Console\Input\InputArgument;
88
use Symfony\Component\Console\Input\InputInterface;

TwigCS/Config/Config.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
namespace TwigCS\Config;
44

5-
use \Exception;
5+
use Exception;
66
use Symfony\Component\Finder\Finder;
77

88
/**

TwigCS/Report/SniffViolation.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
namespace TwigCS\Report;
44

5-
use \LogicException;
5+
use LogicException;
66
use TwigCS\Sniff\SniffInterface;
77

88
/**

TwigCS/Ruleset/Generic/BlankEOFSniff.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
namespace TwigCS\Ruleset\Generic;
44

5-
use \Exception;
5+
use Exception;
66
use TwigCS\Sniff\AbstractSniff;
77
use TwigCS\Token\Token;
88

TwigCS/Ruleset/Generic/DisallowCommentedCodeSniff.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
namespace TwigCS\Ruleset\Generic;
44

5-
use \Exception;
5+
use Exception;
66
use TwigCS\Sniff\AbstractSniff;
77
use TwigCS\Token\Token;
88

TwigCS/Ruleset/Generic/EmptyLinesSniff.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
namespace TwigCS\Ruleset\Generic;
44

5-
use \Exception;
5+
use Exception;
66
use TwigCS\Sniff\AbstractSniff;
77
use TwigCS\Token\Token;
88

TwigCS/Ruleset/Ruleset.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@
22

33
namespace TwigCS\Ruleset;
44

5-
use \Exception;
6-
use \SplFileInfo;
5+
use Exception;
6+
use SplFileInfo;
77
use Symfony\Component\Finder\Finder;
88
use TwigCS\Sniff\SniffInterface;
99

TwigCS/Runner/Fixer.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
namespace TwigCS\Runner;
44

5-
use \Exception;
5+
use Exception;
66
use Twig\Source;
77
use TwigCS\Ruleset\Ruleset;
88
use TwigCS\Token\Token;

TwigCS/Runner/Linter.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
namespace TwigCS\Runner;
44

5-
use \Exception;
5+
use Exception;
66
use Twig\Environment;
77
use Twig\Error\Error;
88
use Twig\Source;

TwigCS/Sniff/AbstractSniff.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
namespace TwigCS\Sniff;
44

5-
use \Exception;
5+
use Exception;
66
use TwigCS\Report\Report;
77
use TwigCS\Report\SniffViolation;
88
use TwigCS\Runner\Fixer;

TwigCS/Sniff/AbstractSpacingSniff.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
namespace TwigCS\Sniff;
44

5-
use \Exception;
5+
use Exception;
66
use TwigCS\Token\Token;
77

88
/**

TwigCS/Tests/AbstractSniffTest.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@
22

33
namespace TwigCS\Tests;
44

5-
use \Exception;
6-
use \ReflectionClass;
5+
use Exception;
6+
use ReflectionClass;
77
use PHPUnit\Framework\TestCase;
88
use TwigCS\Environment\StubbedEnvironment;
99
use TwigCS\Report\Report;

TwigCS/Token/TokenParser.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
namespace TwigCS\Token;
44

5-
use \Exception;
5+
use Exception;
66
use Twig\Node\Node;
77
use Twig\Token;
88
use Twig\TokenParser\AbstractTokenParser;

TwigCS/Token/Tokenizer.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
namespace TwigCS\Token;
44

5-
use \Exception;
5+
use Exception;
66
use Twig\Environment;
77
use Twig\Source;
88

0 commit comments

Comments
 (0)