introduce deptrac, move a whole lot of stuff around

master
Josha von Gizycki 3 weeks ago
parent a58db4b5d7
commit ee8253ba71

1
.gitignore vendored

@ -2,3 +2,4 @@
var var
vendor vendor
tests/.phpunit.cache tests/.phpunit.cache
.deptrac.cache

@ -1,5 +1,5 @@
.PHONY: cc .PHONY: cc
cc: stan test cc: stan test deptrac
.PHONY: stan .PHONY: stan
stan: stan:
@ -14,3 +14,11 @@ classes: var/classes.png
var/classes.png: $(shell find src) var/classes.png: $(shell find src)
vendor/bin/php-class-diagram src | plantuml -p > var/classes.png vendor/bin/php-class-diagram src | plantuml -p > var/classes.png
.PHONY: deptrac
deptrac:
vendor/bin/deptrac
.PHONE: deptrac-display
deptrac-display:
vendor/bin/deptrac --formatter=graphviz-display

@ -17,6 +17,7 @@
"phpunit/phpunit": "^12.4", "phpunit/phpunit": "^12.4",
"phpstan/phpstan": "^2.1", "phpstan/phpstan": "^2.1",
"smeghead/php-class-diagram": "^1.6", "smeghead/php-class-diagram": "^1.6",
"ext-pdo_sqlite": "*" "ext-pdo_sqlite": "*",
"deptrac/deptrac": "^4.7"
} }
} }

2165
composer.lock generated

File diff suppressed because it is too large Load Diff

@ -0,0 +1,38 @@
<?php
declare(strict_types=1);
use Deptrac\Deptrac\Contract\Config\Collector\BoolConfig;
use Deptrac\Deptrac\Contract\Config\Collector\ClassLikeConfig;
use Deptrac\Deptrac\Contract\Config\Collector\LayerConfig;
use Deptrac\Deptrac\Contract\Config\DeptracConfig;
use Deptrac\Deptrac\Contract\Config\Layer;
use Deptrac\Deptrac\Contract\Config\Ruleset;
return static function (DeptracConfig $config): void {
$config
->paths('./src')
->excludeFiles('#.*test.*#')
->layers(
$analyzePublic = Layer::withName('AnalyzePublic')->collectors(
ClassLikeConfig::create('Kartierung\\Analyze\\Exception\\.+'),
ClassLikeConfig::create('Kartierung\\Analyze\\Result\\.+')
),
$analyze = Layer::withName('Analyze')->collectors(
BoolConfig::create(
must: [ClassLikeConfig::create('Kartierung\\Analyze\\.+')],
mustNot: [
LayerConfig::create($analyzePublic)
]
)
),
$attribute = Layer::withName('Attribute')->collectors(
ClassLikeConfig::create('Kartierung\\Attribute\\.*'),
),
)
->rulesets(
Ruleset::forLayer($analyze)
->accesses($attribute)
->accesses($analyzePublic),
);
};

