Skip to content

Commit 9e9eb20

Browse files
committed
refactor: cover website with mago
1 parent 5a1c62e commit 9e9eb20

40 files changed

Lines changed: 363 additions & 144 deletions

mago.toml

Lines changed: 35 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,41 @@ includes = [
2424
"src/bridge/symfony/filesystem-bundle/src/Flow/Bridge/Symfony/FilesystemBundle/FlowFilesystemBundle.php",
2525
"src/bridge/symfony/postgresql-bundle/src/Flow/Bridge/Symfony/PostgreSqlBundle/FlowPostgreSqlBundle.php",
2626
"src/bridge/symfony/telemetry-bundle/src/Flow/Bridge/Symfony/TelemetryBundle/FlowTelemetryBundle.php",
27+
# web/landing is a separate sub-project; vendor only the third-party packages it uses that are absent from the root vendor.
28+
# Symfony core packages (http-kernel, framework-bundle, etc.) are intentionally NOT listed — the root vendor provides them, and duplicating those definitions confuses Mago's type resolution (e.g. Kernel::$environment).
29+
"web/landing/vendor/aeon-php/calendar",
30+
"web/landing/vendor/aeon-php/sleep",
31+
"web/landing/vendor/dbrekelmans/bdi",
32+
"web/landing/vendor/dflydev/dot-access-data",
33+
"web/landing/vendor/league/commonmark",
34+
"web/landing/vendor/league/config",
35+
"web/landing/vendor/masterminds/html5",
36+
"web/landing/vendor/nette/schema",
37+
"web/landing/vendor/nette/utils",
38+
"web/landing/vendor/norberttech/static-content-generator-bundle",
39+
"web/landing/vendor/norberttech/symfony-process-executor",
40+
"web/landing/vendor/php-webdriver/webdriver",
41+
"web/landing/vendor/presta/sitemap-bundle",
42+
"web/landing/vendor/symfony/asset",
43+
"web/landing/vendor/symfony/asset-mapper",
44+
"web/landing/vendor/symfony/browser-kit",
45+
"web/landing/vendor/symfony/css-selector",
46+
"web/landing/vendor/symfony/dom-crawler",
47+
"web/landing/vendor/symfony/mime",
48+
"web/landing/vendor/symfony/monolog-bridge",
49+
"web/landing/vendor/symfony/monolog-bundle",
50+
"web/landing/vendor/symfony/panther",
51+
"web/landing/vendor/symfony/polyfill-intl-idn",
52+
"web/landing/vendor/symfony/polyfill-php84",
53+
"web/landing/vendor/symfony/runtime",
54+
"web/landing/vendor/symfony/stimulus-bundle",
55+
"web/landing/vendor/symfony/twig-bridge",
56+
"web/landing/vendor/symfony/twig-bundle",
57+
"web/landing/vendor/symfony/web-profiler-bundle",
58+
"web/landing/vendor/symfony/yaml",
59+
"web/landing/vendor/symfonycasts/tailwind-bundle",
60+
"web/landing/vendor/twig/extra-bundle",
61+
"web/landing/vendor/twig/markdown-extra",
2762
]
2863
excludes = [
2964
"src/**/vendor/**",
@@ -40,8 +75,6 @@ plugins = ["flow-php"]
4075
excludes = [
4176
# PHPStan extension bridge: implements PHPStan's type API + tests via TypeInferenceTestCase; not analyzable by Mago.
4277
"src/bridge/phpstan/types/**",
43-
"web/landing/**",
44-
# Symfony bundle/config tests accessing deeply-nested processConfiguration() arrays (all mixed-array-access)
4578
"src/bridge/symfony/filesystem-bundle/tests/Flow/Bridge/Symfony/FilesystemBundle/Tests/Unit/FlowFilesystemBundleTest.php",
4679
"src/bridge/symfony/filesystem-bundle/tests/Flow/Bridge/Symfony/FilesystemBundle/Tests/Unit/ConfigurationTest.php",
4780
"src/bridge/symfony/postgresql-bundle/tests/Flow/Bridge/Symfony/PostgreSqlBundle/Tests/Unit/DependencyInjection/ConfigurationTest.php",

src/bridge/phpstan/types/tests/Flow/Bridge/PHPStan/Types/Tests/Unit/StructureTypeReturnTypeExtensionTest.php

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,9 @@
77
use PHPStan\Testing\TypeInferenceTestCase;
88
use PHPUnit\Framework\Attributes\DataProvider;
99

10+
use function dirname;
11+
use function is_file;
12+
1013
final class StructureTypeReturnTypeExtensionTest extends TypeInferenceTestCase
1114
{
1215
/**
@@ -22,7 +25,13 @@ public static function dataFileAsserts(): iterable
2225
*/
2326
public static function getAdditionalConfigFiles(): array
2427
{
25-
return [__DIR__ . '/../../../../../../../extension.neon'];
28+
$dir = __DIR__;
29+
30+
while (!is_file($dir . '/extension.neon') && $dir !== dirname($dir)) {
31+
$dir = dirname($dir);
32+
}
33+
34+
return [$dir . '/extension.neon'];
2635
}
2736

2837
#[DataProvider('dataFileAsserts')]

web/landing/assets/codemirror/completions/dsl.js

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -733,7 +733,7 @@ const dslFunctions = [
733733
<span class=\"fn-name\">aws_s3_client</span><span class=\"fn-operator\">(</span><span class=\"fn-type\">array</span> <span class=\"fn-param\">$configuration</span><span class=\"fn-operator\">)</span> <span class=\"fn-operator\">:</span> <span class=\"fn-return\">S3Client</span>
734734
</div>
735735
<div style="color: #8b949e; font-size: 13px;">
736-
@param array<string, mixed> $configuration - for details please see https://async-aws.com/clients/s3.html
736+
@param array<Configuration::OPTION_*, null|string> $configuration - for details please see https://async-aws.com/clients/s3.html
737737
</div>
738738
`
739739
return div
@@ -2971,7 +2971,7 @@ const dslFunctions = [
29712971
<span class=\"fn-name\">dbal_from_queries</span><span class=\"fn-operator\">(</span><span class=\"fn-type\">Connection</span> <span class=\"fn-param\">$connection</span><span class=\"fn-operator\">,</span> <span class=\"fn-type\">string</span> <span class=\"fn-param\">$query</span><span class=\"fn-operator\">,</span> <span class=\"fn-type\">ParametersSet</span> <span class=\"fn-param\">$parameters_set</span> <span class=\"fn-operator\">=</span> <span class=\"fn-default\">null</span><span class=\"fn-operator\">,</span> <span class=\"fn-type\">array</span> <span class=\"fn-param\">$types</span> <span class=\"fn-operator\">=</span> <span class=\"fn-default\">[]</span><span class=\"fn-operator\">)</span> <span class=\"fn-operator\">:</span> <span class=\"fn-return\">DbalQueryExtractor</span>
29722972
</div>
29732973
<div style="color: #8b949e; font-size: 13px;">
2974-
@deprecated use from_dbal_queries() instead<br>@param null|ParametersSet $parameters_set - each one parameters array will be evaluated as new query<br>@param array<int|string, DbalArrayType|DbalParameterType|DbalType|int|string> $types
2974+
@deprecated use from_dbal_queries() instead<br>@param null|ParametersSet $parameters_set - each one parameters array will be evaluated as new query<br>@param array<int<0, max>|string, DbalArrayType|DbalParameterType|DbalType|string> $types
29752975
</div>
29762976
`
29772977
return div
@@ -4207,7 +4207,7 @@ const dslFunctions = [
42074207
<span class=\"fn-name\">from_dbal_queries</span><span class=\"fn-operator\">(</span><span class=\"fn-type\">Connection</span> <span class=\"fn-param\">$connection</span><span class=\"fn-operator\">,</span> <span class=\"fn-type\">string</span> <span class=\"fn-param\">$query</span><span class=\"fn-operator\">,</span> <span class=\"fn-type\">ParametersSet</span> <span class=\"fn-param\">$parameters_set</span> <span class=\"fn-operator\">=</span> <span class=\"fn-default\">null</span><span class=\"fn-operator\">,</span> <span class=\"fn-type\">array</span> <span class=\"fn-param\">$types</span> <span class=\"fn-operator\">=</span> <span class=\"fn-default\">[]</span><span class=\"fn-operator\">)</span> <span class=\"fn-operator\">:</span> <span class=\"fn-return\">DbalQueryExtractor</span>
42084208
</div>
42094209
<div style="color: #8b949e; font-size: 13px;">
4210-
@param null|ParametersSet $parameters_set - each one parameters array will be evaluated as new query<br>@param array<int|string, DbalArrayType|DbalParameterType|DbalType|int|string> $types
4210+
@param null|ParametersSet $parameters_set - each one parameters array will be evaluated as new query<br>@param array<int<0, max>|string, DbalArrayType|DbalParameterType|DbalType|string> $types
42114211
</div>
42124212
`
42134213
return div
@@ -5848,7 +5848,7 @@ const dslFunctions = [
58485848
<span class=\"fn-name\">manual_detector</span><span class=\"fn-operator\">(</span><span class=\"fn-type\">array</span> <span class=\"fn-param\">$attributes</span><span class=\"fn-operator\">)</span> <span class=\"fn-operator\">:</span> <span class=\"fn-return\">ManualDetector</span>
58495849
</div>
58505850
<div style="color: #8b949e; font-size: 13px;">
5851-
Create a ManualDetector.<br>@param array<string, array<bool|float|int|string>|bool|float|int|string> $attributes Resource attributes
5851+
Create a ManualDetector.<br>@param array<string, array<array-key, mixed>|bool|\\DateTimeInterface|float|int|string|\\Throwable> $attributes Resource attributes
58525852
</div>
58535853
`
58545854
return div
@@ -6781,7 +6781,7 @@ const dslFunctions = [
67816781
const div = document.createElement("div")
67826782
div.innerHTML = `
67836783
<div style="font-family: 'Fira Code', 'JetBrains Mono', monospace; margin-bottom: 8px;">
6784-
<span class=\"fn-name\">pagination_key_asc</span><span class=\"fn-operator\">(</span><span class=\"fn-type\">string</span> <span class=\"fn-param\">$column</span><span class=\"fn-operator\">,</span> <span class=\"fn-type\">ParameterType|Type|string|int</span> <span class=\"fn-param\">$type</span> <span class=\"fn-operator\">=</span> <span class=\"fn-default\">Doctrine\\DBAL\\ParameterType::...</span><span class=\"fn-operator\">)</span> <span class=\"fn-operator\">:</span> <span class=\"fn-return\">Key</span>
6784+
<span class=\"fn-name\">pagination_key_asc</span><span class=\"fn-operator\">(</span><span class=\"fn-type\">string</span> <span class=\"fn-param\">$column</span><span class=\"fn-operator\">,</span> <span class=\"fn-type\">ParameterType|Type|string</span> <span class=\"fn-param\">$type</span> <span class=\"fn-operator\">=</span> <span class=\"fn-default\">Doctrine\\DBAL\\ParameterType::...</span><span class=\"fn-operator\">)</span> <span class=\"fn-operator\">:</span> <span class=\"fn-return\">Key</span>
67856785
</div>
67866786
`
67876787
return div
@@ -6796,7 +6796,7 @@ const dslFunctions = [
67966796
const div = document.createElement("div")
67976797
div.innerHTML = `
67986798
<div style="font-family: 'Fira Code', 'JetBrains Mono', monospace; margin-bottom: 8px;">
6799-
<span class=\"fn-name\">pagination_key_desc</span><span class=\"fn-operator\">(</span><span class=\"fn-type\">string</span> <span class=\"fn-param\">$column</span><span class=\"fn-operator\">,</span> <span class=\"fn-type\">ParameterType|Type|string|int</span> <span class=\"fn-param\">$type</span> <span class=\"fn-operator\">=</span> <span class=\"fn-default\">Doctrine\\DBAL\\ParameterType::...</span><span class=\"fn-operator\">)</span> <span class=\"fn-operator\">:</span> <span class=\"fn-return\">Key</span>
6799+
<span class=\"fn-name\">pagination_key_desc</span><span class=\"fn-operator\">(</span><span class=\"fn-type\">string</span> <span class=\"fn-param\">$column</span><span class=\"fn-operator\">,</span> <span class=\"fn-type\">ParameterType|Type|string</span> <span class=\"fn-param\">$type</span> <span class=\"fn-operator\">=</span> <span class=\"fn-default\">Doctrine\\DBAL\\ParameterType::...</span><span class=\"fn-operator\">)</span> <span class=\"fn-operator\">:</span> <span class=\"fn-return\">Key</span>
68006800
</div>
68016801
`
68026802
return div
@@ -7768,7 +7768,7 @@ const dslFunctions = [
77687768
<span class=\"fn-name\">resource</span><span class=\"fn-operator\">(</span><span class=\"fn-type\">Attributes|array</span> <span class=\"fn-param\">$attributes</span> <span class=\"fn-operator\">=</span> <span class=\"fn-default\">[]</span><span class=\"fn-operator\">)</span> <span class=\"fn-operator\">:</span> <span class=\"fn-return\">Resource</span>
77697769
</div>
77707770
<div style="color: #8b949e; font-size: 13px;">
7771-
Create a Resource.<br>@param array<string, array<bool|float|int|string>|bool|float|int|string>|Attributes $attributes Resource attributes
7771+
Create a Resource.<br>@param array<string, array<array-key, mixed>|bool|\\DateTimeInterface|float|int|string|\\Throwable>|Attributes $attributes Resource attributes
77727772
</div>
77737773
`
77747774
return div
@@ -9190,7 +9190,7 @@ const dslFunctions = [
91909190
<span class=\"fn-name\">span_event</span><span class=\"fn-operator\">(</span><span class=\"fn-type\">string</span> <span class=\"fn-param\">$name</span><span class=\"fn-operator\">,</span> <span class=\"fn-type\">DateTimeImmutable</span> <span class=\"fn-param\">$timestamp</span><span class=\"fn-operator\">,</span> <span class=\"fn-type\">Attributes|array</span> <span class=\"fn-param\">$attributes</span> <span class=\"fn-operator\">=</span> <span class=\"fn-default\">[]</span><span class=\"fn-operator\">)</span> <span class=\"fn-operator\">:</span> <span class=\"fn-return\">GenericEvent</span>
91919191
</div>
91929192
<div style="color: #8b949e; font-size: 13px;">
9193-
Create a SpanEvent (GenericEvent) with an explicit timestamp.<br>@param string $name Event name<br>@param \\DateTimeImmutable $timestamp Event timestamp<br>@param array<string, array<bool|float|int|string>|bool|float|int|string>|Attributes $attributes Event attributes
9193+
Create a SpanEvent (GenericEvent) with an explicit timestamp.<br>@param string $name Event name<br>@param \\DateTimeImmutable $timestamp Event timestamp<br>@param array<string, array<array-key, mixed>|bool|\\DateTimeInterface|float|int|string|\\Throwable>|Attributes $attributes Event attributes
91949194
</div>
91959195
`
91969196
return div
@@ -9244,7 +9244,7 @@ const dslFunctions = [
92449244
<span class=\"fn-name\">span_link</span><span class=\"fn-operator\">(</span><span class=\"fn-type\">SpanContext</span> <span class=\"fn-param\">$context</span><span class=\"fn-operator\">,</span> <span class=\"fn-type\">Attributes|array</span> <span class=\"fn-param\">$attributes</span> <span class=\"fn-operator\">=</span> <span class=\"fn-default\">[]</span><span class=\"fn-operator\">)</span> <span class=\"fn-operator\">:</span> <span class=\"fn-return\">SpanLink</span>
92459245
</div>
92469246
<div style="color: #8b949e; font-size: 13px;">
9247-
Create a SpanLink.<br>@param SpanContext $context The linked span context<br>@param array<string, array<bool|float|int|string>|bool|float|int|string>|Attributes $attributes Link attributes
9247+
Create a SpanLink.<br>@param SpanContext $context The linked span context<br>@param array<string, array<array-key, mixed>|bool|\\DateTimeInterface|float|int|string|\\Throwable>|Attributes $attributes Link attributes
92489248
</div>
92499249
`
92509250
return div
@@ -9922,10 +9922,10 @@ const dslFunctions = [
99229922
const div = document.createElement("div")
99239923
div.innerHTML = `
99249924
<div style="font-family: 'Fira Code', 'JetBrains Mono', monospace; margin-bottom: 8px;">
9925-
<span class=\"fn-name\">struct_entry</span><span class=\"fn-operator\">(</span><span class=\"fn-type\">string</span> <span class=\"fn-param\">$name</span><span class=\"fn-operator\">,</span> <span class=\"fn-type\">array</span> <span class=\"fn-param\">$value</span><span class=\"fn-operator\">,</span> <span class=\"fn-type\">StructureType</span> <span class=\"fn-param\">$type</span><span class=\"fn-operator\">,</span> <span class=\"fn-type\">Metadata</span> <span class=\"fn-param\">$metadata</span> <span class=\"fn-operator\">=</span> <span class=\"fn-default\">null</span><span class=\"fn-operator\">)</span> <span class=\"fn-operator\">:</span> <span class=\"fn-return\">Entry</span>
9925+
<span class=\"fn-name\">struct_entry</span><span class=\"fn-operator\">(</span><span class=\"fn-type\">string</span> <span class=\"fn-param\">$name</span><span class=\"fn-operator\">,</span> <span class=\"fn-type\">array</span> <span class=\"fn-param\">$value</span><span class=\"fn-operator\">,</span> <span class=\"fn-type\">Type</span> <span class=\"fn-param\">$type</span><span class=\"fn-operator\">,</span> <span class=\"fn-type\">Metadata</span> <span class=\"fn-param\">$metadata</span> <span class=\"fn-operator\">=</span> <span class=\"fn-default\">null</span><span class=\"fn-operator\">)</span> <span class=\"fn-operator\">:</span> <span class=\"fn-return\">Entry</span>
99269926
</div>
99279927
<div style="color: #8b949e; font-size: 13px;">
9928-
@param ?array<string, mixed> $value<br>@param StructureType<mixed> $type<br>@return ($value is null ? Entry<null> : Entry<array<string, mixed>>)
9928+
@param ?array<string, mixed> $value<br>@param Type<mixed> $type<br>@return ($value is null ? Entry<null> : Entry<array<string, mixed>>)
99299929
</div>
99309930
`
99319931
return div
@@ -10411,7 +10411,7 @@ const dslFunctions = [
1041110411
<span class=\"fn-name\">to_dbal_schema_table</span><span class=\"fn-operator\">(</span><span class=\"fn-type\">Schema</span> <span class=\"fn-param\">$schema</span><span class=\"fn-operator\">,</span> <span class=\"fn-type\">string</span> <span class=\"fn-param\">$table_name</span><span class=\"fn-operator\">,</span> <span class=\"fn-type\">array</span> <span class=\"fn-param\">$table_options</span> <span class=\"fn-operator\">=</span> <span class=\"fn-default\">[]</span><span class=\"fn-operator\">,</span> <span class=\"fn-type\">array</span> <span class=\"fn-param\">$types_map</span> <span class=\"fn-operator\">=</span> <span class=\"fn-default\">[]</span><span class=\"fn-operator\">)</span> <span class=\"fn-operator\">:</span> <span class=\"fn-return\">Table</span>
1041210412
</div>
1041310413
<div style="color: #8b949e; font-size: 13px;">
10414-
Converts a Flow\\ETL\\Schema to a Doctrine\\DBAL\\Schema\\Table.<br>@param Schema $schema<br>@param array<array-key, mixed> $table_options<br>@param array<class-string<\\Flow\\Types\\Type<mixed>>, class-string<\\Doctrine\\DBAL\\Types\\Type>> $types_map
10414+
Converts a Flow\\ETL\\Schema to a Doctrine\\DBAL\\Schema\\Table.<br>@param Schema $schema<br>@param array<string, mixed> $table_options<br>@param array<class-string<\\Flow\\Types\\Type<mixed>>, class-string<\\Doctrine\\DBAL\\Types\\Type>> $types_map
1041510415
</div>
1041610416
`
1041710417
return div

web/landing/src/Flow/Website/Blog/Posts.php

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,9 @@
88

99
use function array_map;
1010
use function array_reverse;
11+
use function Flow\Types\DSL\type_list;
12+
use function Flow\Types\DSL\type_map;
13+
use function Flow\Types\DSL\type_string;
1114

1215
final class Posts
1316
{
@@ -48,7 +51,7 @@ public function all(): array
4851

4952
public function findByDateAndSlug(string $date, string $slug): Post
5053
{
51-
foreach ($this->posts as $post) {
54+
foreach (type_list(type_map(type_string(), type_string()))->assert($this->posts) as $post) {
5255
if ($post['date'] === $date && $post['slug'] === $slug) {
5356
return Post::fromArray($post);
5457
}

web/landing/src/Flow/Website/Command/GenerateDSLCompleterCommand.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
use function array_map;
2020
use function count;
2121
use function Flow\Filesystem\DSL\path;
22+
use function Flow\Types\DSL\type_string;
2223
use function sprintf;
2324
use function str_replace;
2425
use function strtolower;
@@ -50,7 +51,7 @@ protected function execute(InputInterface $input, OutputInterface $output): int
5051

5152
$functionsData = array_map(fn(DSLDefinition $definition): array => [
5253
'name' => $definition->name(),
53-
'fullName' => '\\' . $definition->data()['namespace'] . '\\' . $definition->name(),
54+
'fullName' => '\\' . type_string()->assert($definition->data()['namespace']) . '\\' . $definition->name(),
5455
'doc_comment' => $definition->data()['doc_comment'],
5556
'meta' => 'flow-dsl-' . $this->getTypeName($definition),
5657
'parameters' => $definition->data()['parameters'],

0 commit comments

Comments
 (0)