bug #20900 [Console] Descriptors should use Helper::strlen (ogizanagi)
This PR was squashed before being merged into the 2.7 branch (closes #20900).
Discussion
----------
[Console] Descriptors should use Helper::strlen
| Q | A
| ------------- | ---
| Branch? | 2.7
| Bug fix? | yes
| New feature? | no
| BC breaks? | no
| Deprecations? | no
| Tests pass? | yes
| Fixed tickets | N/A
| License | MIT
| Doc PR | N/A
Commits
-------
8e9a5f8
[Console] Descriptors should use Helper::strlen
This commit is contained in:
commit
f1f5bff78f
@ -13,6 +13,7 @@ namespace Symfony\Component\Console\Descriptor;
|
||||
|
||||
use Symfony\Component\Console\Application;
|
||||
use Symfony\Component\Console\Command\Command;
|
||||
use Symfony\Component\Console\Helper\Helper;
|
||||
use Symfony\Component\Console\Input\InputArgument;
|
||||
use Symfony\Component\Console\Input\InputDefinition;
|
||||
use Symfony\Component\Console\Input\InputOption;
|
||||
@ -94,7 +95,7 @@ class MarkdownDescriptor extends Descriptor
|
||||
|
||||
$this->write(
|
||||
$command->getName()."\n"
|
||||
.str_repeat('-', strlen($command->getName()))."\n\n"
|
||||
.str_repeat('-', Helper::strlen($command->getName()))."\n\n"
|
||||
.'* Description: '.($command->getDescription() ?: '<none>')."\n"
|
||||
.'* Usage:'."\n\n"
|
||||
.array_reduce(array_merge(array($command->getSynopsis()), $command->getAliases(), $command->getUsages()), function ($carry, $usage) {
|
||||
@ -121,7 +122,7 @@ class MarkdownDescriptor extends Descriptor
|
||||
$describedNamespace = isset($options['namespace']) ? $options['namespace'] : null;
|
||||
$description = new ApplicationDescription($application, $describedNamespace);
|
||||
|
||||
$this->write($application->getName()."\n".str_repeat('=', strlen($application->getName())));
|
||||
$this->write($application->getName()."\n".str_repeat('=', Helper::strlen($application->getName())));
|
||||
|
||||
foreach ($description->getNamespaces() as $namespace) {
|
||||
if (ApplicationDescription::GLOBAL_NAMESPACE !== $namespace['id']) {
|
||||
|
@ -13,6 +13,7 @@ namespace Symfony\Component\Console\Descriptor;
|
||||
|
||||
use Symfony\Component\Console\Application;
|
||||
use Symfony\Component\Console\Command\Command;
|
||||
use Symfony\Component\Console\Helper\Helper;
|
||||
use Symfony\Component\Console\Input\InputArgument;
|
||||
use Symfony\Component\Console\Input\InputDefinition;
|
||||
use Symfony\Component\Console\Input\InputOption;
|
||||
@ -37,7 +38,7 @@ class TextDescriptor extends Descriptor
|
||||
$default = '';
|
||||
}
|
||||
|
||||
$totalWidth = isset($options['total_width']) ? $options['total_width'] : strlen($argument->getName());
|
||||
$totalWidth = isset($options['total_width']) ? $options['total_width'] : Helper::strlen($argument->getName());
|
||||
$spacingWidth = $totalWidth - strlen($argument->getName());
|
||||
|
||||
$this->writeText(sprintf(' <info>%s</info> %s%s%s',
|
||||
@ -75,7 +76,7 @@ class TextDescriptor extends Descriptor
|
||||
sprintf('--%s%s', $option->getName(), $value)
|
||||
);
|
||||
|
||||
$spacingWidth = $totalWidth - strlen($synopsis);
|
||||
$spacingWidth = $totalWidth - Helper::strlen($synopsis);
|
||||
|
||||
$this->writeText(sprintf(' <info>%s</info> %s%s%s%s',
|
||||
$synopsis,
|
||||
@ -94,7 +95,7 @@ class TextDescriptor extends Descriptor
|
||||
{
|
||||
$totalWidth = $this->calculateTotalWidthForOptions($definition->getOptions());
|
||||
foreach ($definition->getArguments() as $argument) {
|
||||
$totalWidth = max($totalWidth, strlen($argument->getName()));
|
||||
$totalWidth = max($totalWidth, Helper::strlen($argument->getName()));
|
||||
}
|
||||
|
||||
if ($definition->getArguments()) {
|
||||
@ -206,7 +207,7 @@ class TextDescriptor extends Descriptor
|
||||
|
||||
foreach ($namespace['commands'] as $name) {
|
||||
$this->writeText("\n");
|
||||
$spacingWidth = $width - strlen($name);
|
||||
$spacingWidth = $width - Helper::strlen($name);
|
||||
$this->writeText(sprintf(' <info>%s</info>%s%s', $name, str_repeat(' ', $spacingWidth), $description->getCommand($name)->getDescription()), $options);
|
||||
}
|
||||
}
|
||||
@ -252,9 +253,9 @@ class TextDescriptor extends Descriptor
|
||||
$widths = array();
|
||||
|
||||
foreach ($commands as $command) {
|
||||
$widths[] = strlen($command->getName());
|
||||
$widths[] = Helper::strlen($command->getName());
|
||||
foreach ($command->getAliases() as $alias) {
|
||||
$widths[] = strlen($alias);
|
||||
$widths[] = Helper::strlen($alias);
|
||||
}
|
||||
}
|
||||
|
||||
@ -271,10 +272,10 @@ class TextDescriptor extends Descriptor
|
||||
$totalWidth = 0;
|
||||
foreach ($options as $option) {
|
||||
// "-" + shortcut + ", --" + name
|
||||
$nameLength = 1 + max(strlen($option->getShortcut()), 1) + 4 + strlen($option->getName());
|
||||
$nameLength = 1 + max(strlen($option->getShortcut()), 1) + 4 + Helper::strlen($option->getName());
|
||||
|
||||
if ($option->acceptValue()) {
|
||||
$valueLength = 1 + strlen($option->getName()); // = + value
|
||||
$valueLength = 1 + Helper::strlen($option->getName()); // = + value
|
||||
$valueLength += $option->isValueOptional() ? 2 : 0; // [ + ]
|
||||
|
||||
$nameLength += $valueLength;
|
||||
|
@ -86,7 +86,7 @@ abstract class AbstractDescriptorTest extends \PHPUnit_Framework_TestCase
|
||||
|
||||
abstract protected function getFormat();
|
||||
|
||||
private function getDescriptionTestData(array $objects)
|
||||
protected function getDescriptionTestData(array $objects)
|
||||
{
|
||||
$data = array();
|
||||
foreach ($objects as $name => $object) {
|
||||
|
@ -12,9 +12,27 @@
|
||||
namespace Symfony\Component\Console\Tests\Descriptor;
|
||||
|
||||
use Symfony\Component\Console\Descriptor\MarkdownDescriptor;
|
||||
use Symfony\Component\Console\Tests\Fixtures\DescriptorApplicationMbString;
|
||||
use Symfony\Component\Console\Tests\Fixtures\DescriptorCommandMbString;
|
||||
|
||||
class MarkdownDescriptorTest extends AbstractDescriptorTest
|
||||
{
|
||||
public function getDescribeCommandTestData()
|
||||
{
|
||||
return $this->getDescriptionTestData(array_merge(
|
||||
ObjectsProvider::getCommands(),
|
||||
array('command_mbstring' => new DescriptorCommandMbString())
|
||||
));
|
||||
}
|
||||
|
||||
public function getDescribeApplicationTestData()
|
||||
{
|
||||
return $this->getDescriptionTestData(array_merge(
|
||||
ObjectsProvider::getApplications(),
|
||||
array('application_mbstring' => new DescriptorApplicationMbString())
|
||||
));
|
||||
}
|
||||
|
||||
protected function getDescriptor()
|
||||
{
|
||||
return new MarkdownDescriptor();
|
||||
|
@ -12,9 +12,27 @@
|
||||
namespace Symfony\Component\Console\Tests\Descriptor;
|
||||
|
||||
use Symfony\Component\Console\Descriptor\TextDescriptor;
|
||||
use Symfony\Component\Console\Tests\Fixtures\DescriptorApplicationMbString;
|
||||
use Symfony\Component\Console\Tests\Fixtures\DescriptorCommandMbString;
|
||||
|
||||
class TextDescriptorTest extends AbstractDescriptorTest
|
||||
{
|
||||
public function getDescribeCommandTestData()
|
||||
{
|
||||
return $this->getDescriptionTestData(array_merge(
|
||||
ObjectsProvider::getCommands(),
|
||||
array('command_mbstring' => new DescriptorCommandMbString())
|
||||
));
|
||||
}
|
||||
|
||||
public function getDescribeApplicationTestData()
|
||||
{
|
||||
return $this->getDescriptionTestData(array_merge(
|
||||
ObjectsProvider::getApplications(),
|
||||
array('application_mbstring' => new DescriptorApplicationMbString())
|
||||
));
|
||||
}
|
||||
|
||||
protected function getDescriptor()
|
||||
{
|
||||
return new TextDescriptor();
|
||||
|
@ -0,0 +1,24 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of the Symfony package.
|
||||
*
|
||||
* (c) Fabien Potencier <fabien@symfony.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace Symfony\Component\Console\Tests\Fixtures;
|
||||
|
||||
use Symfony\Component\Console\Application;
|
||||
|
||||
class DescriptorApplicationMbString extends Application
|
||||
{
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct('MbString åpplicätion');
|
||||
|
||||
$this->add(new DescriptorCommandMbString());
|
||||
}
|
||||
}
|
@ -0,0 +1,32 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of the Symfony package.
|
||||
*
|
||||
* (c) Fabien Potencier <fabien@symfony.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace Symfony\Component\Console\Tests\Fixtures;
|
||||
|
||||
use Symfony\Component\Console\Command\Command;
|
||||
use Symfony\Component\Console\Input\InputArgument;
|
||||
use Symfony\Component\Console\Input\InputOption;
|
||||
|
||||
class DescriptorCommandMbString extends Command
|
||||
{
|
||||
protected function configure()
|
||||
{
|
||||
$this
|
||||
->setName('descriptor:åèä')
|
||||
->setDescription('command åèä description')
|
||||
->setHelp('command åèä help')
|
||||
->addUsage('-o|--option_name <argument_name>')
|
||||
->addUsage('<argument_name>')
|
||||
->addArgument('argument_åèä', InputArgument::REQUIRED)
|
||||
->addOption('option_åèä', 'o', InputOption::VALUE_NONE)
|
||||
;
|
||||
}
|
||||
}
|
@ -0,0 +1,309 @@
|
||||
MbString åpplicätion
|
||||
====================
|
||||
|
||||
* help
|
||||
* list
|
||||
|
||||
**descriptor:**
|
||||
|
||||
* descriptor:åèä
|
||||
|
||||
help
|
||||
----
|
||||
|
||||
* Description: Displays help for a command
|
||||
* Usage:
|
||||
|
||||
* `help [--xml] [--format FORMAT] [--raw] [--] [<command_name>]`
|
||||
|
||||
The <info>help</info> command displays help for a given command:
|
||||
|
||||
<info>php app/console help list</info>
|
||||
|
||||
You can also output the help in other formats by using the <comment>--format</comment> option:
|
||||
|
||||
<info>php app/console help --format=xml list</info>
|
||||
|
||||
To display the list of available commands, please use the <info>list</info> command.
|
||||
|
||||
### Arguments:
|
||||
|
||||
**command_name:**
|
||||
|
||||
* Name: command_name
|
||||
* Is required: no
|
||||
* Is array: no
|
||||
* Description: The command name
|
||||
* Default: `'help'`
|
||||
|
||||
### Options:
|
||||
|
||||
**xml:**
|
||||
|
||||
* Name: `--xml`
|
||||
* Shortcut: <none>
|
||||
* Accept value: no
|
||||
* Is value required: no
|
||||
* Is multiple: no
|
||||
* Description: To output help as XML
|
||||
* Default: `false`
|
||||
|
||||
**format:**
|
||||
|
||||
* Name: `--format`
|
||||
* Shortcut: <none>
|
||||
* Accept value: yes
|
||||
* Is value required: yes
|
||||
* Is multiple: no
|
||||
* Description: The output format (txt, xml, json, or md)
|
||||
* Default: `'txt'`
|
||||
|
||||
**raw:**
|
||||
|
||||
* Name: `--raw`
|
||||
* Shortcut: <none>
|
||||
* Accept value: no
|
||||
* Is value required: no
|
||||
* Is multiple: no
|
||||
* Description: To output raw command help
|
||||
* Default: `false`
|
||||
|
||||
**help:**
|
||||
|
||||
* Name: `--help`
|
||||
* Shortcut: `-h`
|
||||
* Accept value: no
|
||||
* Is value required: no
|
||||
* Is multiple: no
|
||||
* Description: Display this help message
|
||||
* Default: `false`
|
||||
|
||||
**quiet:**
|
||||
|
||||
* Name: `--quiet`
|
||||
* Shortcut: `-q`
|
||||
* Accept value: no
|
||||
* Is value required: no
|
||||
* Is multiple: no
|
||||
* Description: Do not output any message
|
||||
* Default: `false`
|
||||
|
||||
**verbose:**
|
||||
|
||||
* Name: `--verbose`
|
||||
* Shortcut: `-v|-vv|-vvv`
|
||||
* Accept value: no
|
||||
* Is value required: no
|
||||
* Is multiple: no
|
||||
* Description: Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
|
||||
* Default: `false`
|
||||
|
||||
**version:**
|
||||
|
||||
* Name: `--version`
|
||||
* Shortcut: `-V`
|
||||
* Accept value: no
|
||||
* Is value required: no
|
||||
* Is multiple: no
|
||||
* Description: Display this application version
|
||||
* Default: `false`
|
||||
|
||||
**ansi:**
|
||||
|
||||
* Name: `--ansi`
|
||||
* Shortcut: <none>
|
||||
* Accept value: no
|
||||
* Is value required: no
|
||||
* Is multiple: no
|
||||
* Description: Force ANSI output
|
||||
* Default: `false`
|
||||
|
||||
**no-ansi:**
|
||||
|
||||
* Name: `--no-ansi`
|
||||
* Shortcut: <none>
|
||||
* Accept value: no
|
||||
* Is value required: no
|
||||
* Is multiple: no
|
||||
* Description: Disable ANSI output
|
||||
* Default: `false`
|
||||
|
||||
**no-interaction:**
|
||||
|
||||
* Name: `--no-interaction`
|
||||
* Shortcut: `-n`
|
||||
* Accept value: no
|
||||
* Is value required: no
|
||||
* Is multiple: no
|
||||
* Description: Do not ask any interactive question
|
||||
* Default: `false`
|
||||
|
||||
list
|
||||
----
|
||||
|
||||
* Description: Lists commands
|
||||
* Usage:
|
||||
|
||||
* `list [--xml] [--raw] [--format FORMAT] [--] [<namespace>]`
|
||||
|
||||
The <info>list</info> command lists all commands:
|
||||
|
||||
<info>php app/console list</info>
|
||||
|
||||
You can also display the commands for a specific namespace:
|
||||
|
||||
<info>php app/console list test</info>
|
||||
|
||||
You can also output the information in other formats by using the <comment>--format</comment> option:
|
||||
|
||||
<info>php app/console list --format=xml</info>
|
||||
|
||||
It's also possible to get raw list of commands (useful for embedding command runner):
|
||||
|
||||
<info>php app/console list --raw</info>
|
||||
|
||||
### Arguments:
|
||||
|
||||
**namespace:**
|
||||
|
||||
* Name: namespace
|
||||
* Is required: no
|
||||
* Is array: no
|
||||
* Description: The namespace name
|
||||
* Default: `NULL`
|
||||
|
||||
### Options:
|
||||
|
||||
**xml:**
|
||||
|
||||
* Name: `--xml`
|
||||
* Shortcut: <none>
|
||||
* Accept value: no
|
||||
* Is value required: no
|
||||
* Is multiple: no
|
||||
* Description: To output list as XML
|
||||
* Default: `false`
|
||||
|
||||
**raw:**
|
||||
|
||||
* Name: `--raw`
|
||||
* Shortcut: <none>
|
||||
* Accept value: no
|
||||
* Is value required: no
|
||||
* Is multiple: no
|
||||
* Description: To output raw command list
|
||||
* Default: `false`
|
||||
|
||||
**format:**
|
||||
|
||||
* Name: `--format`
|
||||
* Shortcut: <none>
|
||||
* Accept value: yes
|
||||
* Is value required: yes
|
||||
* Is multiple: no
|
||||
* Description: The output format (txt, xml, json, or md)
|
||||
* Default: `'txt'`
|
||||
|
||||
descriptor:åèä
|
||||
--------------
|
||||
|
||||
* Description: command åèä description
|
||||
* Usage:
|
||||
|
||||
* `descriptor:åèä [-o|--option_åèä] [--] <argument_åèä>`
|
||||
* `descriptor:åèä -o|--option_name <argument_name>`
|
||||
* `descriptor:åèä <argument_name>`
|
||||
|
||||
command åèä help
|
||||
|
||||
### Arguments:
|
||||
|
||||
**argument_åèä:**
|
||||
|
||||
* Name: argument_åèä
|
||||
* Is required: yes
|
||||
* Is array: no
|
||||
* Description: <none>
|
||||
* Default: `NULL`
|
||||
|
||||
### Options:
|
||||
|
||||
**option_åèä:**
|
||||
|
||||
* Name: `--option_åèä`
|
||||
* Shortcut: `-o`
|
||||
* Accept value: no
|
||||
* Is value required: no
|
||||
* Is multiple: no
|
||||
* Description: <none>
|
||||
* Default: `false`
|
||||
|
||||
**help:**
|
||||
|
||||
* Name: `--help`
|
||||
* Shortcut: `-h`
|
||||
* Accept value: no
|
||||
* Is value required: no
|
||||
* Is multiple: no
|
||||
* Description: Display this help message
|
||||
* Default: `false`
|
||||
|
||||
**quiet:**
|
||||
|
||||
* Name: `--quiet`
|
||||
* Shortcut: `-q`
|
||||
* Accept value: no
|
||||
* Is value required: no
|
||||
* Is multiple: no
|
||||
* Description: Do not output any message
|
||||
* Default: `false`
|
||||
|
||||
**verbose:**
|
||||
|
||||
* Name: `--verbose`
|
||||
* Shortcut: `-v|-vv|-vvv`
|
||||
* Accept value: no
|
||||
* Is value required: no
|
||||
* Is multiple: no
|
||||
* Description: Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
|
||||
* Default: `false`
|
||||
|
||||
**version:**
|
||||
|
||||
* Name: `--version`
|
||||
* Shortcut: `-V`
|
||||
* Accept value: no
|
||||
* Is value required: no
|
||||
* Is multiple: no
|
||||
* Description: Display this application version
|
||||
* Default: `false`
|
||||
|
||||
**ansi:**
|
||||
|
||||
* Name: `--ansi`
|
||||
* Shortcut: <none>
|
||||
* Accept value: no
|
||||
* Is value required: no
|
||||
* Is multiple: no
|
||||
* Description: Force ANSI output
|
||||
* Default: `false`
|
||||
|
||||
**no-ansi:**
|
||||
|
||||
* Name: `--no-ansi`
|
||||
* Shortcut: <none>
|
||||
* Accept value: no
|
||||
* Is value required: no
|
||||
* Is multiple: no
|
||||
* Description: Disable ANSI output
|
||||
* Default: `false`
|
||||
|
||||
**no-interaction:**
|
||||
|
||||
* Name: `--no-interaction`
|
||||
* Shortcut: `-n`
|
||||
* Accept value: no
|
||||
* Is value required: no
|
||||
* Is multiple: no
|
||||
* Description: Do not ask any interactive question
|
||||
* Default: `false`
|
@ -0,0 +1,19 @@
|
||||
<info>MbString åpplicätion</info>
|
||||
|
||||
<comment>Usage:</comment>
|
||||
command [options] [arguments]
|
||||
|
||||
<comment>Options:</comment>
|
||||
<info>-h, --help</info> Display this help message
|
||||
<info>-q, --quiet</info> Do not output any message
|
||||
<info>-V, --version</info> Display this application version
|
||||
<info> --ansi</info> Force ANSI output
|
||||
<info> --no-ansi</info> Disable ANSI output
|
||||
<info>-n, --no-interaction</info> Do not ask any interactive question
|
||||
<info>-v|vv|vvv, --verbose</info> Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
|
||||
|
||||
<comment>Available commands:</comment>
|
||||
<info>help</info> Displays help for a command
|
||||
<info>list</info> Lists commands
|
||||
<comment>descriptor</comment>
|
||||
<info>descriptor:åèä</info> command åèä description
|
@ -0,0 +1,33 @@
|
||||
descriptor:åèä
|
||||
--------------
|
||||
|
||||
* Description: command åèä description
|
||||
* Usage:
|
||||
|
||||
* `descriptor:åèä [-o|--option_åèä] [--] <argument_åèä>`
|
||||
* `descriptor:åèä -o|--option_name <argument_name>`
|
||||
* `descriptor:åèä <argument_name>`
|
||||
|
||||
command åèä help
|
||||
|
||||
### Arguments:
|
||||
|
||||
**argument_åèä:**
|
||||
|
||||
* Name: argument_åèä
|
||||
* Is required: yes
|
||||
* Is array: no
|
||||
* Description: <none>
|
||||
* Default: `NULL`
|
||||
|
||||
### Options:
|
||||
|
||||
**option_åèä:**
|
||||
|
||||
* Name: `--option_åèä`
|
||||
* Shortcut: `-o`
|
||||
* Accept value: no
|
||||
* Is value required: no
|
||||
* Is multiple: no
|
||||
* Description: <none>
|
||||
* Default: `false`
|
@ -0,0 +1,13 @@
|
||||
<comment>Usage:</comment>
|
||||
descriptor:åèä [options] [--] <argument_åèä>
|
||||
descriptor:åèä -o|--option_name <argument_name>
|
||||
descriptor:åèä <argument_name>
|
||||
|
||||
<comment>Arguments:</comment>
|
||||
<info>argument_åèä</info>
|
||||
|
||||
<comment>Options:</comment>
|
||||
<info>-o, --option_åèä</info>
|
||||
|
||||
<comment>Help:</comment>
|
||||
command åèä help
|
Reference in New Issue
Block a user