ok

Mini Shell

Direktori : /opt/alt/php54/usr/share/pear/SebastianBergmann/HPHPA/TextUI/
Upload File :
Current File : //opt/alt/php54/usr/share/pear/SebastianBergmann/HPHPA/TextUI/Command.php

<?php
/**
 * hphpa
 *
 * Copyright (c) 2012-2013, Sebastian Bergmann <sebastian@phpunit.de>.
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 *
 *   * Redistributions of source code must retain the above copyright
 *     notice, this list of conditions and the following disclaimer.
 *
 *   * Redistributions in binary form must reproduce the above copyright
 *     notice, this list of conditions and the following disclaimer in
 *     the documentation and/or other materials provided with the
 *     distribution.
 *
 *   * Neither the name of Sebastian Bergmann nor the names of his
 *     contributors may be used to endorse or promote products derived
 *     from this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
 * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
 * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package   hphpa
 * @author    Sebastian Bergmann <sebastian@phpunit.de>
 * @copyright 2012-2013 Sebastian Bergmann <sebastian@phpunit.de>
 * @license   http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
 * @since     File available since Release 1.0.0
 */

namespace SebastianBergmann\HPHPA\TextUI
{
    use SebastianBergmann\FinderFacade\FinderFacade;
    use SebastianBergmann\Version;
    use SebastianBergmann\HPHPA\Analyzer;
    use SebastianBergmann\HPHPA\Result;
    use SebastianBergmann\HPHPA\Ruleset;
    use SebastianBergmann\HPHPA\Report\Checkstyle;
    use SebastianBergmann\HPHPA\Report\Text;

    /**
     * TextUI frontend.
     *
     * @author    Sebastian Bergmann <sebastian@phpunit.de>
     * @copyright 2012-2013 Sebastian Bergmann <sebastian@phpunit.de>
     * @license   http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
     * @link      http://github.com/sebastianbergmann/hphpa/tree
     * @since     Class available since Release 1.0.0
     */
    class Command
    {
        private $version;

        public function __construct()
        {
            $version = new Version('1.3.0', __DIR__);
            $this->version = $version->getVersion();
        }

