From 7bcb8473d1a44cbc8c95b96109162ad65c9501c0 Mon Sep 17 00:00:00 2001 From: Oldrich Salek Date: Tue, 11 Aug 2015 21:57:53 +0200 Subject: [PATCH 01/18] add .idea to .gitignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index de4a392..8cab567 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ /vendor /composer.lock +.idea From 6cb3176421b1de00a4032aad42c0465ca678e265 Mon Sep 17 00:00:00 2001 From: Oldrich Salek Date: Tue, 11 Aug 2015 21:58:44 +0200 Subject: [PATCH 02/18] add cs rule for phpt files --- src/code-checker.php | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/code-checker.php b/src/code-checker.php index e6dd680..54d8fac 100644 --- a/src/code-checker.php +++ b/src/code-checker.php @@ -365,6 +365,15 @@ public function is($extensions) } }; +// cs, missing @testCase in phpt files +$checker->tasks[] = function (CodeChecker $checker, $s) { + if ($checker->is('phpt')) { + if (!Strings::contains($s, ' * @testCase')) { + $checker->error('Missing @testCase'); + } + } +}; + $ok = $checker->run($options['-d']); exit($ok ? 0 : 1); From dc456fd80a73fd7b078b37258fbb414405c41172 Mon Sep 17 00:00:00 2001 From: Oldrich Salek Date: Fri, 21 Aug 2015 17:30:44 +0200 Subject: [PATCH 03/18] add cs rule for Entity --- src/code-checker.php | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/src/code-checker.php b/src/code-checker.php index 54d8fac..d28638b 100644 --- a/src/code-checker.php +++ b/src/code-checker.php @@ -6,8 +6,8 @@ * This file is part of the Nette Framework (http://nette.org) */ -use Nette\Utils\Strings; use Nette\CommandLine\Parser; +use Nette\Utils\Strings; if (@!include __DIR__ . '/../vendor/autoload.php') { echo('Install packages using `composer update`'); @@ -374,6 +374,23 @@ public function is($extensions) } }; +// cs, entity +$checker->tasks[] = function (CodeChecker $checker, $s) { + if ($checker->is('php')) { + if (Strings::contains($s, '@ORM\Entity') && !Strings::contains($s, '@ORM\Entity(')) { + $checker->fix('Missing Entity`()`'); + $s = str_replace('@ORM\Entity', '@ORM\Entity()', $s); + } + + if (Strings::contains($s, '@ORM\Table()')) { + $checker->fix('Missing `name="table_name"`'); + $s = str_replace('@ORM\Table()', '@ORM\Table(name="")', $s); + } + + return $s; + } +}; + $ok = $checker->run($options['-d']); exit($ok ? 0 : 1); From f7dc6aef94f16ed8109655b5389baee7dc9d0001 Mon Sep 17 00:00:00 2001 From: Oldrich Salek Date: Mon, 24 Aug 2015 15:48:08 +0200 Subject: [PATCH 04/18] refactoring, move to another class for better testing --- src/CodeCheckers/EntityChecker.php | 38 ++++++++++++++++++++++++++++++ src/code-checker.php | 17 ++----------- 2 files changed, 40 insertions(+), 15 deletions(-) create mode 100644 src/CodeCheckers/EntityChecker.php diff --git a/src/CodeCheckers/EntityChecker.php b/src/CodeCheckers/EntityChecker.php new file mode 100644 index 0000000..29716e0 --- /dev/null +++ b/src/CodeCheckers/EntityChecker.php @@ -0,0 +1,38 @@ +is('php')) { + return; + } + + if (Strings::contains($s, '@ORM\Entity') && !Strings::contains($s, '@ORM\Entity(')) { + $checker->fix('Missing Entity`()`'); + $s = str_replace('@ORM\Entity', '@ORM\Entity()', $s); + } + + if (Strings::contains($s, '@ORM\Table()')) { + $checker->fix('Missing `name="table_name"`'); + $s = str_replace('@ORM\Table()', '@ORM\Table(name="")', $s); + } + + if (Strings::contains($s, '@ORM\Table') && !Strings::contains($s, '@ORM\Table(')) { + $checker->fix('Missing `name="table_name"`'); + $s = str_replace('@ORM\Table', '@ORM\Table(name="")', $s); + } + + return $s; + }; + } +} diff --git a/src/code-checker.php b/src/code-checker.php index d28638b..2cd555b 100644 --- a/src/code-checker.php +++ b/src/code-checker.php @@ -6,6 +6,7 @@ * This file is part of the Nette Framework (http://nette.org) */ +use CodeCheckers\EntityChecker; use Nette\CommandLine\Parser; use Nette\Utils\Strings; @@ -375,21 +376,7 @@ public function is($extensions) }; // cs, entity -$checker->tasks[] = function (CodeChecker $checker, $s) { - if ($checker->is('php')) { - if (Strings::contains($s, '@ORM\Entity') && !Strings::contains($s, '@ORM\Entity(')) { - $checker->fix('Missing Entity`()`'); - $s = str_replace('@ORM\Entity', '@ORM\Entity()', $s); - } - - if (Strings::contains($s, '@ORM\Table()')) { - $checker->fix('Missing `name="table_name"`'); - $s = str_replace('@ORM\Table()', '@ORM\Table(name="")', $s); - } - - return $s; - } -}; +$checker->tasks[] = EntityChecker::createAnnotationsChecker(); $ok = $checker->run($options['-d']); From 6337b8d46fda527ec046877c082ad5e39c82f3ac Mon Sep 17 00:00:00 2001 From: Oldrich Salek Date: Mon, 24 Aug 2015 15:46:30 +0200 Subject: [PATCH 05/18] require nette/tester, autoloading add tests bootstrap add test for EntityChecker --- composer.json | 13 ++++ tests/.gitignore | 3 + tests/CodeCheckers/EntityChecker.phpt | 100 ++++++++++++++++++++++++++ tests/bootstrap.php | 34 +++++++++ 4 files changed, 150 insertions(+) create mode 100644 tests/.gitignore create mode 100644 tests/CodeCheckers/EntityChecker.phpt create mode 100644 tests/bootstrap.php diff --git a/composer.json b/composer.json index 30201d3..2e7ec43 100644 --- a/composer.json +++ b/composer.json @@ -17,5 +17,18 @@ "nette/neon": "~2.3", "latte/latte": "~2.3" }, + "require-dev": { + "nette/tester": "1.4.0" + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "autoload-dev": { + "classmap": [ + "tests/" + ] + }, "bin": ["src/code-checker.php"] } diff --git a/tests/.gitignore b/tests/.gitignore new file mode 100644 index 0000000..a7ffcfd --- /dev/null +++ b/tests/.gitignore @@ -0,0 +1,3 @@ +/*/output +/test.log +/tmp diff --git a/tests/CodeCheckers/EntityChecker.phpt b/tests/CodeCheckers/EntityChecker.phpt new file mode 100644 index 0000000..a597daa --- /dev/null +++ b/tests/CodeCheckers/EntityChecker.phpt @@ -0,0 +1,100 @@ +fixMessages[] = $message; + } + + + + public function is($file) + { + return TRUE; + } +} + + + +class EntityCheckerTest extends TestCase +{ + /** + * @var FakeChecker + */ + private $fakeChecker; + + + + public function setup() + { + $this->fakeChecker = new FakeChecker(); + } + + + + /** + * @dataProvider getDataForTestEntity + */ + public function testEntity($input, $output, $countOfFixMessages) + { + $annotationChecker = EntityChecker::createAnnotationsChecker(); + Assert::same($output, $annotationChecker($this->fakeChecker, $input)); + Assert::count($countOfFixMessages, $this->fakeChecker->fixMessages); + } + + + + public function getDataForTestEntity() + { + return [ + ['@ORM\Entity', '@ORM\Entity()', 1], + ['@ORM\Entity()', '@ORM\Entity()', 0], + ]; + } + + + + /** + * @dataProvider getDataForTestTableName + */ + public function testTableName($input, $output, $countOfFixMessages) + { + $annotationChecker = EntityChecker::createAnnotationsChecker(); + Assert::same($output, $annotationChecker($this->fakeChecker, $input)); + Assert::count($countOfFixMessages, $this->fakeChecker->fixMessages); + } + + + + public function getDataForTestTableName() + { + return [ + ['@ORM\Table()', '@ORM\Table(name="")', 1], + ['@ORM\Table', '@ORM\Table(name="")', 1], + ['@ORM\Table(name="table_name")', '@ORM\Table(name="table_name")', 0], + ]; + } +} + + + +\run(new EntityCheckerTest()); diff --git a/tests/bootstrap.php b/tests/bootstrap.php new file mode 100644 index 0000000..87b48f5 --- /dev/null +++ b/tests/bootstrap.php @@ -0,0 +1,34 @@ +run(isset($_SERVER['argv'][1]) ? $_SERVER['argv'][1] : NULL); +} From 79b8651a8c044d94b2be460657b9e4fd17067c75 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Filip=20Proch=C3=A1zka?= Date: Tue, 25 Aug 2015 19:46:27 +0200 Subject: [PATCH 06/18] Fixed autoloading when installed as lib --- src/code-checker.php | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) mode change 100644 => 100755 src/code-checker.php diff --git a/src/code-checker.php b/src/code-checker.php old mode 100644 new mode 100755 index 2cd555b..48a32e4 --- a/src/code-checker.php +++ b/src/code-checker.php @@ -10,7 +10,12 @@ use Nette\CommandLine\Parser; use Nette\Utils\Strings; -if (@!include __DIR__ . '/../vendor/autoload.php') { +$loaders = array_filter([ + __DIR__ . '/../vendor/autoload.php', + __DIR__ . '/../../../autoload.php', +], 'file_exists'); + +if (@!include reset($loaders)) { echo('Install packages using `composer update`'); exit(1); } From 7236d871dd6df0d166a170b7b4d186510ae90d9a Mon Sep 17 00:00:00 2001 From: Oldrich Salek Date: Wed, 26 Aug 2015 17:59:01 +0200 Subject: [PATCH 07/18] Add LineLength Checker --- src/CodeCheckers/LineLengthChecker.php | 29 ++++++ src/code-checker.php | 4 + tests/CodeCheckers/LineLengthChecker.phpt | 113 ++++++++++++++++++++++ tests/bootstrap.php | 1 + 4 files changed, 147 insertions(+) create mode 100644 src/CodeCheckers/LineLengthChecker.php create mode 100644 tests/CodeCheckers/LineLengthChecker.phpt diff --git a/src/CodeCheckers/LineLengthChecker.php b/src/CodeCheckers/LineLengthChecker.php new file mode 100644 index 0000000..2103e62 --- /dev/null +++ b/src/CodeCheckers/LineLengthChecker.php @@ -0,0 +1,29 @@ +is('php') && !$checker->is('phpt')) { + return; + } + + $i = 1; + foreach (explode("\n", $s) as $line) { + if (Strings::length($line) > $maxLineLength) { + $checker->warning(sprintf('Line %s have %d characters', Strings::truncate(Strings::trim($line), 30), Strings::length($line)), $i); + } + $i++; + } + }; + } +} diff --git a/src/code-checker.php b/src/code-checker.php index 48a32e4..e58f1ac 100755 --- a/src/code-checker.php +++ b/src/code-checker.php @@ -7,6 +7,7 @@ */ use CodeCheckers\EntityChecker; +use CodeCheckers\LineLengthChecker; use Nette\CommandLine\Parser; use Nette\Utils\Strings; @@ -383,6 +384,9 @@ public function is($extensions) // cs, entity $checker->tasks[] = EntityChecker::createAnnotationsChecker(); +//max line length +$checker->tasks[] = LineLengthChecker::createLineLengthChecker(210); + $ok = $checker->run($options['-d']); exit($ok ? 0 : 1); diff --git a/tests/CodeCheckers/LineLengthChecker.phpt b/tests/CodeCheckers/LineLengthChecker.phpt new file mode 100644 index 0000000..81a6a0c --- /dev/null +++ b/tests/CodeCheckers/LineLengthChecker.phpt @@ -0,0 +1,113 @@ +messages[] = $message; + } + + + + public function is($file) + { + return TRUE; + } +} + + + +class LineLengthCheckerTest extends Tester\TestCase +{ + + /** + * @var FakeChecker + */ + private $fakeChecker; + + + + public function setup() + { + $this->fakeChecker = new FakeChecker(); + } + + + + /** + * @dataProvider getDataForTestTooLengthFiles + */ + public function testTooLengthFiles($s, $countOfMessages) + { + $annotationChecker = LineLengthChecker::createLineLengthChecker(30); + $annotationChecker($this->fakeChecker, $s); + Assert::count($countOfMessages, $this->fakeChecker->messages); + foreach ($this->fakeChecker->messages as $message) { + Assert::match('%A%have%A%characters', $message); + } + } + + + + public function getDataForTestTooLengthFiles() + { + $s = str_repeat('a', 32); + + return [ + [$s, 1], + ["\n\n\n\n$s\n$s", 2], + ["foo\nbar\nfoo\n$s\n$s\n$s", 3], + ["__construct(foo$s,$s", 1], + ]; + } + + + + /** + * @dataProvider getDataForTestPass + */ + public function testPass($s) + { + $annotationChecker = LineLengthChecker::createLineLengthChecker(30); + $annotationChecker($this->fakeChecker, $s); + Assert::count(0, $this->fakeChecker->messages); + } + + + + public function getDataForTestPass() + { + $s = str_repeat('a', 15); + + return [ + [$s], + ["\n\n\n\n$s\n$s"], + ["foo\nbar\nfoo\n$s\n$s\n$s"], + ]; + } + +} + + + +\run(new LineLengthCheckerTest()); diff --git a/tests/bootstrap.php b/tests/bootstrap.php index 87b48f5..0294852 100644 --- a/tests/bootstrap.php +++ b/tests/bootstrap.php @@ -32,3 +32,4 @@ function run(Tester\TestCase $testCase) { $testCase->run(isset($_SERVER['argv'][1]) ? $_SERVER['argv'][1] : NULL); } + From 04785272389e1719e8b5b4304bb90adb56422507 Mon Sep 17 00:00:00 2001 From: Oldrich Salek Date: Thu, 27 Aug 2015 16:32:17 +0200 Subject: [PATCH 08/18] Convert tabs to 4 spaces and compute new line length --- src/CodeCheckers/LineLengthChecker.php | 1 + tests/CodeCheckers/LineLengthChecker.phpt | 16 ++++++++++++++++ 2 files changed, 17 insertions(+) diff --git a/src/CodeCheckers/LineLengthChecker.php b/src/CodeCheckers/LineLengthChecker.php index 2103e62..ec92398 100644 --- a/src/CodeCheckers/LineLengthChecker.php +++ b/src/CodeCheckers/LineLengthChecker.php @@ -19,6 +19,7 @@ public static function createLineLengthChecker($maxLineLength = 120) $i = 1; foreach (explode("\n", $s) as $line) { + $line = str_replace("\t", str_repeat(' ', 4), $line); if (Strings::length($line) > $maxLineLength) { $checker->warning(sprintf('Line %s have %d characters', Strings::truncate(Strings::trim($line), 30), Strings::length($line)), $i); } diff --git a/tests/CodeCheckers/LineLengthChecker.phpt b/tests/CodeCheckers/LineLengthChecker.phpt index 81a6a0c..a9f5818 100644 --- a/tests/CodeCheckers/LineLengthChecker.phpt +++ b/tests/CodeCheckers/LineLengthChecker.phpt @@ -106,6 +106,22 @@ class LineLengthCheckerTest extends Tester\TestCase ]; } + + + public function testTabsToSpaces() + { + $annotationChecker = LineLengthChecker::createLineLengthChecker(10); + $annotationChecker($this->fakeChecker, "\t\t"); + Assert::count(0, $this->fakeChecker->messages); + + $annotationChecker($this->fakeChecker, "\t\t\t"); //3 tabs = 12 characters + Assert::count(1, $this->fakeChecker->messages); + + foreach ($this->fakeChecker->messages as $message) { + Assert::match('%A%have%A%characters', $message); + } + } + } From 4678d567729a3877ab443a9e1c6776ede53efb70 Mon Sep 17 00:00:00 2001 From: Oldrich Salek Date: Tue, 1 Sep 2015 17:55:38 +0200 Subject: [PATCH 09/18] implement warning and error limits --- src/CodeCheckers/LineLengthChecker.php | 18 ++++++---- src/code-checker.php | 2 +- tests/CodeCheckers/LineLengthChecker.phpt | 43 ++++++++++++++++++----- 3 files changed, 48 insertions(+), 15 deletions(-) diff --git a/src/CodeCheckers/LineLengthChecker.php b/src/CodeCheckers/LineLengthChecker.php index ec92398..31f8f6b 100644 --- a/src/CodeCheckers/LineLengthChecker.php +++ b/src/CodeCheckers/LineLengthChecker.php @@ -10,20 +10,26 @@ class LineLengthChecker extends Object { - public static function createLineLengthChecker($maxLineLength = 120) + public static function createLineLengthChecker($warningLineLength = 140, $errorLineLength = 210) { - return function ($checker, $s) use ($maxLineLength) { + return function ($checker, $s) use ($warningLineLength, $errorLineLength) { if (!$checker->is('php') && !$checker->is('phpt')) { return; } - $i = 1; + $i = 0; foreach (explode("\n", $s) as $line) { + $i++; $line = str_replace("\t", str_repeat(' ', 4), $line); - if (Strings::length($line) > $maxLineLength) { - $checker->warning(sprintf('Line %s have %d characters', Strings::truncate(Strings::trim($line), 30), Strings::length($line)), $i); + $lineLength = Strings::length($line); + $message = sprintf('Line %s have %d characters', Strings::truncate(Strings::trim($line), 30), $lineLength); + if ($lineLength > $errorLineLength) { + $checker->error($message, $i); + continue; + } + if ($lineLength > $warningLineLength) { + $checker->warning($message, $i); } - $i++; } }; } diff --git a/src/code-checker.php b/src/code-checker.php index e58f1ac..b9e120f 100755 --- a/src/code-checker.php +++ b/src/code-checker.php @@ -385,7 +385,7 @@ public function is($extensions) $checker->tasks[] = EntityChecker::createAnnotationsChecker(); //max line length -$checker->tasks[] = LineLengthChecker::createLineLengthChecker(210); +$checker->tasks[] = LineLengthChecker::createLineLengthChecker(160, 200); $ok = $checker->run($options['-d']); diff --git a/tests/CodeCheckers/LineLengthChecker.phpt b/tests/CodeCheckers/LineLengthChecker.phpt index a9f5818..35dbe1c 100644 --- a/tests/CodeCheckers/LineLengthChecker.phpt +++ b/tests/CodeCheckers/LineLengthChecker.phpt @@ -18,13 +18,21 @@ require_once __DIR__ . '/../bootstrap.php'; class FakeChecker { - public $messages = []; + public $warning = []; + public $error = []; public function warning($message) { - $this->messages[] = $message; + $this->warning[] = $message; + } + + + + public function error($message) + { + $this->error[] = $message; } @@ -61,8 +69,8 @@ class LineLengthCheckerTest extends Tester\TestCase { $annotationChecker = LineLengthChecker::createLineLengthChecker(30); $annotationChecker($this->fakeChecker, $s); - Assert::count($countOfMessages, $this->fakeChecker->messages); - foreach ($this->fakeChecker->messages as $message) { + Assert::count($countOfMessages, $this->fakeChecker->warning); + foreach ($this->fakeChecker->warning as $message) { Assert::match('%A%have%A%characters', $message); } } @@ -90,7 +98,7 @@ class LineLengthCheckerTest extends Tester\TestCase { $annotationChecker = LineLengthChecker::createLineLengthChecker(30); $annotationChecker($this->fakeChecker, $s); - Assert::count(0, $this->fakeChecker->messages); + Assert::count(0, $this->fakeChecker->warning); } @@ -112,16 +120,35 @@ class LineLengthCheckerTest extends Tester\TestCase { $annotationChecker = LineLengthChecker::createLineLengthChecker(10); $annotationChecker($this->fakeChecker, "\t\t"); - Assert::count(0, $this->fakeChecker->messages); + Assert::count(0, $this->fakeChecker->warning); $annotationChecker($this->fakeChecker, "\t\t\t"); //3 tabs = 12 characters - Assert::count(1, $this->fakeChecker->messages); + Assert::count(1, $this->fakeChecker->warning); - foreach ($this->fakeChecker->messages as $message) { + foreach ($this->fakeChecker->warning as $message) { Assert::match('%A%have%A%characters', $message); } } + + public function testErrorAndWarning() + { + $annotationChecker = LineLengthChecker::createLineLengthChecker(10, 20); + $warningLine = str_repeat('a', 12); + $errorLine = str_repeat('a', 22); + + Assert::count(0, $this->fakeChecker->warning); + Assert::count(0, $this->fakeChecker->error); + $annotationChecker($this->fakeChecker, $warningLine); + + Assert::count(1, $this->fakeChecker->warning); + Assert::count(0, $this->fakeChecker->error); + + $annotationChecker($this->fakeChecker, $errorLine); + Assert::count(1, $this->fakeChecker->warning); + Assert::count(1, $this->fakeChecker->error); + } + } From 3c77be534b27b0aa0cf979232be21e8dd37e6cff Mon Sep 17 00:00:00 2001 From: Oldrich Salek Date: Wed, 2 Sep 2015 14:21:29 +0200 Subject: [PATCH 10/18] add Html5 checker --- src/CodeCheckers/Html5Checker.php | 25 +++++++ src/code-checker.php | 4 + tests/CodeCheckers/Html5Checker.phpt | 106 +++++++++++++++++++++++++++ 3 files changed, 135 insertions(+) create mode 100644 src/CodeCheckers/Html5Checker.php create mode 100644 tests/CodeCheckers/Html5Checker.phpt diff --git a/src/CodeCheckers/Html5Checker.php b/src/CodeCheckers/Html5Checker.php new file mode 100644 index 0000000..d383dd1 --- /dev/null +++ b/src/CodeCheckers/Html5Checker.php @@ -0,0 +1,25 @@ +is('latte')) { + return; + } + + if (Strings::match($s, '##')) { + $checker->error('contains XHTML'); + } + }; + } +} diff --git a/src/code-checker.php b/src/code-checker.php index b9e120f..ea621f3 100755 --- a/src/code-checker.php +++ b/src/code-checker.php @@ -8,6 +8,7 @@ use CodeCheckers\EntityChecker; use CodeCheckers\LineLengthChecker; +use CodeCheckers\Html5Checker; use Nette\CommandLine\Parser; use Nette\Utils\Strings; @@ -387,6 +388,9 @@ public function is($extensions) //max line length $checker->tasks[] = LineLengthChecker::createLineLengthChecker(160, 200); +//html5
+$checker->tasks[] = Html5Checker::createHtml5CheckerChecker(); + $ok = $checker->run($options['-d']); exit($ok ? 0 : 1); diff --git a/tests/CodeCheckers/Html5Checker.phpt b/tests/CodeCheckers/Html5Checker.phpt new file mode 100644 index 0000000..b6c93f2 --- /dev/null +++ b/tests/CodeCheckers/Html5Checker.phpt @@ -0,0 +1,106 @@ +errors[] = $message; + } + + + + public function is($file) + { + return TRUE; + } +} + + + +class Html5CheckerTest extends Tester\TestCase +{ + + /** + * @var FakeChecker + */ + private $fakeChecker; + + + + public function setup() + { + $this->fakeChecker = new FakeChecker(); + } + + + + /** + * @dataProvider getDataForTestPass + */ + public function testPass($s) + { + $html5Checker = Html5Checker::createHtml5CheckerChecker(); + $html5Checker($this->fakeChecker, $s); + Assert::count(0, $this->fakeChecker->errors); + } + + + + public function getDataForTestPass() + { + return [ + [NULL], + ['

lol

'], + ['
lol

'], + ]; + } + + + + /** + * @dataProvider getDataForTestFail + */ + public function testFail($s) + { + $html5Checker = Html5Checker::createHtml5CheckerChecker(); + $html5Checker($this->fakeChecker, $s); + Assert::count(1, $this->fakeChecker->errors); + } + + + + public function getDataForTestFail() + { + return [ + ['lol

'], + ['

lol

'], + ['
lol

'], + ["
"], + [""], + ]; + } +} + + + +\run(new Html5CheckerTest()); From 7ecbd15eb3835d6ee3ec1658c65e1c3de744cd5f Mon Sep 17 00:00:00 2001 From: Tom Barton Date: Tue, 22 Sep 2015 19:15:15 +0200 Subject: [PATCH 11/18] Added .neon boolean checker --- src/CodeCheckers/NeonChecker.php | 32 ++++++++ src/code-checker.php | 4 + tests/CodeCheckers/NeonChecker.phpt | 119 ++++++++++++++++++++++++++++ 3 files changed, 155 insertions(+) create mode 100644 src/CodeCheckers/NeonChecker.php create mode 100644 tests/CodeCheckers/NeonChecker.phpt diff --git a/src/CodeCheckers/NeonChecker.php b/src/CodeCheckers/NeonChecker.php new file mode 100644 index 0000000..f957978 --- /dev/null +++ b/src/CodeCheckers/NeonChecker.php @@ -0,0 +1,32 @@ +is('neon')) { + return; + } + + $lines = explode("\n", $s); + foreach ($lines as &$line) { + if (preg_match('~^(.*):( )?(yes|on|no|off)$~i', $line)) { + $message = sprintf('Boolean values should be true/false: %s', $line); + $checker->fix($message); + $line = preg_replace('~:( )?(yes|on)$~i', ': true', $line); + $line = preg_replace('~:( )?(no|off)$~i', ': false', $line); + } + } + return implode("\n", $lines); + }; + } +} diff --git a/src/code-checker.php b/src/code-checker.php index ea621f3..59c39ca 100755 --- a/src/code-checker.php +++ b/src/code-checker.php @@ -9,6 +9,7 @@ use CodeCheckers\EntityChecker; use CodeCheckers\LineLengthChecker; use CodeCheckers\Html5Checker; +use CodeCheckers\NeonChecker; use Nette\CommandLine\Parser; use Nette\Utils\Strings; @@ -391,6 +392,9 @@ public function is($extensions) //html5
$checker->tasks[] = Html5Checker::createHtml5CheckerChecker(); +//boolean (yes, on -> true, no, off -> false) +$checker->tasks[] = NeonChecker::createBooleanValuesChecker(); + $ok = $checker->run($options['-d']); exit($ok ? 0 : 1); diff --git a/tests/CodeCheckers/NeonChecker.phpt b/tests/CodeCheckers/NeonChecker.phpt new file mode 100644 index 0000000..5e41984 --- /dev/null +++ b/tests/CodeCheckers/NeonChecker.phpt @@ -0,0 +1,119 @@ +fixMessages[] = $message; + } + + + + public function is($file) + { + return TRUE; + } +} + + + +class NeonCheckerTest extends TestCase +{ + + /** + * @var FakeChecker + */ + private $fakeChecker; + + /** + * @var array + */ + private $input = [ + 'common: + php: + include_path: %libsDir% + date.timezone: Europe/Prague + auto_detect_line_endings: no + # zlib.output_compression: yes +', + 'common: + php: + include_path: %libsDir% + date.timezone: Europe/Prague + auto_detect_line_endings: true + # zlib.output_compression: true +', + ]; + + /** + * @var array + */ + private $output = [ + 'common: + php: + include_path: %libsDir% + date.timezone: Europe/Prague + auto_detect_line_endings: false + # zlib.output_compression: true +', + 'common: + php: + include_path: %libsDir% + date.timezone: Europe/Prague + auto_detect_line_endings: true + # zlib.output_compression: true +', + ]; + + + + public function setup() + { + $this->fakeChecker = new FakeChecker(); + } + + + + /** + * @dataProvider getDataForTestBooleanValues + */ + public function testBooleanValues($input, $output, $countOfFixMessages) + { + $booleanValuesChecker = NeonChecker::createBooleanValuesChecker(); + Assert::same($output, $booleanValuesChecker($this->fakeChecker, $input)); + Assert::count($countOfFixMessages, $this->fakeChecker->fixMessages); + } + + + + public function getDataForTestBooleanValues() + { + return [ + [$this->input[0], $this->output[0], 2], + [$this->input[1], $this->output[1], 0], + ]; + } + +} + + + +\run(new NeonCheckerTest()); From 5edd831949258489557a87bf65e098a4961ecd7d Mon Sep 17 00:00:00 2001 From: Tom Barton Date: Wed, 23 Sep 2015 18:41:07 +0200 Subject: [PATCH 12/18] Fixup whitespace in ./tests/bootstrap.php --- tests/bootstrap.php | 1 - 1 file changed, 1 deletion(-) diff --git a/tests/bootstrap.php b/tests/bootstrap.php index 0294852..87b48f5 100644 --- a/tests/bootstrap.php +++ b/tests/bootstrap.php @@ -32,4 +32,3 @@ function run(Tester\TestCase $testCase) { $testCase->run(isset($_SERVER['argv'][1]) ? $_SERVER['argv'][1] : NULL); } - From 6fe523c91b622e0676bc5f3f68a674c26e241e54 Mon Sep 17 00:00:00 2001 From: Oldrich Salek Date: Thu, 24 Sep 2015 18:16:08 +0200 Subject: [PATCH 13/18] cs typo --- src/CodeCheckers/NeonChecker.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/CodeCheckers/NeonChecker.php b/src/CodeCheckers/NeonChecker.php index f957978..4d96a7c 100644 --- a/src/CodeCheckers/NeonChecker.php +++ b/src/CodeCheckers/NeonChecker.php @@ -3,7 +3,6 @@ namespace CodeCheckers; use Nette\Object; -use Nette\Utils\Strings; @@ -26,6 +25,7 @@ public static function createBooleanValuesChecker() $line = preg_replace('~:( )?(no|off)$~i', ': false', $line); } } + return implode("\n", $lines); }; } From 8427ddac5801c7a7397570fbf57d32503c43818b Mon Sep 17 00:00:00 2001 From: Oldrich Salek Date: Tue, 3 Nov 2015 21:13:31 +0100 Subject: [PATCH 14/18] typo, renamed var --- tests/CodeCheckers/LineLengthChecker.phpt | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/tests/CodeCheckers/LineLengthChecker.phpt b/tests/CodeCheckers/LineLengthChecker.phpt index 35dbe1c..3bb285e 100644 --- a/tests/CodeCheckers/LineLengthChecker.phpt +++ b/tests/CodeCheckers/LineLengthChecker.phpt @@ -67,8 +67,8 @@ class LineLengthCheckerTest extends Tester\TestCase */ public function testTooLengthFiles($s, $countOfMessages) { - $annotationChecker = LineLengthChecker::createLineLengthChecker(30); - $annotationChecker($this->fakeChecker, $s); + $checker = LineLengthChecker::createLineLengthChecker(30); + $checker($this->fakeChecker, $s); Assert::count($countOfMessages, $this->fakeChecker->warning); foreach ($this->fakeChecker->warning as $message) { Assert::match('%A%have%A%characters', $message); @@ -96,8 +96,8 @@ class LineLengthCheckerTest extends Tester\TestCase */ public function testPass($s) { - $annotationChecker = LineLengthChecker::createLineLengthChecker(30); - $annotationChecker($this->fakeChecker, $s); + $checker = LineLengthChecker::createLineLengthChecker(30); + $checker($this->fakeChecker, $s); Assert::count(0, $this->fakeChecker->warning); } @@ -118,11 +118,11 @@ class LineLengthCheckerTest extends Tester\TestCase public function testTabsToSpaces() { - $annotationChecker = LineLengthChecker::createLineLengthChecker(10); - $annotationChecker($this->fakeChecker, "\t\t"); + $checker = LineLengthChecker::createLineLengthChecker(10); + $checker($this->fakeChecker, "\t\t"); Assert::count(0, $this->fakeChecker->warning); - $annotationChecker($this->fakeChecker, "\t\t\t"); //3 tabs = 12 characters + $checker($this->fakeChecker, "\t\t\t"); //3 tabs = 12 characters Assert::count(1, $this->fakeChecker->warning); foreach ($this->fakeChecker->warning as $message) { @@ -133,18 +133,18 @@ class LineLengthCheckerTest extends Tester\TestCase public function testErrorAndWarning() { - $annotationChecker = LineLengthChecker::createLineLengthChecker(10, 20); + $checker = LineLengthChecker::createLineLengthChecker(10, 20); $warningLine = str_repeat('a', 12); $errorLine = str_repeat('a', 22); Assert::count(0, $this->fakeChecker->warning); Assert::count(0, $this->fakeChecker->error); - $annotationChecker($this->fakeChecker, $warningLine); + $checker($this->fakeChecker, $warningLine); Assert::count(1, $this->fakeChecker->warning); Assert::count(0, $this->fakeChecker->error); - $annotationChecker($this->fakeChecker, $errorLine); + $checker($this->fakeChecker, $errorLine); Assert::count(1, $this->fakeChecker->warning); Assert::count(1, $this->fakeChecker->error); } From ce166aedf3b216067066741356f8ad4ce7aea049 Mon Sep 17 00:00:00 2001 From: Oldrich Salek Date: Tue, 3 Nov 2015 21:19:59 +0100 Subject: [PATCH 15/18] NULL value disable line length warnings --- src/CodeCheckers/LineLengthChecker.php | 3 ++- tests/CodeCheckers/LineLengthChecker.phpt | 25 ++++++++++++++++++++++- 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/src/CodeCheckers/LineLengthChecker.php b/src/CodeCheckers/LineLengthChecker.php index 31f8f6b..a9275ea 100644 --- a/src/CodeCheckers/LineLengthChecker.php +++ b/src/CodeCheckers/LineLengthChecker.php @@ -23,11 +23,12 @@ public static function createLineLengthChecker($warningLineLength = 140, $errorL $line = str_replace("\t", str_repeat(' ', 4), $line); $lineLength = Strings::length($line); $message = sprintf('Line %s have %d characters', Strings::truncate(Strings::trim($line), 30), $lineLength); + if ($lineLength > $errorLineLength) { $checker->error($message, $i); continue; } - if ($lineLength > $warningLineLength) { + if ($warningLineLength !== NULL && $lineLength > $warningLineLength) { $checker->warning($message, $i); } } diff --git a/tests/CodeCheckers/LineLengthChecker.phpt b/tests/CodeCheckers/LineLengthChecker.phpt index 3bb285e..6abef3f 100644 --- a/tests/CodeCheckers/LineLengthChecker.phpt +++ b/tests/CodeCheckers/LineLengthChecker.phpt @@ -68,6 +68,7 @@ class LineLengthCheckerTest extends Tester\TestCase public function testTooLengthFiles($s, $countOfMessages) { $checker = LineLengthChecker::createLineLengthChecker(30); + $checker($this->fakeChecker, $s); Assert::count($countOfMessages, $this->fakeChecker->warning); foreach ($this->fakeChecker->warning as $message) { @@ -97,6 +98,7 @@ class LineLengthCheckerTest extends Tester\TestCase public function testPass($s) { $checker = LineLengthChecker::createLineLengthChecker(30); + $checker($this->fakeChecker, $s); Assert::count(0, $this->fakeChecker->warning); } @@ -119,6 +121,7 @@ class LineLengthCheckerTest extends Tester\TestCase public function testTabsToSpaces() { $checker = LineLengthChecker::createLineLengthChecker(10); + $checker($this->fakeChecker, "\t\t"); Assert::count(0, $this->fakeChecker->warning); @@ -139,8 +142,8 @@ class LineLengthCheckerTest extends Tester\TestCase Assert::count(0, $this->fakeChecker->warning); Assert::count(0, $this->fakeChecker->error); - $checker($this->fakeChecker, $warningLine); + $checker($this->fakeChecker, $warningLine); Assert::count(1, $this->fakeChecker->warning); Assert::count(0, $this->fakeChecker->error); @@ -149,6 +152,26 @@ class LineLengthCheckerTest extends Tester\TestCase Assert::count(1, $this->fakeChecker->error); } + + + public function testDisableWarning() + { + $checker = LineLengthChecker::createLineLengthChecker(NULL, 20); + $warningLine = str_repeat('a', 12); + $errorLine = str_repeat('a', 22); + + Assert::count(0, $this->fakeChecker->warning); + Assert::count(0, $this->fakeChecker->error); + + $checker($this->fakeChecker, $warningLine); + Assert::count(0, $this->fakeChecker->warning); //zero, disabled warning + Assert::count(0, $this->fakeChecker->error); + + $checker($this->fakeChecker, $errorLine); + Assert::count(0, $this->fakeChecker->warning); + Assert::count(1, $this->fakeChecker->error); + } + } From 5249c00970e0c2fbde4dd88dc5a93833bea2b0a2 Mon Sep 17 00:00:00 2001 From: Oldrich Salek Date: Tue, 3 Nov 2015 21:21:32 +0100 Subject: [PATCH 16/18] programmers ignore the warnings --- src/code-checker.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/code-checker.php b/src/code-checker.php index 59c39ca..9de3d08 100755 --- a/src/code-checker.php +++ b/src/code-checker.php @@ -387,7 +387,7 @@ public function is($extensions) $checker->tasks[] = EntityChecker::createAnnotationsChecker(); //max line length -$checker->tasks[] = LineLengthChecker::createLineLengthChecker(160, 200); +$checker->tasks[] = LineLengthChecker::createLineLengthChecker(NULL, 200); //html5
$checker->tasks[] = Html5Checker::createHtml5CheckerChecker(); From 9201931e196433558f9924e5650d4454bd16bfa7 Mon Sep 17 00:00:00 2001 From: Oldrich Salek Date: Fri, 11 Dec 2015 10:06:43 +0100 Subject: [PATCH 17/18] change line length limit --- src/code-checker.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/code-checker.php b/src/code-checker.php index 8208a81..a53867d 100755 --- a/src/code-checker.php +++ b/src/code-checker.php @@ -387,7 +387,7 @@ public function is($extensions) $checker->tasks[] = EntityChecker::createAnnotationsChecker(); //max line length -$checker->tasks[] = LineLengthChecker::createLineLengthChecker(NULL, 200); +$checker->tasks[] = LineLengthChecker::createLineLengthChecker(NULL, 260); //html5
$checker->tasks[] = Html5Checker::createHtml5CheckerChecker(); From ea3b57f43cac26ac5bd072f126ca375097545f96 Mon Sep 17 00:00:00 2001 From: Olda Salek Date: Tue, 15 Mar 2016 10:56:52 +0100 Subject: [PATCH 18/18] update line length limit --- src/code-checker.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/code-checker.php b/src/code-checker.php index e76f791..15b0ec9 100755 --- a/src/code-checker.php +++ b/src/code-checker.php @@ -391,7 +391,7 @@ public function is($extensions) $checker->tasks[] = EntityChecker::createAnnotationsChecker(); //max line length -$checker->tasks[] = LineLengthChecker::createLineLengthChecker(NULL, 260); +$checker->tasks[] = LineLengthChecker::createLineLengthChecker(NULL, 360); //html5
$checker->tasks[] = Html5Checker::createHtml5CheckerChecker();