Skip to content

Commit 6d9ee8b

Browse files
committed
Normalized closures to enabled function use statements. (#4)
1 parent 4292e77 commit 6d9ee8b

8 files changed

+32
-15
lines changed

src/Generator/AbstractTypeGenerator.php

+18-2
Original file line numberDiff line numberDiff line change
@@ -161,7 +161,7 @@ protected function callableCallbackFromArrayValue(array $value, $key, $argDefini
161161
return $default;
162162
}
163163

164-
$code = $this->getSkeletonContent('ResolverClosure');
164+
$code = 'function (%s) <closureUseStatements>{ return %s; }';
165165

166166
if (is_callable($value[$key])) {
167167
$func = $value[$key];
@@ -205,6 +205,11 @@ protected function generateConfig(array $config)
205205
return $code;
206206
}
207207

208+
protected function generateClosureUseStatements(array $config)
209+
{
210+
return null;
211+
}
212+
208213
protected function typeAlias2String($alias)
209214
{
210215
// Non-Null
@@ -235,6 +240,17 @@ protected function resolveTypeCode($alias)
235240
return $alias . 'Type::getInstance()';
236241
}
237242

243+
protected function resolveTypesCode(array $values, $key)
244+
{
245+
if (isset($values[$key])) {
246+
$types = sprintf('function () <closureUseStatements>{ return %s; }', $this->types2String($values[$key]));
247+
} else {
248+
$types = '[]';
249+
}
250+
251+
return $types;
252+
}
253+
238254
protected function types2String(array $types)
239255
{
240256
$types = array_map(__CLASS__ . '::typeAlias2String', $types);
@@ -279,7 +295,7 @@ public function generateClasses(array $configs, $outputDirectory, $regenerateIfE
279295

280296
public function generateClass(array $config, $outputDirectory, $regenerateIfExists = false)
281297
{
282-
static $treatLater = ['useStatement', 'spaces'];
298+
static $treatLater = ['useStatement', 'spaces', 'closureUseStatements'];
283299
$this->clearInternalUseStatements();
284300
$code = $this->processTemplatePlaceHoldersReplacements('TypeSystem', $config, $treatLater);
285301
$code = $this->processPlaceHoldersReplacements($treatLater, $code, $config) . "\n";

src/Generator/TypeGenerator.php

+9-3
Original file line numberDiff line numberDiff line change
@@ -60,17 +60,23 @@ protected function generateDefaultValue(array $value)
6060

6161
protected function generateType(array $value)
6262
{
63-
return $this->typeAlias2String($value['type']);
63+
if (isset($value['type'])) {
64+
$type = sprintf('function () <closureUseStatements>{ return %s; }', $this->typeAlias2String($value['type']));
65+
} else {
66+
$type = 'null';
67+
}
68+
69+
return $type;
6470
}
6571

6672
protected function generateInterfaces(array $value)
6773
{
68-
return isset($value['interfaces']) ? $this->types2String($value['interfaces']) : '[]';
74+
return $this->resolveTypesCode($value, 'interfaces');
6975
}
7076

7177
protected function generateTypes(array $value)
7278
{
73-
return isset($value['types']) ? $this->types2String($value['types']) : '[]';
79+
return $this->resolveTypesCode($value, 'types');
7480
}
7581

7682
/**
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
[
22
<spaces>'name' => <name>,
3-
<spaces>'type' => function () {
4-
<spaces><spaces>return <type>;
5-
<spaces>},
3+
<spaces>'type' => <type>,
64
<spaces>'description' => <description>,
75
<spaces>'defaultValue' => <defaultValue>,
86
],
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<name> => [
2-
<spaces>'type' => function () { return <type>; },
2+
<spaces>'type' => <type>,
33
<spaces>'defaultValue' => <defaultValue>,
44
<spaces>'description' => <description>,
55
],

src/Resources/skeleton/ObjectConfig.php.skeleton

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
<spaces>'name' => <name>,
33
<spaces>'description' => <description>,
44
<spaces>'fields' => <outputFields>,
5-
<spaces>'interfaces' => function () { return <interfaces>; },
5+
<spaces>'interfaces' => <interfaces>,
66
<spaces>'isTypeOf' => <isTypeOf>,
77
<spaces>'resolveField' => <resolveField>,
88
]

src/Resources/skeleton/OutputFieldConfig.php.skeleton

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<name> => [
2-
<spaces>'type' => function () { return <type>; },
2+
<spaces>'type' => <type>,
33
<spaces>'args' => <args>,
44
<spaces>'resolve' => <resolve>,
55
<spaces>'description' => <description>,

src/Resources/skeleton/ResolverClosure.php.skeleton

-3
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[
22
<spaces>'name' => <name>,
3-
<spaces>'types' => function () { return <types>; },
3+
<spaces>'types' => <types>,
44
<spaces>'resolveType' => <resolveType>,
55
<spaces>'description' => <description>,
66
]

0 commit comments

Comments
 (0)