        /**
         * Main method.
         */
        public function main()
        {
            $input = new \ezcConsoleInput;

            $input->registerOption(
              new \ezcConsoleOption(
                '',
                'checkstyle',
                \ezcConsoleInput::TYPE_STRING
               )
            );

            $input->registerOption(
              new \ezcConsoleOption(
                '',
                'ruleset',
                \ezcConsoleInput::TYPE_STRING
               )
            );

            $input->registerOption(
              new \ezcConsoleOption(
                '',
                'exclude',
                \ezcConsoleInput::TYPE_STRING,
                array(),
                TRUE
               )
            );

            $input->registerOption(
              new \ezcConsoleOption(
                'h',
                'help',
                \ezcConsoleInput::TYPE_NONE,
                NULL,
                FALSE,
                '',
                '',
                array(),
                array(),
                FALSE,
                FALSE,
                TRUE
               )
            );

            $input->registerOption(
              new \ezcConsoleOption(
                '',
                'names',
                \ezcConsoleInput::TYPE_STRING,
                '*.php',
                FALSE
               )
            );

            $input->registerOption(
              new \ezcConsoleOption(
                '',
                'names-exclude',
                \ezcConsoleInput::TYPE_STRING,
                '',
                FALSE
               )
            );

            $input->registerOption(
              new \ezcConsoleOption(
                '',
                'quiet',
                \ezcConsoleInput::TYPE_NONE,
                NULL,
                FALSE
               )
            );

            $input->registerOption(
              new \ezcConsoleOption(
                'v',
                'version',
                \ezcConsoleInput::TYPE_NONE,
                NULL,
                FALSE,
                '',
                '',
                array(),
                array(),
                FALSE,
                FALSE,
                TRUE
               )
            );

            try {
                $input->process();
            }

            catch (\ezcConsoleOptionException $e) {
                print $e->getMessage() . "\n";
                exit(1);
            }

            if ($input->getOption('help')->value) {
                $this->showHelp();
                exit(0);
            }

            else if ($input->getOption('version')->value) {
                $this->printVersionString();
                exit(0);
            }

            $arguments = $input->getArguments();

            if (empty($arguments)) {
                $this->showHelp();
                exit(1);
            }

            $checkstyle   = $input->getOption('checkstyle')->value;
            $excludes     = $input->getOption('exclude')->value;
            $rulesetFile  = $input->getOption('ruleset')->value;
            $names        = explode(',', $input->getOption('names')->value);
            $namesExclude = explode(',', $input->getOption('names-exclude')->value);
            $quiet        = $input->getOption('quiet')->value;

            array_map('trim', $names);
            array_map('trim', $namesExclude);

            $this->printVersionString();

            $finder = new FinderFacade($arguments, $excludes, $names, $namesExclude);
            $files  = $finder->findFiles();

            if (!$rulesetFile) {
                $rulesetFile = $this->getDefaultRulesetFile();
            }

            try {
                $ruleset = new Ruleset($rulesetFile);
                $rules   = $ruleset->getRules();
            }

            catch (\Exception $e) {
                $this->showError('Could not read ruleset.');
            }

            printf("Using ruleset %s\n\n", $rulesetFile);

            $analyzer = new Analyzer;
            $result   = new Result;
            $result->setRules($rules);

            try {
                $analyzer->run($files, $result);
            }
            catch (\RuntimeException $e) {
                $this->showError($e->getMessage());
            }

            if ($checkstyle) {
                $report = new Checkstyle;
                $report->generate($result, $checkstyle);
            }

            if (!$quiet) {
                $report = new Text;
                $report->generate($result, 'php://stdout');
            }

            $numFilesWithViolations = 0;
            $numViolations          = 0;

            foreach ($result->getViolations() as $lines) {
                $numFilesWithViolations++;

                foreach ($lines as $violations) {
                    $numViolations += count($violations);
                }
            }

            printf(
              "%sFound %d violation%s in %d file%s (out of %d total file%s).\n",
              !$quiet && $numViolations > 0 ? "\n" : '',
              $numViolations,
              $numViolations != 1 ? 's' : '',
              $numFilesWithViolations,
              $numFilesWithViolations != 1 ? 's' : '',
              count($files),
              count($files) != 1 ? 's' : ''
            );

            if ($numViolations > 0) {
                exit(1);
            }
        }

        /**
         * Shows an error.
         *
         * @param string $message
         * @since Method available since Release 1.0.4
         */
        protected function showError($message)
        {
            print $message . "\n";
            exit(1);
        }

        /**
         * Shows the help.
         */
        protected function showHelp()
        {
            $this->printVersionString();

            print <<<EOT
Usage: hphpa [switches] <directory|file> ...

  --checkstyle <file>     Write report in Checkstyle XML format to file.
  --ruleset <file>        Read list of rules to apply from XML file.

  --exclude <dir>         Exclude <dir> from code analysis.
  --names <names>         A comma-separated list of file names to check.
                          (default: *.php)

  --help                  Prints this usage information.
  --version               Prints the version and exits.

  --quiet                 Do not print violations.

EOT;
        }

        /**
         * Prints the version string.
         */
        protected function printVersionString()
        {
            printf(
              "hphpa %s by Sebastian Bergmann.\n\n", $this->version
            );
        }

        /**
         * @return string
         * @since  Method available since Release 1.1.0
         */
        protected function getDefaultRulesetFile()
        {
            if (defined('__HPHPA_PHAR__')) {
                return 'phar://' . basename(__HPHPA_PHAR__) . '/ruleset.xml';
            }

            else if (strpos('/opt/alt/php54//usr/share/pear/data', '@data_dir') === 0) {
                return realpath(
                  dirname(dirname(__DIR__)) . DIRECTORY_SEPARATOR . 'ruleset.xml'
                );
            }

            return realpath(
              '/opt/alt/php54//usr/share/pear/data' . DIRECTORY_SEPARATOR . 'hphpa' . DIRECTORY_SEPARATOR . 'ruleset.xml'
            );
        }
    }
}

Zerion Mini Shell 1.0