Skip to content

Commit

Permalink
Merge pull request #27 from voda/phpstan
Browse files Browse the repository at this point in the history
add phpstan/phpstan-strict-rules
  • Loading branch information
voda committed Apr 22, 2019
2 parents bb25d82 + e7c8077 commit 6dd6e97
Show file tree
Hide file tree
Showing 10 changed files with 51 additions and 50 deletions.
14 changes: 9 additions & 5 deletions composer.json
Expand Up @@ -7,11 +7,14 @@
],
"keywords":["gettext", "l10n"],
"license": "BSD-3-Clause",
"config": {
"sort-packages": true
},
"require": {
"php": ">=7.2.0",
"nikic/php-parser": "~4.2.0",
"latte/latte": "~2.5.0",
"nette/utils": "^3.0"
"nette/utils": "^3.0",
"nikic/php-parser": "~4.2.0"
},
"autoload": {
"psr-4": {"Vodacek\\GettextExtractor\\" : "src"}
Expand All @@ -26,8 +29,9 @@
"gettext-extractor.php"
],
"require-dev": {
"phpunit/phpunit": "^8",
"phpstan/phpstan-shim": "^0.11.5",
"phpstan/phpstan-phpunit": "^0.11.0"
"phpstan/phpstan": "^0.11.5",
"phpstan/phpstan-phpunit": "^0.11.0",
"phpstan/phpstan-strict-rules": "^0.11.0",
"phpunit/phpunit": "^8"
}
}
1 change: 1 addition & 0 deletions phpstan.neon.dist
Expand Up @@ -11,3 +11,4 @@ parameters:
includes:
- vendor/phpstan/phpstan-phpunit/extension.neon
- vendor/phpstan/phpstan-phpunit/rules.neon
- vendor/phpstan/phpstan-strict-rules/rules.neon
4 changes: 2 additions & 2 deletions src/Extractor.php
Expand Up @@ -70,7 +70,7 @@ public function __construct(string $logFile = 'php://stderr') {
* @param string $message
*/
public function log(string $message): void {
if ($this->logFile) {
if ($this->logFile !== '') {
file_put_contents($this->logFile, "$message\n", FILE_APPEND);
}
}
Expand Down Expand Up @@ -314,6 +314,6 @@ private function addMessages(array $messages, string $file): void {
private function formatMessage(string $message, string $prefix = null): string {
$message = addcslashes($message, self::ESCAPE_CHARS);
$message = '"' . str_replace("\n", "\\n\"\n\"", $message) . '"';
return ($prefix ? $prefix.' ' : '') . $message;
return ($prefix !== null ? $prefix.' ' : '') . $message;
}
}
6 changes: 3 additions & 3 deletions src/Filters/AFilter.php
Expand Up @@ -25,20 +25,20 @@ abstract class AFilter {
* @return self
*/
public function addFunction(string $functionName, int $singular = 1, int $plural = null, int $context = null): self {
if (!is_int($singular) || $singular <= 0) {
if ($singular <= 0) {
throw new InvalidArgumentException('Invalid argument type or value given for parameter $singular.');
}
$function = array(
Extractor::SINGULAR => $singular
);
if ($plural !== null) {
if (!is_int($plural) || $plural <= 0) {
if ($plural <= 0) {
throw new InvalidArgumentException('Invalid argument type or value given for parameter $plural.');
}
$function[Extractor::PLURAL] = $plural;
}
if ($context !== null) {
if (!is_int($context) || $context <= 0) {
if ($context <= 0) {
throw new InvalidArgumentException('Invalid argument type or value given for parameter $context.');
}
$function[Extractor::CONTEXT] = $context;
Expand Down
4 changes: 2 additions & 2 deletions src/Filters/LatteFilter.php
Expand Up @@ -47,7 +47,7 @@ public function extract(string $file): array {
}

$name = $this->findMacroName($token->text, $functions);
if (!$name) {
if ($name === null) {
continue;
}
$value = $this->trimMacroValue($name, $token->value);
Expand All @@ -59,7 +59,7 @@ public function extract(string $file): array {
if ($stmts[0] instanceof Expression && $stmts[0]->expr instanceof FuncCall) {
foreach ($this->functions[$name] as $definition) {
$message = $this->processFunction($definition, $stmts[0]->expr);
if ($message) {
if ($message !== []) {
$message[Extractor::LINE] = $token->line;
$data[] = $message;
}
Expand Down
4 changes: 2 additions & 2 deletions src/Filters/PHPFilter.php
Expand Up @@ -54,7 +54,7 @@ public function extract(string $file): array {
public function enterNode(Node $node) {
$name = null;
$args = [];
if (($node instanceof MethodCall || $node instanceof StaticCall) && $node->name instanceof Identifier && is_string($node->name->name)) {
if (($node instanceof MethodCall || $node instanceof StaticCall) && $node->name instanceof Identifier) {
$name = $node->name->name;
$args = $node->args;
} elseif ($node instanceof FuncCall && $node->name instanceof Name) {
Expand All @@ -77,7 +77,7 @@ public function enterNode(Node $node) {
* @param Node $node
* @param Arg[] $args
*/
private function processFunction(array $definition, Node $node, array $args) {
private function processFunction(array $definition, Node $node, array $args): void {
$message = array(
Extractor::LINE => $node->getLine()
);
Expand Down
2 changes: 1 addition & 1 deletion tests/integration/NetteFormsTest.php
Expand Up @@ -24,7 +24,7 @@ public function testForm(): void {
throw new \RuntimeException('Failed to create temporary file.');
}
$this->object->save($temp);
$this->assertFileEquals(__DIR__.'/data/form.pot', $temp);
self::assertFileEquals(__DIR__.'/data/form.pot', $temp);
unlink($temp);
}
}
2 changes: 1 addition & 1 deletion tests/unit/GettextExtractor/Filters/AFilterTest.php
Expand Up @@ -20,7 +20,7 @@ protected function setUp(): void {
/**
* @dataProvider dataProvider_AddingFunctionWithInvalidParameter
*/
public function testAddingFunctionWithInvalidParameter($s, $p, $c): void {
public function testAddingFunctionWithInvalidParameter(int $s, ?int $p, ?int $c): void {
$this->expectException(InvalidArgumentException::class);
$this->object->addFunction('function', $s, $p, $c);
}
Expand Down
18 changes: 8 additions & 10 deletions tests/unit/GettextExtractor/Filters/LatteFilterTest.php
Expand Up @@ -18,26 +18,24 @@ protected function setUp(): void {
public function testExtract(): void {
$messages = $this->object->extract(__DIR__ . '/../../data/latte/default.latte');

$this->assertIsArray($messages);

$this->assertContains(array(
self::assertContains(array(
GE\Extractor::LINE => 2,
GE\Extractor::SINGULAR => 'A message!'
), $messages);

$this->assertContains(array(
self::assertContains(array(
GE\Extractor::LINE => 3,
GE\Extractor::SINGULAR => 'Another message!',
GE\Extractor::CONTEXT => 'context'
), $messages);

$this->assertContains(array(
self::assertContains(array(
GE\Extractor::LINE => 4,
GE\Extractor::SINGULAR => 'I see %d little indian!',
GE\Extractor::PLURAL => 'I see %d little indians!'
), $messages);

$this->assertContains(array(
self::assertContains(array(
GE\Extractor::LINE => 5,
GE\Extractor::SINGULAR => 'I see %d little indian!',
GE\Extractor::PLURAL => 'I see %d little indians!',
Expand All @@ -47,19 +45,19 @@ public function testExtract(): void {

public function testNoValidMessages(): void {
$messages = $this->object->extract(__DIR__ . '/../../data/latte/noMessages.latte');
$this->assertSame(array(), $messages);
self::assertSame(array(), $messages);
}

public function testConstantsArrayMethodsAndFunctions(): void {
$messages = $this->object->extract(__DIR__ . '/../../data/latte/test.latte');
$this->assertCount(1, $messages);
self::assertCount(1, $messages);
$expected = array(
GE\Extractor::LINE => 1,
GE\Extractor::SINGULAR => 'Message'
);
ksort($messages[0]);
ksort($expected);
$this->assertSame(array($expected), $messages);
self::assertSame(array($expected), $messages);
}

/**
Expand All @@ -68,7 +66,7 @@ public function testConstantsArrayMethodsAndFunctions(): void {
public function testExtractMultilineMessage(): void {
$messages = $this->object->extract(__DIR__ . '/../../data/latte/bug6.latte');

$this->assertContains(array(
self::assertContains(array(
GE\Extractor::LINE => 1,
GE\Extractor::SINGULAR => "A\nmultiline\nmessage!"
), $messages);
Expand Down
46 changes: 22 additions & 24 deletions tests/unit/GettextExtractor/Filters/PHPFilterTest.php
Expand Up @@ -19,26 +19,24 @@ protected function setUp(): void {
public function testExtract(): void {
$messages = $this->object->extract(__DIR__ . '/../../data/php/default.php');

$this->assertIsArray($messages);

$this->assertContains(array(
self::assertContains(array(
GE\Extractor::LINE => 2,
GE\Extractor::SINGULAR => 'A message!'
), $messages);

$this->assertContains(array(
self::assertContains(array(
GE\Extractor::LINE => 3,
GE\Extractor::SINGULAR => 'Another message!',
GE\Extractor::CONTEXT => 'context'
), $messages);

$this->assertContains(array(
self::assertContains(array(
GE\Extractor::LINE => 4,
GE\Extractor::SINGULAR => 'I see %d little indian!',
GE\Extractor::PLURAL => 'I see %d little indians!'
), $messages);

$this->assertContains(array(
self::assertContains(array(
GE\Extractor::LINE => 5,
GE\Extractor::SINGULAR => 'I see %d little indian!',
GE\Extractor::PLURAL => 'I see %d little indians!',
Expand All @@ -48,32 +46,32 @@ public function testExtract(): void {

public function testNoValidMessages(): void {
$messages = $this->object->extract(__DIR__ . '/../../data/php/noMessages.php');
$this->assertSame(array(), $messages);
self::assertSame(array(), $messages);
}

public function testNestedFunctions(): void {
$messages = $this->object->extract(__DIR__ . '/../../data/php/nestedFunctions.php');
$this->assertCount(5, $messages);
self::assertCount(5, $messages);

$this->assertContains(array(
self::assertContains(array(
GE\Extractor::LINE => 4,
GE\Extractor::SINGULAR => 'Nested function.'
), $messages);
$this->assertContains(array(
self::assertContains(array(
GE\Extractor::LINE => 5,
GE\Extractor::SINGULAR => 'Nested function 2.',
GE\Extractor::CONTEXT => 'context'
), $messages);
$this->assertContains(array(
self::assertContains(array(
GE\Extractor::LINE => 6,
GE\Extractor::SINGULAR => "%d meeting wasn't imported.",
GE\Extractor::PLURAL => "%d meetings weren't imported."
), $messages);
$this->assertContains(array(
self::assertContains(array(
GE\Extractor::LINE => 8,
GE\Extractor::SINGULAR => 'Please provide a text 2.'
), $messages);
$this->assertContains(array(
self::assertContains(array(
GE\Extractor::LINE => 9,
GE\Extractor::SINGULAR => 'Please provide a text 3.'
), $messages);
Expand All @@ -82,7 +80,7 @@ public function testNestedFunctions(): void {
public function testConstantAsParameter(): void {
$messages = $this->object->extract(__DIR__ . '/../../data/php/constantAsParameter.php');

$this->assertContains(array(
self::assertContains(array(
GE\Extractor::LINE => 2,
GE\Extractor::SINGULAR => 'Please provide a text.'
), $messages);
Expand All @@ -91,7 +89,7 @@ public function testConstantAsParameter(): void {
public function testMessageWithNewlines(): void {
$messages = $this->object->extract(__DIR__ . '/../../data/php/messageWithNewlines.php');

$this->assertContains(array(
self::assertContains(array(
GE\Extractor::LINE => 2,
GE\Extractor::SINGULAR => "A\nmessage!"
), $messages);
Expand All @@ -101,7 +99,7 @@ public function testArrayAsParameter(): void {
$this->object->addFunction('addConfirmer', 3);
$messages = $this->object->extract(__DIR__ . '/../../data/php/arrayAsParameter.php');

$this->assertContains(array(
self::assertContains(array(
GE\Extractor::LINE => 2,
GE\Extractor::SINGULAR => 'Really delete?'
), $messages);
Expand All @@ -111,7 +109,7 @@ public function testSingularAndPluralMessageFromOneParameter(): void {
$this->object->addFunction('plural', 1, 1);
$messages = $this->object->extract(__DIR__ . '/../../data/php/singularAndPluralMessageFromOneParameter.php');

$this->assertContains(array(
self::assertContains(array(
GE\Extractor::LINE => 2,
GE\Extractor::SINGULAR => '%d weeks ago',
GE\Extractor::PLURAL => '%d weeks ago',
Expand All @@ -125,11 +123,11 @@ public function testArrayWithTranslationsAsParameter(): void {
$this->object->addFunction('addSelect', 3);
$messages = $this->object->extract(__DIR__ . '/../../data/php/arrayWithTranslationsAsParameter.php');

$this->assertContains(array(
self::assertContains(array(
GE\Extractor::LINE => 2,
GE\Extractor::SINGULAR => 'item 1'
), $messages);
$this->assertContains(array(
self::assertContains(array(
GE\Extractor::LINE => 2,
GE\Extractor::SINGULAR => 'item 2'
), $messages);
Expand All @@ -143,25 +141,25 @@ public function testMultipleMessagesFromSingleFunction(): void {
$this->object->addFunction('bar', 2);
$messages = $this->object->extract(__DIR__ . '/../../data/php/multipleMessagesFromSingleFunction.php');

$this->assertContains(array(
self::assertContains(array(
GE\Extractor::LINE => 2,
GE\Extractor::SINGULAR => 'Value A'
), $messages);
$this->assertContains(array(
self::assertContains(array(
GE\Extractor::LINE => 2,
GE\Extractor::SINGULAR => 'Value B'
), $messages);
}

public function testCallable(): void {
$messages = $this->object->extract(__DIR__ . '/../../data/php/callable.php');
$this->assertEmpty($messages);
self::assertEmpty($messages);
}

public function testStaticFunctions(): void {
$messages = $this->object->extract(__DIR__ . '/../../data/php/staticFunctions.php');

$this->assertContains(array(
self::assertContains(array(
GE\Extractor::LINE => 2,
GE\Extractor::SINGULAR => 'Static function'
), $messages);
Expand All @@ -173,6 +171,6 @@ public function testStaticFunctions(): void {
public function testNoMessagesInArray(): void {
$this->object->addFunction('translateArray');
$messages = $this->object->extract(__DIR__ . '/../../data/php/bug11.php');
$this->assertEmpty($messages);
self::assertEmpty($messages);
}
}

0 comments on commit 6dd6e97

Please sign in to comment.