Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix: properly disable AlphabeticallyOrderedConstants by default #133

Merged
merged 1 commit into from
Jan 9, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,5 +14,5 @@ composer require --dev cdn77/coding-standard
* Reference this coding standard in your `phpcs.xml.dist` (_check out [the one used in this project](phpcs.xml.dist)_):

```
<rule ref="Cdn77CS" />
<rule ref="Cdn77" />
```
29 changes: 29 additions & 0 deletions phpstan-baseline.neon
Original file line number Diff line number Diff line change
@@ -1,2 +1,31 @@
parameters:
ignoreErrors:
-
message: "#^Cannot access offset 'properties' on mixed\\.$#"
count: 1
path: tests/TestCase.php

-
message: "#^Cannot access offset 'severity' on mixed\\.$#"
count: 1
path: tests/TestCase.php

-
message: "#^Method Cdn77\\\\TestCase\\:\\:checkFile\\(\\) has parameter \\$sniffConfig with no value type specified in iterable type array\\.$#"
count: 1
path: tests/TestCase.php

-
message: "#^Method Cdn77\\\\TestCase\\:\\:getSniffClassReflection\\(\\) return type with generic class ReflectionClass does not specify its types\\: T$#"
count: 1
path: tests/TestCase.php

-
message: "#^Method Cdn77\\\\TestCase\\:\\:getSniffName\\(\\) should return string but returns string\\|null\\.$#"
count: 1
path: tests/TestCase.php

-
message: "#^Parameter \\#3 \\.\\.\\.\\$values of function sprintf expects bool\\|float\\|int\\|string\\|null, mixed given\\.$#"
count: 1
path: tests/TestCase.php
4 changes: 4 additions & 0 deletions src/Cdn77/ruleset.xml
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,10 @@
<arg value="p"/>
<arg value="s"/>

<rule ref="Cdn77.Ordering.AlphabeticallyOrderedConstants">
<severity>0</severity>
</rule>

<!-- use Doctrine as the base standard -->
<rule ref="Doctrine">
<exclude name="Generic.Formatting.MultipleStatementAlignment"/>
Expand Down
93 changes: 0 additions & 93 deletions src/Cdn77CS/ruleset.xml

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,10 @@ final class AlphabeticallyOrderedConstantsSniffTest extends TestCase
{
public function testErrors(): void
{
$file = self::checkFile(__DIR__ . '/data/AlphabeticallyOrderedConstantsSniffTest.inc');
$file = self::checkFile(
__DIR__ . '/data/AlphabeticallyOrderedConstantsSniffTest.inc',
sniffConfig: ['severity' => 5],
);
$expectedErrors = [
9 => AlphabeticallyOrderedConstantsSniff::CodeIncorrectConstantOrder,
19 => AlphabeticallyOrderedConstantsSniff::CodeIncorrectConstantOrder,
Expand Down
84 changes: 84 additions & 0 deletions tests/TestCase.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,26 @@

namespace Cdn77;

use PHP_CodeSniffer\Config;
use PHP_CodeSniffer\Files\File;
use PHP_CodeSniffer\Files\LocalFile;
use PHP_CodeSniffer\Runner;
use PHP_CodeSniffer\Sniffs\Sniff;
use ReflectionClass;
use SlevomatCodingStandard\Sniffs\TestCase as SlevomatTestCase;

use function array_merge;
use function assert;
use function class_exists;
use function count;
use function define;
use function defined;
use function in_array;
use function preg_replace;
use function sprintf;
use function str_replace;
use function strlen;
use function strpos;
use function substr;

abstract class TestCase extends SlevomatTestCase
Expand All @@ -21,4 +35,74 @@ protected static function getSniffClassName(): string

return $class;
}

// phpcs:ignore
protected static function checkFile(string $filePath, array $sniffProperties = [], array $codesToCheck = [], array $cliArgs = [], array $sniffConfig = []): File
{
if (defined('PHP_CODESNIFFER_CBF') === false) {
// phpcs:ignore
define('PHP_CODESNIFFER_CBF', false);
}

$codeSniffer = new Runner();
$codeSniffer->config = new Config(array_merge(['-s'], $cliArgs));
$codeSniffer->init();

if (count($sniffConfig) > 0) {
$codeSniffer->ruleset->ruleset[self::getSniffName()] = $sniffConfig;
}

if (count($sniffProperties) > 0) {
$codeSniffer->ruleset->ruleset[self::getSniffName()]['properties'] = $sniffProperties;
}

$sniffClassName = static::getSniffClassName();
$sniff = new $sniffClassName();
assert($sniff instanceof Sniff);

$codeSniffer->ruleset->sniffs = [$sniffClassName => $sniff];

if (count($codesToCheck) > 0) {
foreach (self::getSniffClassReflection()->getConstants() as $constantName => $constantValue) {
if (strpos($constantName, 'CODE_') !== 0 || in_array($constantValue, $codesToCheck, true)) {
continue;
}

$codeSniffer->ruleset->ruleset[sprintf('%s.%s', self::getSniffName(), $constantValue)]['severity'] = 0;
}
}

$codeSniffer->ruleset->populateTokenListeners();

$file = new LocalFile($filePath, $codeSniffer->ruleset, $codeSniffer->config);
$file->process();

return $file;
}

private static function getSniffName(): string
{
return preg_replace(
[
'~\\\~',
'~\.Sniffs~',
'~Sniff$~',
],
[
'.',
'',
'',
],
static::getSniffClassName(),
);
}

private static function getSniffClassReflection(): ReflectionClass
{
static $reflections = [];

$className = static::getSniffClassName();

return $reflections[$className] ?? $reflections[$className] = new ReflectionClass($className);
}
}