174 lines
12 KiB
YAML
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: []
|