8000 Show deprecated options definition on debug:form command · symfony/symfony@e2e05f9 · GitHub
[go: up one dir, main page]

Skip to content

Commit e2e05f9

Browse files
committed
Show deprecated options definition on debug:form command
1 parent 92c37b9 commit e2e05f9

File tree

9 files changed

+112
-4
lines changed

9 files changed

+112
-4
lines changed

src/Symfony/Component/Form/Console/Descriptor/Descriptor.php

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,10 @@ protected function collectOptions(ResolvedFormTypeInterface $type)
108108

109109
protected function getOptionDefinition(OptionsResolver $optionsResolver, $option)
110110
{
111-
$definition = array('required' => $optionsResolver->isRequired($option));
111+
$definition = array(
112+
'required' => $optionsResolver->isRequired($option),
113+
'deprecated' => $optionsResolver->isDeprecated($option),
114+
);
112115

113116
$introspector = new OptionsResolverIntrospector($optionsResolver);
114117

@@ -118,6 +121,7 @@ protected function getOptionDefinition(OptionsResolver $optionsResolver, $option
118121
'allowedTypes' => 'getAllowedTypes',
119122
'allowedValues' => 'getAllowedValues',
120123
'normalizer' => 'getNormalizer',
124+
'deprecationMessage' => 'getDeprecationMessage',
121125
);
122126

123127
foreach ($map as $key => $method) {
@@ -128,6 +132,10 @@ protected function getOptionDefinition(OptionsResolver $optionsResolver, $option
128132
}
129133
}
130134

135+
if (isset($definition['deprecationMessage']) && \is_string($definition['deprecationMessage'])) {
136+
$definition['deprecationMessage'] = strtr($definition['deprecationMessage'], array('%name%' => $option));
137+
}
138+
131139
return $definition;
132140
}
133141

