123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117 |
- <?php
-
- namespace Friendica\Core\Console;
-
- use Friendica\BaseObject;
-
- /**
- * Tired of chasing typos and finding them after a commit.
- * Run this and quickly see if we've got any parse errors in our application files.
- *
- * @author Hypolite Petovan <hypolite@mrpetovan.com>
- */
- class Typo extends \Asika\SimpleConsole\Console
- {
- protected $helpOptions = ['h', 'help', '?'];
-
- protected function getHelp()
- {
- $help = <<<HELP
- console typo - Checks for parse errors in Friendica files
- Usage
- bin/console typo [-h|--help|-?] [-v]
-
- Description
- Checks all PHP files in the Friendica file tree for parse errors
-
- Options
- -h|--help|-? Show help information
- -v Show more debug information.
- HELP;
- return $help;
- }
-
- protected function doExecute()
- {
- if ($this->getOption('v')) {
- $this->out('Class: ' . __CLASS__);
- $this->out('Arguments: ' . var_export($this->args, true));
- $this->out('Options: ' . var_export($this->options, true));
- }
-
- if (count($this->args) > 0) {
- throw new \Asika\SimpleConsole\CommandArgsException('Too many arguments');
- }
-
- $php_path = BaseObject::getApp()->getConfigCache()->get('config', 'php_path', 'php');
-
- if ($this->getOption('v')) {
- $this->out('Directory: src');
- }
-
- $Iterator = new \RecursiveDirectoryIterator('src');
-
- foreach (new \RecursiveIteratorIterator($Iterator) as $file) {
- if (substr($file, -4) === '.php') {
- $this->checkFile($php_path, $file);
- }
- }
-
- if ($this->getOption('v')) {
- $this->out('Directory: mod');
- }
-
- $files = glob('mod/*.php');
- $this->checkFiles($php_path, $files);
-
- if ($this->getOption('v')) {
- $this->out('Directory: include');
- }
-
- $files = glob('include/*.php');
- $this->checkFiles($php_path, $files);
-
- if ($this->getOption('v')) {
- $this->out('Directory: addon');
- }
-
- $dirs = glob('addon/*');
- foreach ($dirs as $dir) {
- $addon = basename($dir);
- $files = glob($dir . '/' . $addon . '.php');
- $this->checkFiles($php_path, $files);
- }
-
- if ($this->getOption('v')) {
- $this->out('String files');
- }
-
- $files = glob('view/lang/*/strings.php');
- $this->checkFiles($php_path, $files);
-
- $this->out('No errors.');
-
- return 0;
- }
-
- private function checkFiles($php_path, array $files)
- {
- foreach ($files as $file) {
- $this->checkFile($php_path, $file);
- }
- }
-
- private function checkFile($php_path, $file)
- {
- if ($this->getOption('v')) {
- $this->out('Checking ' . $file);
- }
-
- $output = [];
- $ret = 0;
- exec("$php_path -l $file", $output, $ret);
- if ($ret !== 0) {
- throw new \RuntimeException('Parse error found in ' . $file . ', scan stopped.');
- }
- }
- }
|