api/symfony/Component/Form/Command/DebugCommand.yaml
2024-09-26 02:03:21 -07:00

174 lines
12 KiB
YAML

name: DebugCommand
class_comment: null
dependencies:
- name: AsCommand
type: class
source: Symfony\Component\Console\Attribute\AsCommand
- name: Command
type: class
source: Symfony\Component\Console\Command\Command
- name: CompletionInput
type: class
source: Symfony\Component\Console\Completion\CompletionInput
- name: CompletionSuggestions
type: class
source: Symfony\Component\Console\Completion\CompletionSuggestions
- name: InvalidArgumentException
type: class
source: Symfony\Component\Console\Exception\InvalidArgumentException
- name: InputArgument
type: class
source: Symfony\Component\Console\Input\InputArgument
- name: InputInterface
type: class
source: Symfony\Component\Console\Input\InputInterface
- name: InputOption
type: class
source: Symfony\Component\Console\Input\InputOption
- name: OutputInterface
type: class
source: Symfony\Component\Console\Output\OutputInterface
- name: SymfonyStyle
type: class
source: Symfony\Component\Console\Style\SymfonyStyle
- name: FileLinkFormatter
type: class
source: Symfony\Component\ErrorHandler\ErrorRenderer\FileLinkFormatter
- name: DescriptorHelper
type: class
source: Symfony\Component\Form\Console\Helper\DescriptorHelper
- name: CoreExtension
type: class
source: Symfony\Component\Form\Extension\Core\CoreExtension
- name: FormRegistryInterface
type: class
source: Symfony\Component\Form\FormRegistryInterface
- name: FormTypeInterface
type: class
source: Symfony\Component\Form\FormTypeInterface
properties: []
methods:
- name: getAvailableFormatOptions
visibility: private
parameters: []
comment: "# * A console command for retrieving information about form types.\n#\
\ *\n# * @author Yonel Ceruto <yonelceruto@gmail.com>\n# */\n# #[AsCommand(name:\
\ 'debug:form', description: 'Display form type information')]\n# class DebugCommand\
\ extends Command\n# {\n# public function __construct(\n# private FormRegistryInterface\
\ $formRegistry,\n# private array $namespaces = ['Symfony\\Component\\Form\\Extension\\\
Core\\Type'],\n# private array $types = [],\n# private array $extensions = [],\n\
# private array $guessers = [],\n# private ?FileLinkFormatter $fileLinkFormatter\
\ = null,\n# ) {\n# parent::__construct();\n# }\n# \n# protected function configure():\
\ void\n# {\n# $this\n# ->setDefinition([\n# new InputArgument('class', InputArgument::OPTIONAL,\
\ 'The form type class'),\n# new InputArgument('option', InputArgument::OPTIONAL,\
\ 'The form type option'),\n# new InputOption('show-deprecated', null, InputOption::VALUE_NONE,\
\ 'Display deprecated options in form types'),\n# new InputOption('format', null,\
\ InputOption::VALUE_REQUIRED, \\sprintf('The output format (\"%s\")', implode('\"\
, \"', $this->getAvailableFormatOptions())), 'txt'),\n# ])\n# ->setHelp(<<<'EOF'\n\
# The <info>%command.name%</info> command displays information about form types.\n\
# \n# <info>php %command.full_name%</info>\n# \n# The command lists all built-in\
\ types, services types, type extensions and\n# guessers currently available.\n\
# \n# <info>php %command.full_name% Symfony\\Component\\Form\\Extension\\Core\\\
Type\\ChoiceType</info>\n# <info>php %command.full_name% ChoiceType</info>\n#\
\ \n# The command lists all defined options that contains the given form type,\n\
# as well as their parents and type extensions.\n# \n# <info>php %command.full_name%\
\ ChoiceType choice_value</info>\n# \n# Use the <info>--show-deprecated</info>\
\ option to display form types with\n# deprecated options or the deprecated options\
\ of the given form type:\n# \n# <info>php %command.full_name% --show-deprecated</info>\n\
# <info>php %command.full_name% ChoiceType --show-deprecated</info>\n# \n# The\
\ command displays the definition of the given option name.\n# \n# <info>php %command.full_name%\
\ --format=json</info>\n# \n# The command lists everything in a machine readable\
\ json format.\n# EOF\n# )\n# ;\n# }\n# \n# protected function execute(InputInterface\
\ $input, OutputInterface $output): int\n# {\n# $io = new SymfonyStyle($input,\
\ $output);\n# \n# if (null === $class = $input->getArgument('class')) {\n# $object\
\ = null;\n# $options['core_types'] = $this->getCoreTypes();\n# $options['service_types']\
\ = array_values(array_diff($this->types, $options['core_types']));\n# if ($input->getOption('show-deprecated'))\
\ {\n# $options['core_types'] = $this->filterTypesByDeprecated($options['core_types']);\n\
# $options['service_types'] = $this->filterTypesByDeprecated($options['service_types']);\n\
# }\n# $options['extensions'] = $this->extensions;\n# $options['guessers'] = $this->guessers;\n\
# foreach ($options as $k => $list) {\n# sort($options[$k]);\n# }\n# } else {\n\
# if (!class_exists($class) || !is_subclass_of($class, FormTypeInterface::class))\
\ {\n# $class = $this->getFqcnTypeClass($input, $io, $class);\n# }\n# $resolvedType\
\ = $this->formRegistry->getType($class);\n# \n# if ($option = $input->getArgument('option'))\
\ {\n# $object = $resolvedType->getOptionsResolver();\n# \n# if (!$object->isDefined($option))\
\ {\n# $message = \\sprintf('Option \"%s\" is not defined in \"%s\".', $option,\
\ $resolvedType->getInnerType()::class);\n# \n# if ($alternatives = $this->findAlternatives($option,\
\ $object->getDefinedOptions())) {\n# if (1 === \\count($alternatives)) {\n# $message\
\ .= \"\\n\\nDid you mean this?\\n \";\n# } else {\n# $message .= \"\\n\\nDid\
\ you mean one of these?\\n \";\n# }\n# $message .= implode(\"\\n \", $alternatives);\n\
# }\n# \n# throw new InvalidArgumentException($message);\n# }\n# \n# $options['type']\
\ = $resolvedType->getInnerType();\n# $options['option'] = $option;\n# } else\
\ {\n# $object = $resolvedType;\n# }\n# }\n# \n# $helper = new DescriptorHelper($this->fileLinkFormatter);\n\
# $options['format'] = $input->getOption('format');\n# $options['show_deprecated']\
\ = $input->getOption('show-deprecated');\n# $helper->describe($io, $object, $options);\n\
# \n# return 0;\n# }\n# \n# private function getFqcnTypeClass(InputInterface $input,\
\ SymfonyStyle $io, string $shortClassName): string\n# {\n# $classes = $this->getFqcnTypeClasses($shortClassName);\n\
# \n# if (0 === $count = \\count($classes)) {\n# $message = \\sprintf(\"Could\
\ not find type \\\"%s\\\" into the following namespaces:\\n %s\", $shortClassName,\
\ implode(\"\\n \", $this->namespaces));\n# \n# $allTypes = array_merge($this->getCoreTypes(),\
\ $this->types);\n# if ($alternatives = $this->findAlternatives($shortClassName,\
\ $allTypes)) {\n# if (1 === \\count($alternatives)) {\n# $message .= \"\\n\\\
nDid you mean this?\\n \";\n# } else {\n# $message .= \"\\n\\nDid you mean\
\ one of these?\\n \";\n# }\n# $message .= implode(\"\\n \", $alternatives);\n\
# }\n# \n# throw new InvalidArgumentException($message);\n# }\n# if (1 === $count)\
\ {\n# return $classes[0];\n# }\n# if (!$input->isInteractive()) {\n# throw new\
\ InvalidArgumentException(\\sprintf(\"The type \\\"%s\\\" is ambiguous.\\n\\\
nDid you mean one of these?\\n %s.\", $shortClassName, implode(\"\\n \"\
, $classes)));\n# }\n# \n# return $io->choice(\\sprintf(\"The type \\\"%s\\\"\
\ is ambiguous.\\n\\nSelect one of the following form types to display its information:\"\
, $shortClassName), $classes, $classes[0]);\n# }\n# \n# private function getFqcnTypeClasses(string\
\ $shortClassName): array\n# {\n# $classes = [];\n# sort($this->namespaces);\n\
# foreach ($this->namespaces as $namespace) {\n# if (class_exists($fqcn = $namespace.'\\\
\\'.$shortClassName)) {\n# $classes[] = $fqcn;\n# } elseif (class_exists($fqcn\
\ = $namespace.'\\\\'.ucfirst($shortClassName))) {\n# $classes[] = $fqcn;\n# }\
\ elseif (class_exists($fqcn = $namespace.'\\\\'.ucfirst($shortClassName).'Type'))\
\ {\n# $classes[] = $fqcn;\n# } elseif (str_ends_with($shortClassName, 'type')\
\ && class_exists($fqcn = $namespace.'\\\\'.ucfirst(substr($shortClassName, 0,\
\ -4).'Type'))) {\n# $classes[] = $fqcn;\n# }\n# }\n# \n# return $classes;\n#\
\ }\n# \n# private function getCoreTypes(): array\n# {\n# $coreExtension = new\
\ CoreExtension();\n# $loadTypesRefMethod = (new \\ReflectionObject($coreExtension))->getMethod('loadTypes');\n\
# $coreTypes = $loadTypesRefMethod->invoke($coreExtension);\n# $coreTypes = array_map(static\
\ fn (FormTypeInterface $type) => $type::class, $coreTypes);\n# sort($coreTypes);\n\
# \n# return $coreTypes;\n# }\n# \n# private function filterTypesByDeprecated(array\
\ $types): array\n# {\n# $typesWithDeprecatedOptions = [];\n# foreach ($types\
\ as $class) {\n# $optionsResolver = $this->formRegistry->getType($class)->getOptionsResolver();\n\
# foreach ($optionsResolver->getDefinedOptions() as $option) {\n# if ($optionsResolver->isDeprecated($option))\
\ {\n# $typesWithDeprecatedOptions[] = $class;\n# break;\n# }\n# }\n# }\n# \n\
# return $typesWithDeprecatedOptions;\n# }\n# \n# private function findAlternatives(string\
\ $name, array $collection): array\n# {\n# $alternatives = [];\n# foreach ($collection\
\ as $item) {\n# $lev = levenshtein($name, $item);\n# if ($lev <= \\strlen($name)\
\ / 3 || str_contains($item, $name)) {\n# $alternatives[$item] = isset($alternatives[$item])\
\ ? $alternatives[$item] - $lev : $lev;\n# }\n# }\n# \n# $threshold = 1e3;\n#\
\ $alternatives = array_filter($alternatives, static fn ($lev) => $lev < 2 * $threshold);\n\
# ksort($alternatives, \\SORT_NATURAL | \\SORT_FLAG_CASE);\n# \n# return array_keys($alternatives);\n\
# }\n# \n# public function complete(CompletionInput $input, CompletionSuggestions\
\ $suggestions): void\n# {\n# if ($input->mustSuggestArgumentValuesFor('class'))\
\ {\n# $suggestions->suggestValues(array_merge($this->getCoreTypes(), $this->types));\n\
# \n# return;\n# }\n# \n# if ($input->mustSuggestArgumentValuesFor('option') &&\
\ null !== $class = $input->getArgument('class')) {\n# $this->completeOptions($class,\
\ $suggestions);\n# \n# return;\n# }\n# \n# if ($input->mustSuggestOptionValuesFor('format'))\
\ {\n# $suggestions->suggestValues($this->getAvailableFormatOptions());\n# }\n\
# }\n# \n# private function completeOptions(string $class, CompletionSuggestions\
\ $suggestions): void\n# {\n# if (!class_exists($class) || !is_subclass_of($class,\
\ FormTypeInterface::class)) {\n# $classes = $this->getFqcnTypeClasses($class);\n\
# \n# if (1 === \\count($classes)) {\n# $class = $classes[0];\n# }\n# }\n# \n\
# if (!$this->formRegistry->hasType($class)) {\n# return;\n# }\n# \n# $resolvedType\
\ = $this->formRegistry->getType($class);\n# $suggestions->suggestValues($resolvedType->getOptionsResolver()->getDefinedOptions());\n\
# }\n# \n# /** @return string[]"
traits:
- Symfony\Component\Console\Attribute\AsCommand
- Symfony\Component\Console\Command\Command
- Symfony\Component\Console\Completion\CompletionInput
- Symfony\Component\Console\Completion\CompletionSuggestions
- Symfony\Component\Console\Exception\InvalidArgumentException
- Symfony\Component\Console\Input\InputArgument
- Symfony\Component\Console\Input\InputInterface
- Symfony\Component\Console\Input\InputOption
- Symfony\Component\Console\Output\OutputInterface
- Symfony\Component\Console\Style\SymfonyStyle
- Symfony\Component\ErrorHandler\ErrorRenderer\FileLinkFormatter
- Symfony\Component\Form\Console\Helper\DescriptorHelper
- Symfony\Component\Form\Extension\Core\CoreExtension
- Symfony\Component\Form\FormRegistryInterface
- Symfony\Component\Form\FormTypeInterface
interfaces: []