From 7323c484207b5342bcc00452c8d1157f0794347f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jaroslav=20Hansl=C3=ADk?= Date: Fri, 27 Mar 2020 22:35:02 +0100 Subject: [PATCH] RequireNumericLiteralSeparatorSniff: New options "minDigitsBeforeDecimalPoint" and "minDigitsAfterDecimalPoint" --- README.md | 2 ++ .../RequireNumericLiteralSeparatorSniff.php | 9 ++++++- ...equireNumericLiteralSeparatorSniffTest.php | 24 +++++++++++++++++++ ...LiteralSeparatorModifiedSettingsErrors.php | 4 ++++ ...teralSeparatorModifiedSettingsNoErrors.php | 4 ++++ 5 files changed, 42 insertions(+), 1 deletion(-) create mode 100644 tests/Sniffs/Numbers/data/requireNumericLiteralSeparatorModifiedSettingsErrors.php create mode 100644 tests/Sniffs/Numbers/data/requireNumericLiteralSeparatorModifiedSettingsNoErrors.php diff --git a/README.md b/README.md index 82742f042..259a15170 100644 --- a/README.md +++ b/README.md @@ -711,6 +711,8 @@ Requires use of numeric literal separators. This sniff provides the following setting: * `enable`: either to enable or no this sniff. By default, it is enabled for PHP versions 7.4 or higher. +* `minDigitsBeforeDecimalPoint`: the mininum digits before decimal point to require separator. +* `minDigitsAfterDecimalPoint`: the mininum digits after decimal point to require separator. #### SlevomatCodingStandard.PHP.ReferenceSpacing 🔧 diff --git a/SlevomatCodingStandard/Sniffs/Numbers/RequireNumericLiteralSeparatorSniff.php b/SlevomatCodingStandard/Sniffs/Numbers/RequireNumericLiteralSeparatorSniff.php index 435d5c1e1..ac57d38a3 100644 --- a/SlevomatCodingStandard/Sniffs/Numbers/RequireNumericLiteralSeparatorSniff.php +++ b/SlevomatCodingStandard/Sniffs/Numbers/RequireNumericLiteralSeparatorSniff.php @@ -18,6 +18,12 @@ class RequireNumericLiteralSeparatorSniff implements Sniff /** @var bool|null */ public $enable = null; + /** @var int */ + public $minDigitsBeforeDecimalPoint = 4; + + /** @var int */ + public $minDigitsAfterDecimalPoint = 4; + /** * @return array */ @@ -48,7 +54,8 @@ public function process(File $phpcsFile, $numberPointer): void return; } - if (preg_match('~(?:^\\d{4}|\.\\d{4})~', $tokens[$numberPointer]['content']) === 0) { + $regexp = '~(?:^\\d{' . SniffSettingsHelper::normalizeInteger($this->minDigitsBeforeDecimalPoint) . '}|\.\\d{' . SniffSettingsHelper::normalizeInteger($this->minDigitsAfterDecimalPoint) . '})~'; + if (preg_match($regexp, $tokens[$numberPointer]['content']) === 0) { return; } diff --git a/tests/Sniffs/Numbers/RequireNumericLiteralSeparatorSniffTest.php b/tests/Sniffs/Numbers/RequireNumericLiteralSeparatorSniffTest.php index 2a20136f9..aa9fcc99e 100644 --- a/tests/Sniffs/Numbers/RequireNumericLiteralSeparatorSniffTest.php +++ b/tests/Sniffs/Numbers/RequireNumericLiteralSeparatorSniffTest.php @@ -30,6 +30,30 @@ public function testErrors(): void self::assertSniffError($report, 7, RequireNumericLiteralSeparatorSniff::CODE_REQUIRED_NUMERIC_LITERAL_SEPARATOR); } + public function testModifiedSettingsNoErrors(): void + { + $report = self::checkFile(__DIR__ . '/data/requireNumericLiteralSeparatorModifiedSettingsNoErrors.php', [ + 'enable' => true, + 'minDigitsBeforeDecimalPoint' => 7, + 'minDigitsAfterDecimalPoint' => 6, + ]); + self::assertNoSniffErrorInFile($report); + } + + public function testModifiedSettingsErrors(): void + { + $report = self::checkFile(__DIR__ . '/data/requireNumericLiteralSeparatorModifiedSettingsErrors.php', [ + 'enable' => true, + 'minDigitsBeforeDecimalPoint' => 7, + 'minDigitsAfterDecimalPoint' => 6, + ]); + + self::assertSame(2, $report->getErrorCount()); + + self::assertSniffError($report, 3, RequireNumericLiteralSeparatorSniff::CODE_REQUIRED_NUMERIC_LITERAL_SEPARATOR); + self::assertSniffError($report, 4, RequireNumericLiteralSeparatorSniff::CODE_REQUIRED_NUMERIC_LITERAL_SEPARATOR); + } + public function testShouldNotReportIfSniffIsDisabled(): void { $report = self::checkFile(__DIR__ . '/data/requireNumericLiteralSeparatorErrors.php', [ diff --git a/tests/Sniffs/Numbers/data/requireNumericLiteralSeparatorModifiedSettingsErrors.php b/tests/Sniffs/Numbers/data/requireNumericLiteralSeparatorModifiedSettingsErrors.php new file mode 100644 index 000000000..3022b47c7 --- /dev/null +++ b/tests/Sniffs/Numbers/data/requireNumericLiteralSeparatorModifiedSettingsErrors.php @@ -0,0 +1,4 @@ += 7.4 + +1000000; +1.000000; diff --git a/tests/Sniffs/Numbers/data/requireNumericLiteralSeparatorModifiedSettingsNoErrors.php b/tests/Sniffs/Numbers/data/requireNumericLiteralSeparatorModifiedSettingsNoErrors.php new file mode 100644 index 000000000..6392ddf55 --- /dev/null +++ b/tests/Sniffs/Numbers/data/requireNumericLiteralSeparatorModifiedSettingsNoErrors.php @@ -0,0 +1,4 @@ += 7.4 + +100000; +1.00000;