Skip to content

Commit

Permalink
Add psalm
Browse files Browse the repository at this point in the history
  • Loading branch information
simPod committed Oct 8, 2020
1 parent 00e1917 commit 7dabfb1
Show file tree
Hide file tree
Showing 9 changed files with 63 additions and 13 deletions.
22 changes: 22 additions & 0 deletions .github/workflows/shepherd.yml
@@ -0,0 +1,22 @@
name: Shepherd

on:
pull_request:
push:
branches:
- "master"
schedule:
- cron: "0 17 * * *"

jobs:
build:
runs-on: ubuntu-18.04

steps:
- uses: actions/checkout@v2

- name: Install dependencies
run: composer install --prefer-dist --no-progress --no-suggest

- name: Run Psalm
run: vendor/bin/psalm --show-info=false --stats --output-format=github --shepherd --threads=$(nproc)
4 changes: 3 additions & 1 deletion composer.json
Expand Up @@ -25,8 +25,10 @@
"phpstan/phpstan-phpunit": "0.12.10",
"phpstan/phpstan-strict-rules": "0.12.4",
"phpunit/phpunit": "^9.0",
"psalm/plugin-phpunit": "^0.12.2",
"simpod/php-coveralls-mirror": "^3.0",
"thecodingmachine/phpstan-safe-rule": "^1.0"
"thecodingmachine/phpstan-safe-rule": "^1.0",
"vimeo/psalm": "^3.16"
},
"autoload": {
"psr-4": {
Expand Down
18 changes: 18 additions & 0 deletions psalm.xml
@@ -0,0 +1,18 @@
<?xml version="1.0"?>
<psalm
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
totallyTyped="true"
resolveFromConfigFile="true"
xmlns="https://getpsalm.org/schema/config"
xsi:schemaLocation="https://getpsalm.org/schema/config vendor/vimeo/psalm/config.xsd"
>
<projectFiles>
<directory name="src" />
<ignoreFiles>
<directory name="vendor" />
</ignoreFiles>
</projectFiles>
<plugins>
<pluginClass class="Psalm\PhpUnitPlugin\Plugin" />
</plugins>
</psalm>
6 changes: 4 additions & 2 deletions src/Builder/FieldBuilder.php
Expand Up @@ -9,8 +9,8 @@

class FieldBuilder
{
/** @var mixed[] */
private $parameters;
/** @var array<string, mixed|array<string|mixed>> */
private $parameters = [];

final private function __construct(string $name, Type $type)
{
Expand Down Expand Up @@ -51,6 +51,8 @@ public function addArgument(string $name, Type $type, ?string $description = nul
}

/**
* @see ResolveInfo
*
* @param callable(mixed, array<mixed>, mixed, ResolveInfo) : mixed $resolver
*
* @return static
Expand Down
4 changes: 2 additions & 2 deletions src/Builder/ObjectBuilder.php
Expand Up @@ -15,8 +15,8 @@ class ObjectBuilder extends TypeBuilder
/** @var callable|mixed[][] */
private $fields = [];

/** @var callable(mixed, array<mixed>, mixed, ResolveInfo) : mixed */
private $fieldResolver;
/** @var callable(mixed, array<mixed>, mixed, ResolveInfo) : mixed|null */
private $fieldResolver = null;

/**
* @return static
Expand Down
4 changes: 2 additions & 2 deletions src/Builder/TypeBuilder.php
Expand Up @@ -15,8 +15,8 @@ abstract class TypeBuilder
/** @var string */
private $name;

/** @var string */
private $description;
/** @var string|null */
private $description = null;

final protected function __construct(string $name)
{
Expand Down
4 changes: 2 additions & 2 deletions src/Builder/UnionBuilder.php
Expand Up @@ -12,8 +12,8 @@ class UnionBuilder extends TypeBuilder
/** @var callable(object, mixed, ResolveInfo)|null */
private $resolveType;

/** @var ObjectType[] */
private $types;
/** @var ObjectType[]|null */
private $types = null;

/**
* @return static
Expand Down
1 change: 1 addition & 0 deletions src/Error/FormattedError.php
Expand Up @@ -14,6 +14,7 @@ class FormattedError extends \GraphQL\Error\FormattedError
*/
public static function createFromException(Throwable $exception, int $debug = DebugFlag::NONE, $internalErrorMessage = null): array
{
/** @var array<string, array<string, mixed>> $arrayError */
$arrayError = parent::createFromException($exception, $debug, $internalErrorMessage);

if ($exception instanceof \GraphQL\Error\Error && $exception->getPrevious() instanceof Error) {
Expand Down
13 changes: 9 additions & 4 deletions src/Type/DateTimeType.php
Expand Up @@ -11,9 +11,11 @@
use GraphQL\Language\AST\StringValueNode;
use GraphQL\Type\Definition\CustomScalarType;
use GraphQL\Utils\Utils;
use InvalidArgumentException;
use SimPod\GraphQLUtils\Exception\InvalidArgument;

use function assert;
use function is_string;
use function Safe\preg_match;
use function Safe\substr;
use function strpos;
Expand Down Expand Up @@ -59,6 +61,10 @@ public function serialize($value): string
*/
public function parseValue($value): DateTimeImmutable
{
if (! is_string($value)) {
throw new InvalidArgumentException();
}

if (! $this->validateDatetime($value)) {
throw InvalidArgument::valueNotIso8601Compliant($value);
}
Expand All @@ -67,18 +73,17 @@ public function parseValue($value): DateTimeImmutable
}

/**
* @param Node $node
* @param mixed[]|null $variables
*
* @phpcsSuppress SlevomatCodingStandard.TypeHints.ParameterTypeHint.MissingNativeTypeHint
*/
public function parseLiteral($node, ?array $variables = null): ?DateTimeImmutable
public function parseLiteral(Node $valueNode, ?array $variables = null): ?DateTimeImmutable
{
if (! $node instanceof StringValueNode) {
if (! $valueNode instanceof StringValueNode) {
return null;
}

return $this->parseValue($node->value);
return $this->parseValue($valueNode->value);
}

private function validateDatetime(string $value): bool
Expand Down

0 comments on commit 7dabfb1

Please sign in to comment.