setName('searchengine:query:parse') ->setDescription('Debug a search query') ->addArgument( 'query', InputArgument::REQUIRED, 'The query to debug' ) ->addOption( 'compiler-dump', 'd', InputOption::VALUE_NONE, 'Output underlying compiler AST before visitor processing' ) ->addOption( 'no-compiler-postprocessing', 'p', InputOption::VALUE_NONE, 'Prevent AST optimization before visitor processing' ) ->addOption( 'raw', null, InputOption::VALUE_NONE, 'Only output query dump' ) ; } protected function doExecute(InputInterface $input, OutputInterface $output) { $string = $input->getArgument('query'); $raw = $input->getOption('raw'); if (!$raw) { $output->writeln(sprintf('Parsing search query: %s', $string)); $output->writeln(str_repeat('-', 20)); } $postprocessing = !$input->getOption('no-compiler-postprocessing'); $compiler = $this->container['query_compiler']; $stopwatch = new Stopwatch(); $stopwatch->start('parsing'); if ($input->getOption('compiler-dump')) { $dump = $compiler->dump($string, $postprocessing); } else { $query = $compiler->parse($string, $postprocessing); $dump = $query->dump(); } $event = $stopwatch->stop('parsing'); if (!$raw) { $output->writeln($dump); $output->writeln(str_repeat('-', 20)); $output->writeln(sprintf("Took %sms", $event->getDuration())); } else { $output->write($dump); } } }