X-Git-Url: https://git.cweiske.de/php-sqllint.git/blobdiff_plain/ad379d8e2f3baee7a7a1345e771e83135773713a..efe9a99f9dcd3c4e69622188de2b8ab4e7ea6c98:/src/phpsqllint/Cli.php diff --git a/src/phpsqllint/Cli.php b/src/phpsqllint/Cli.php index 5e4f638..4edcf66 100644 --- a/src/phpsqllint/Cli.php +++ b/src/phpsqllint/Cli.php @@ -28,6 +28,16 @@ class Cli { protected $renderer; + protected $format = false; + + /** + * What syntax highlighting mode should be used + * + * none, ansi, html + */ + protected $highlight = 'none'; + + /** * Start processing. * @@ -41,7 +51,11 @@ class Cli $allfine = true; foreach ($files as $filename) { - $allfine &= $this->checkFile($filename); + if ($this->format) { + $allfine &= $this->formatFile($filename); + } else { + $allfine &= $this->checkFile($filename); + } } if ($allfine == true) { @@ -65,14 +79,8 @@ class Cli public function checkFile($filename) { $this->renderer->startRendering($filename); - - if ($filename == '-') { - $sql = file_get_contents('php://stdin'); - } else { - $sql = file_get_contents($filename); - } - if (trim($sql) == '') { - $this->renderer->displayError('SQL file empty', '', 0, 0); + $sql = $this->loadSql($filename); + if ($sql === false) { return false; } @@ -110,6 +118,42 @@ class Cli return false; } + /** + * Reformat the given file + */ + protected function formatFile($filename) + { + $this->renderer->startRendering($filename); + $sql = $this->loadSql($filename); + if ($sql === false) { + return false; + } + + $typeMap = array( + 'none' => 'text', + 'ansi' => 'cli', + 'html' => 'html', + ); + $options = array( + 'type' => $typeMap[$this->highlight], + ); + echo \SqlParser\Utils\Formatter::format($sql, $options) . "\n"; + } + + protected function loadSql($filename) + { + if ($filename == '-') { + $sql = file_get_contents('php://stdin'); + } else { + $sql = file_get_contents($filename); + } + if (trim($sql) == '') { + $this->renderer->displayError('SQL file empty', '', 0, 0); + return false; + } + return $sql; + } + /** * Load parameters for the CLI option parser. * @@ -119,9 +163,41 @@ class Cli { $parser = new \Console_CommandLine(); $parser->description = 'php-sqllint'; - $parser->version = '0.0.2'; + $parser->version = 'dev'; $parser->avoid_reading_stdin = true; + $versionFile = __DIR__ . '/../../VERSION'; + if (file_exists($versionFile)) { + $parser->version = trim(file_get_contents($versionFile)); + } + + $parser->addOption( + 'format', + array( + 'short_name' => '-f', + 'long_name' => '--format', + 'description' => 'Reformat SQL instead of checking', + 'action' => 'StoreTrue', + 'default' => false, + ) + ); + $parser->addOption( + 'highlight', + array( + 'short_name' => '-h', + 'long_name' => '--highlight', + 'description' => 'Highlighting mode (when using --format)', + 'action' => 'StoreString', + 'choices' => array( + 'none', + 'ansi', + 'html', + 'auto', + ), + 'default' => 'auto', + 'add_list_option' => true, + ) + ); $parser->addOption( 'renderer', array( @@ -165,6 +241,25 @@ class Cli . ucfirst($result->options['renderer']); $this->renderer = new $rendClass(); + $this->format = $result->options['format']; + + $this->highlight = $result->options['highlight']; + if ($this->highlight == 'auto') { + if (php_sapi_name() == 'cli') { + //default coloring to enabled, except + // when piping | to another tool + $this->highlight = 'ansi'; + if (function_exists('posix_isatty') + && !posix_isatty(STDOUT) + ) { + $this->highlight = 'none'; + } + } else { + //no idea where we are, so do not highlight + $this->highlight = 'none'; + } + } + foreach ($result->args['sql_files'] as $filename) { if ($filename == '-') { continue;