@ -4,13 +4,15 @@ declare(strict_types=1);
namespace Kartierung\Analyze; namespace Kartierung\Analyze;
use Kartierung\Analyze\Exception\InvalidEntity;
use Kartierung\Analyze\Result\EntityField;
use Kartierung\Analyze\Result\EntityResult;
use Kartierung\Analyze\Result\FieldAccess;
use Kartierung\Attribute\Column; use Kartierung\Attribute\Column;
use Kartierung\Attribute\Id; use Kartierung\Attribute\Id;
use Kartierung\Attribute\Table; use Kartierung\Attribute\Table;
use ReflectionClass; use ReflectionClass;
use ReflectionNamedType;
use ReflectionParameter; use ReflectionParameter;
use ReflectionProperty;
/** /**
* @template E of object * @template E of object

@ -2,7 +2,7 @@
declare(strict_types=1); declare(strict_types=1);
namespace Kartierung\Analyze; namespace Kartierung\Analyze\Exception;
use RuntimeException; use RuntimeException;
use Throwable; use Throwable;

@ -2,7 +2,7 @@
declare(strict_types=1); declare(strict_types=1);
namespace Kartierung\Analyze; namespace Kartierung\Analyze\Exception;
use RuntimeException; use RuntimeException;
use Throwable; use Throwable;

@ -4,6 +4,11 @@ declare(strict_types=1);
namespace Kartierung\Analyze; namespace Kartierung\Analyze;
use Kartierung\Analyze\Exception\InvalidRepository;
use Kartierung\Analyze\Result\ParameterFunction;
use Kartierung\Analyze\Result\RepositoryMethod;
use Kartierung\Analyze\Result\RepositoryMethodParameter;
use Kartierung\Analyze\Result\RepositoryResult;
use Kartierung\Attribute\ListResultOf; use Kartierung\Attribute\ListResultOf;
use Kartierung\Attribute\Query; use Kartierung\Attribute\Query;
use Kartierung\Repository\ResolutionStrategy\ResolutionStrategyFactory; use Kartierung\Repository\ResolutionStrategy\ResolutionStrategyFactory;

@ -2,7 +2,7 @@
declare(strict_types=1); declare(strict_types=1);
namespace Kartierung\Analyze; namespace Kartierung\Analyze\Result;
/** /**
* @template P of object * @template P of object

@ -2,7 +2,7 @@
declare(strict_types=1); declare(strict_types=1);
namespace Kartierung\Analyze; namespace Kartierung\Analyze\Result;
/** /**
* @template E of object * @template E of object
@ -11,7 +11,7 @@ readonly class EntityResult
{ {
/** /**
* @param class-string<E> $classFqcn * @param class-string<E> $classFqcn
* @param list<EntityField<object>> $fields * @param EntityField $fields
* @param EntityField<E> $idField * @param EntityField<E> $idField
*/ */
public function __construct( public function __construct(

@ -2,7 +2,7 @@
declare(strict_types=1); declare(strict_types=1);
namespace Kartierung\Analyze; namespace Kartierung\Analyze\Result;
enum FieldAccess enum FieldAccess
{ {

@ -2,7 +2,7 @@
declare(strict_types=1); declare(strict_types=1);
namespace Kartierung\Analyze; namespace Kartierung\Analyze\Result;
enum ParameterFunction enum ParameterFunction
{ {

@ -2,7 +2,7 @@
declare(strict_types=1); declare(strict_types=1);
namespace Kartierung\Analyze; namespace Kartierung\Analyze\Result;
use Kartierung\Repository\ResolutionStrategy\ResolutionStrategy; use Kartierung\Repository\ResolutionStrategy\ResolutionStrategy;

@ -2,7 +2,7 @@
declare(strict_types=1); declare(strict_types=1);
namespace Kartierung\Analyze; namespace Kartierung\Analyze\Result;
readonly class RepositoryMethodParameter readonly class RepositoryMethodParameter
{ {

@ -2,7 +2,7 @@
declare(strict_types=1); declare(strict_types=1);
namespace Kartierung\Analyze; namespace Kartierung\Analyze\Result;
readonly class RepositoryResult readonly class RepositoryResult
{ {

@ -4,7 +4,7 @@ declare(strict_types=1);
namespace Kartierung\Repository; namespace Kartierung\Repository;
use Kartierung\Analyze\InvalidRepository; use Kartierung\Analyze\Exception\InvalidRepository;
use Kartierung\Attribute\Query; use Kartierung\Attribute\Query;
use ReflectionClass; use ReflectionClass;

@ -4,7 +4,7 @@ declare(strict_types=1);
namespace Kartierung\Repository\ResolutionStrategy; namespace Kartierung\Repository\ResolutionStrategy;
use Kartierung\Analyze\RepositoryMethod; use Kartierung\Analyze\Result\RepositoryMethod;
use Kartierung\Sql\LazyQuery; use Kartierung\Sql\LazyQuery;
use PDO; use PDO;

@ -5,10 +5,10 @@ declare(strict_types=1);
namespace Kartierung\Repository\ResolutionStrategy; namespace Kartierung\Repository\ResolutionStrategy;
use Kartierung\Analyze\EntityAnalyzer; use Kartierung\Analyze\EntityAnalyzer;
use Kartierung\Analyze\EntityField; use Kartierung\Analyze\Result\EntityField;
use Kartierung\Analyze\RepositoryMethod; use Kartierung\Analyze\Result\RepositoryMethod;
use Kartierung\Sql\LazyQuery;
use Kartierung\Sql\DataToEntityMapper; use Kartierung\Sql\DataToEntityMapper;
use Kartierung\Sql\LazyQuery;
use PDO; use PDO;
use PDOStatement; use PDOStatement;

@ -4,7 +4,7 @@ declare(strict_types=1);
namespace Kartierung\Repository\ResolutionStrategy; namespace Kartierung\Repository\ResolutionStrategy;
use Kartierung\Analyze\RepositoryMethod; use Kartierung\Analyze\Result\RepositoryMethod;
use Kartierung\Sql\LazyQuery; use Kartierung\Sql\LazyQuery;
use PDO; use PDO;

@ -4,7 +4,7 @@ declare(strict_types=1);
namespace Kartierung\Repository\ResolutionStrategy; namespace Kartierung\Repository\ResolutionStrategy;
use Kartierung\Analyze\RepositoryMethod; use Kartierung\Analyze\Result\RepositoryMethod;
use Kartierung\Sql\LazyQuery; use Kartierung\Sql\LazyQuery;
interface ResolutionStrategy interface ResolutionStrategy

@ -4,7 +4,7 @@ declare(strict_types=1);
namespace Kartierung\Repository\ResolutionStrategy; namespace Kartierung\Repository\ResolutionStrategy;
use Kartierung\Analyze\InvalidRepository; use Kartierung\Analyze\Exception\InvalidRepository;
class ResolutionStrategyFactory class ResolutionStrategyFactory
{ {

@ -4,7 +4,7 @@ declare(strict_types=1);
namespace Kartierung\Repository\ResolutionStrategy; namespace Kartierung\Repository\ResolutionStrategy;
use Kartierung\Analyze\RepositoryMethod; use Kartierung\Analyze\Result\RepositoryMethod;
use Kartierung\Sql\LazyQuery; use Kartierung\Sql\LazyQuery;
use PDO; use PDO;

@ -4,7 +4,7 @@ declare(strict_types=1);
namespace Kartierung\Repository\ResolutionStrategy; namespace Kartierung\Repository\ResolutionStrategy;
use Kartierung\Analyze\RepositoryMethod; use Kartierung\Analyze\Result\RepositoryMethod;
use Kartierung\Sql\LazyQuery; use Kartierung\Sql\LazyQuery;
use PDO; use PDO;

@ -4,9 +4,7 @@ declare(strict_types=1);
namespace Kartierung\Sql; namespace Kartierung\Sql;
use Kartierung\Analyze\EntityField; use Kartierung\Analyze\Result\EntityResult;
use Kartierung\Analyze\EntityResult;
use Kartierung\Analyze\FieldAccess;
/** /**
* @template E of object * @template E of object

@ -4,6 +4,9 @@ declare(strict_types=1);
namespace Kartierung\Analyze; namespace Kartierung\Analyze;
use Kartierung\Analyze\Exception\InvalidEntity;
use Kartierung\Analyze\Result\EntityField;
use Kartierung\Analyze\Result\FieldAccess;
use Kartierung\EntityWithoutId; use Kartierung\EntityWithoutId;
use Kartierung\EntityWithoutTableAttribute; use Kartierung\EntityWithoutTableAttribute;
use Kartierung\EntityWithTwoIds; use Kartierung\EntityWithTwoIds;

@ -4,9 +4,9 @@ declare(strict_types=1);
namespace Analyze; namespace Analyze;
use Kartierung\Analyze\InvalidRepository; use Kartierung\Analyze\Exception\InvalidRepository;
use Kartierung\Analyze\RepositoryAnalyzer; use Kartierung\Analyze\RepositoryAnalyzer;
use Kartierung\Analyze\RepositoryMethodParameter; use Kartierung\Analyze\Result\RepositoryMethodParameter;
use Kartierung\FullEntity; use Kartierung\FullEntity;
use Kartierung\InvalidListResultOfRepository; use Kartierung\InvalidListResultOfRepository;
use Kartierung\Repository; use Kartierung\Repository;

@ -4,7 +4,7 @@ declare(strict_types=1);
namespace Kartierung\Repository\ResolutionStrategy; namespace Kartierung\Repository\ResolutionStrategy;
use Kartierung\Analyze\RepositoryMethod; use Kartierung\Analyze\Result\RepositoryMethod;
use PHPUnit\Framework\Attributes\Group; use PHPUnit\Framework\Attributes\Group;
use PHPUnit\Framework\TestCase; use PHPUnit\Framework\TestCase;

@ -4,9 +4,9 @@ declare(strict_types=1);
namespace Kartierung\Sql; namespace Kartierung\Sql;
use Kartierung\Analyze\EntityField; use Kartierung\Analyze\Result\EntityField;
use Kartierung\Analyze\EntityResult; use Kartierung\Analyze\Result\EntityResult;
use Kartierung\Analyze\FieldAccess; use Kartierung\Analyze\Result\FieldAccess;
use PHPUnit\Framework\TestCase; use PHPUnit\Framework\TestCase;
class DateToEntityMapperTest extends TestCase class DateToEntityMapperTest extends TestCase

Loading…
Cancel
Save