From 8726ade31036904b5c6f8778b816ec622882b73b Mon Sep 17 00:00:00 2001 From: "marc.weistroff" Date: Sun, 8 Apr 2012 11:14:51 +0200 Subject: [PATCH] Adds more features to twig:lint command --- .../Bundle/TwigBundle/Command/LintCommand.php | 58 +++++++++++++------ 1 file changed, 39 insertions(+), 19 deletions(-) diff --git a/src/Symfony/Bundle/TwigBundle/Command/LintCommand.php b/src/Symfony/Bundle/TwigBundle/Command/LintCommand.php index 8ed303829b..46b7d338cc 100644 --- a/src/Symfony/Bundle/TwigBundle/Command/LintCommand.php +++ b/src/Symfony/Bundle/TwigBundle/Command/LintCommand.php @@ -14,6 +14,7 @@ namespace Symfony\Bundle\TwigBundle\Command; use Symfony\Bundle\FrameworkBundle\Command\ContainerAwareCommand; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Output\OutputInterface; +use Symfony\Component\Finder\Finder; /** * Command that will validate your template syntax and output encountered errors. @@ -36,6 +37,16 @@ the first encountered syntax error. The command will get the contents of "filename" and will validates its syntax. +php %command.full_name% dirname + +The command will find all twig templates in dirname and will validate the syntax +of each Twig template. + +php %command.full_name% @AcmeMyBundle + +The command will find all twig templates in bundle AcmeMyBundle and will validate +the syntax of each one. + cat filename | php %command.full_name% The command will get the template contents from stdin and will validates its syntax. @@ -54,34 +65,43 @@ EOF $template = null; $filename = $input->getArgument('filename'); - if ($filename && !is_readable($filename)) { - $output->writeln(sprintf('File %s is not readable', $filename)); - - return 2; - } - - if ($filename) { - $template = file_get_contents($filename); - } else { + if (!$filename) { if (0 !== ftell(STDIN)) { - $output->writeln(sprintf('Please provide a filename or pipe template content to stdin.')); - - return 2; + throw new \RuntimeException("Please provide a filename or pipe template content to stdin."); } + while (!feof(STDIN)) { $template .= fread(STDIN, 1024); } + + return $twig->parse($twig->tokenize($template)); } - try { - $twig->parse($twig->tokenize($template)); - } catch(\Twig_Error_Syntax $e) { - $output->writeln($e->getMessage()); - - return 1; + if (0 !== strpos($filename, '@') && !is_readable($filename)) { + throw new \RuntimeException("File or directory '%s' is not readable"); } - $output->writeln("Template's syntax is valid."); + $files = array(); + if (is_file($filename)) { + $files = array($filename); + } elseif (is_dir($filename)) { + $files = Finder::create()->files()->in($filename)->name('*.twig'); + } else { + $dir = $this->getApplication()->getKernel()->locateResource($filename); + $files = Finder::create()->files()->in($dir)->name('*.twig'); + } + + foreach ($files as $file) { + try { + $twig->parse($twig->tokenize(file_get_contents($file))); + } catch (\Exception $e) { + $output->writeln(sprintf('Syntax error in %s', $file)); + + throw $e; + } + } + + $output->writeln('No syntax error detected.'); } }