src/Symfony/Component/Form/Console/Descriptor/JsonDescriptor.php

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,14 @@ protected function describeOption(OptionsResolver $optionsResolver, array $optio
5959
{
6060
$definition = $this->getOptionDefinition($optionsResolver, $options['option']);
6161

62-
$map = array(
62+
$map = array();
63+
if ($definition['deprecated']) {
64+
$map['deprecated'] = 'deprecated';
65+
if (\is_string($definition['deprecationMessage'])) {
66+
$map['deprecation_message'] = 'deprecationMessage';
67+
}
68+
}
69+
$map += array(
6370
'required' => 'required',
6471
'default' => 'default',
6572
'allowed_types' => 'allowedTypes',

src/Symfony/Component/Form/Console/Descriptor/TextDescriptor.php

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,14 @@ protected function describeOption(OptionsResolver $optionsResolver, array $optio
101101
$definition = $this->getOptionDefinition($optionsResolver, $options['option']);
102102

103103
$dump = $this->getDumpFunction();
104-
$map = array(
104+
$map = array();
105+
if ($definition['deprecated']) {
106+
$map = array(
107+
'Deprecated' => 'deprecated',
108+
'Deprecation message' => 'deprecationMessage',
109+
);
110+
}
111+
$map += array(
105112
'Required' => 'required',
106113
'Default' => 'default',
107114
'Allowed types' => 'allowedTypes',

src/Symfony/Component/Form/Tests/Console/Descriptor/AbstractDescriptorTest.php

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,11 @@ public function getDescribeOptionTestData()
104104

105105
$options['option'] = 'empty_data';
106106
yield array($resolvedType->getOptionsResolver(), $options, 'overridden_option_with_default_closures');
107+
108+
$resolvedType = new ResolvedFormType(new FooType(), array(), $parent);
109+
$options['type'] = $resolvedType->getInnerType();
110+
$options['option'] = 'bar';
111+
yield array($resolvedType->getOptionsResolver(), $options, 'deprecated_option');
107112
}
108113

109114
abstract protected function getDescriptor();
@@ -136,6 +141,8 @@ class FooType extends AbstractType
136141
public function configureOptions(OptionsResolver $resolver)
137142
{
138143
$resolver->setRequired('foo');
144+
$resolver->setDefined('bar');
145+
$resolver->setDeprecated('bar');
139146
$resolver->setDefault('empty_data', function (Options $options, $value) {
140147
$foo = $options['foo'];
141148

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
{
2+
"deprecated": true,
3+
"deprecation_message": "The option \"bar\" is deprecated.",
4+
"required": false,
5+
"has_normalizer": false
6+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
Symfony\Component\Form\Tests\Console\Descriptor\FooType (bar)
2+
=============================================================
3+
4+
--------------------- -----------------------------------
5+
Deprecated true
6+
--------------------- -----------------------------------
7+
Deprecation message "The option "bar" is deprecated."
8+
--------------------- -----------------------------------
9+
Required false
10+
--------------------- -----------------------------------
11+
Default -
12+
--------------------- -----------------------------------
13+
Allowed types -
14+
--------------------- -----------------------------------
15+
Allowed values -
16+
--------------------- -----------------------------------
17+
Normalizer -
18+
--------------------- -----------------------------------

src/Symfony/Component/Form/composer.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
"php": "^7.1.3",
2020
"symfony/event-dispatcher": "~3.4|~4.0",
2121
"symfony/intl": "~3.4|~4.0",
22-
"symfony/options-resolver": "~3.4|~4.0",
22+
"symfony/options-resolver": "~4.2",
2323
"symfony/polyfill-ctype": "~1.8",
2424
"symfony/polyfill-mbstring": "~1.0",
2525
"symfony/property-access": "~3.4|~4.0"

src/Symfony/Component/OptionsResolver/Debug/OptionsResolverIntrospector.php

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,4 +87,14 @@ public function getNormalizer(string $option): \Closure
8787
{
8888
return call_user_func($this->get, 'normalizers', $option, sprintf('No normalizer was set for the "%s" 10000 ; option.', $option));
8989
}
90+
91+
/**
92+
* @return string|\Closure
93+
*
94+
* @throws NoConfigurationException on no configured normalizer
95+
*/
96+
public function getDeprecationMessage(string $option)
97+
{
98+
return call_user_func($this->get, 'deprecated', $option, sprintf('No deprecation was set for the "%s" option.', $option));
99+
}
90100
}

src/Symfony/Component/OptionsResolver/Tests/Debug/OptionsResolverIntrospectorTest.php

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -200,4 +200,49 @@ public function testGetNormalizerThrowsOnNotDefinedOption()
200200
$debug = new OptionsResolverIntrospector($resolver);
201201
$this->assertSame('bar', $debug->getNormalizer('foo'));
202202
}
203+
204+
public function testGetDeprecationMessage()
205+
{
206+
$resolver = new OptionsResolver();
207+
$resolver->setDefined('foo');
208+
$resolver->setDeprecated('foo', 'The option "foo" is deprecated.');
209+
210+
$debug = new OptionsResolverIntrospector($resolver);
211+
$this->assertSame('The option "foo" is deprecated.', $debug->getDeprecationMessage('foo'));
212+
}
213+
214+
public function testGetClosureDeprecationMessage()
215+
{
216+
$resolver = new OptionsResolver();
217+
$resolver->setDefined('foo');
218+
$resolver->setDeprecated('foo', $closure = function ($value) {});
219+
220+
$debug = new OptionsResolverIntrospector($resolver);
221+
$this->assertSame($closure, $debug->getDeprecationMessage('foo'));
222+
}
223+
224+
/**
225+
* @expectedException \Symfony\Component\OptionsResolver\Exception\NoConfigurationException
226+ B195
* @expectedExceptionMessage No deprecation was set for the "foo" option.
227+
*/
228+
public function testGetDeprecationMessageThrowsOnNoConfiguredValue()
229+
{
230+
$resolver = new OptionsResolver();
231+
$resolver->setDefined('foo');
232+
233+
$debug = new OptionsResolverIntrospector($resolver);
234+
$this->assertSame('bar', $debug->getDeprecationMessage('foo'));
235+
}
236+
237+
/**
238+
* @expectedException \Symfony\Component\OptionsResolver\Exception\UndefinedOptionsException
239+
* @expectedExceptionMessage The option "foo" does not exist.
240+
*/
241+
public function testGetDeprecationMessageThrowsOnNotDefinedOption()
242+
{
243+
$resolver = new OptionsResolver();
244+
245+
$debug = new OptionsResolverIntrospector($resolver);
246+
$this->assertSame('bar', $debug->getDeprecationMessage('foo'));
247+
}
203248
}

0 commit comments

Comments
 (0)
0