protected function setUp()
 {
     $fixer = new Fixer();
     $fixer->registerBuiltInConfigs();
     $this->config = new Config();
     $this->resolver = new ConfigurationResolver();
     $this->resolver->setDefaultConfig($this->config)->setFixer($fixer);
 }
 /**
  * @covers Symfony\CS\Fixer\ElseifFixer::getPriority
  */
 public function testThatWillBeRunAfterControlSpacesFixer()
 {
     $fixer = new Fixer();
     $elseIfFixer = new ElseIfFixer();
     $controlSpacesFixer = new ControlSpacesFixer();
     $fixer->addFixer($controlSpacesFixer);
     $fixer->addFixer($elseIfFixer);
     $this->assertSame(array($controlSpacesFixer, $elseIfFixer), $fixer->getFixers());
 }
 /**
  * Resolve config based on options: config, config-file.
  */
 private function resolveConfig()
 {
     $configOption = $this->options['config'];
     if ($configOption) {
         foreach ($this->fixer->getConfigs() as $c) {
             if ($c->getName() === $configOption) {
                 $this->config = $c;
                 return;
             }
         }
         if (null === $this->config) {
             throw new \InvalidArgumentException(sprintf('The configuration "%s" is not defined.', $configOption));
         }
     }
     foreach ($this->computeConfigFiles() as $configFile) {
         if (!file_exists($configFile)) {
             continue;
         }
         $config = (include $configFile);
         // verify that the config has an instance of Config
         if (!$config instanceof Config) {
             throw new \UnexpectedValueException(sprintf('The config file: "%s" does not return a "Symfony\\CS\\Config\\Config" instance. Got: "%s".', $configFile, is_object($config) ? get_class($config) : gettype($config)));
         }
         $this->config = $config;
         $this->configFile = $configFile;
         return;
     }
     $this->config = $this->defaultConfig;
 }
Exemplo n.º 4
0
 protected function getConfigsHelp()
 {
     $help = '';
     $maxName = 0;
     $configs = $this->fixer->getConfigs();
     usort($configs, function (ConfigInterface $a, ConfigInterface $b) {
         return strcmp($a->getName(), $b->getName());
     });
     foreach ($configs as $config) {
         if (strlen($config->getName()) > $maxName) {
             $maxName = strlen($config->getName());
         }
     }
     $count = count($this->fixer->getConfigs()) - 1;
     foreach ($configs as $i => $config) {
         $chunks = explode("\n", wordwrap($config->getDescription(), 72 - $maxName, "\n"));
         $help .= sprintf(" * <comment>%s</comment>%s %s\n", $config->getName(), str_repeat(' ', $maxName - strlen($config->getName())), array_shift($chunks));
         while ($c = array_shift($chunks)) {
             $help .= str_repeat(' ', $maxName + 4) . $c . "\n";
         }
         if ($count !== $i) {
             $help .= "\n";
         }
     }
     return $help;
 }
 protected function setUp()
 {
     $fixer = new Fixer();
     $fixer->registerBuiltInFixers();
     $fixer->registerBuiltInConfigs();
     $fixersMap = array();
     foreach ($fixer->getFixers() as $singleFixer) {
         $level = $singleFixer->getLevel();
         if (!isset($fixersMap[$level])) {
             $fixersMap[$level] = array();
         }
         $fixersMap[$level][$singleFixer->getName()] = $singleFixer;
     }
     $this->fixersMap = $fixersMap;
     $this->config = new Config();
     $this->resolver = new ConfigurationResolver();
     $this->resolver->setDefaultConfig($this->config)->setFixer($fixer);
 }
 protected function setUp()
 {
     $fixer = new Fixer();
     $fixer->registerBuiltInFixers();
     $fixer->registerBuiltInConfigs();
     $fixersMap = array();
     foreach ($fixer->getFixers() as $singleFixer) {
         $level = $singleFixer->getLevel();
         if (!isset($fixersMap[$level])) {
             $fixersMap[$level] = array();
         }
         $fixersMap[$level][$singleFixer->getName()] = $singleFixer;
     }
     $this->fixersMap = $fixersMap;
     $this->config = $this->getMock('Symfony\\CS\\ConfigInterface');
     $this->resolver = new ConfigurationResolver();
     $this->resolver->setAllFixers($fixer->getFixers())->setConfig($this->config);
 }
Exemplo n.º 7
0
 /**
  * Compare generated class with expected class into resource dir
  *
  * @param string         $resourcesDir     fullPath resources dir
  * @param string         $namespace        namespace of class
  * @param string         $className        class name
  * @param string         $directoryOutput  output directory to compare from
  * @param bool           $createIfNotExist generate file if not exist equals on genereted one
  */
 private function compareClassPhp($resourcesDir, $namespace, $className, $directoryOutput, $createIfNotExist = false)
 {
     $fileExpected = $resourcesDir . '/' . $className . '.php';
     $fileName = $className . '.php';
     $fileActual = $directoryOutput . '/' . $namespace . '/' . $fileName;
     // echo file_get_contents($fileActual);
     /** @var \Symfony\CS\Config\Config $config */
     $config = ConfigBridge::create(__DIR__ . '/../../');
     $config->setUsingCache(false);
     $fixer = new Fixer();
     $fixer->registerBuiltInFixers();
     $fixer->registerBuiltInConfigs();
     // $fixer->setLintManager(new LintManager());
     $fixer->registerCustomFixers($config->getCustomFixers());
     $cresolver = new ConfigurationResolver();
     $cresolver->setConfig($config);
     $cresolver->setAllFixers($fixer->getFixers());
     $cresolver->setOption('level', 'symfony');
     // $cresolver->setOption('fixers', 'eof_ending,strict_param,short_array_syntax,trailing_spaces,indentation,line_after_namespace,php_closing_tag');
     $cresolver->setOption('fixers', 'binary_operator_spaces,blank_line_after_namespace,blank_line_after_opening_tag,blank_line_before_return,
                                      braces,cast_spaces,class_definition,concat_without_spaces,declare_equal_normalize,elseif,encoding,
                                      full_opening_tag,function_declaration,function_typehint_space,hash_to_slash_comment,heredoc_to_nowdoc,
                                      include,lowercase_cast,lowercase_constants,lowercase_keywords,method_argument_space,method_separation,
                                      native_function_casing,new_with_braces,no_alias_functions,no_blank_lines_after_class_opening,
                                      no_blank_lines_after_phpdoc,no_closing_tag,no_empty_phpdoc,no_empty_statement,
                                      no_extra_consecutive_blank_lines,no_leading_import_slash,no_leading_namespace_whitespace,
                                      no_multiline_whitespace_around_double_arrow,no_short_bool_cast,no_singleline_whitespace_before_semicolons,
                                      no_spaces_after_function_name,no_spaces_inside_offset,no_spaces_inside_parenthesis,no_tab_indentation,
                                      no_trailing_comma_in_list_call,no_trailing_comma_in_singleline_array,no_trailing_whitespace,
                                      no_trailing_whitespace_in_comment,no_unneeded_control_parentheses,no_unreachable_default_argument_value,
                                      no_unused_imports,no_whitespace_before_comma_in_array,no_whitespace_in_blank_line,normalize_index_brace,
                                      object_operator_without_whitespace,phpdoc_align,phpdoc_annotation_without_dot,phpdoc_indent,
                                      phpdoc_inline_tag,phpdoc_no_access,phpdoc_no_empty_return,phpdoc_no_package,phpdoc_scalar,
                                      phpdoc_separation,phpdoc_single_line_var_spacing,phpdoc_to_comment,phpdoc_trim,
                                      phpdoc_type_to_var,phpdoc_types,phpdoc_var_without_name,pre_increment,print_to_echo,psr4,self_accessor,
                                      short_scalar_cast,simplified_null_return,single_blank_line_at_eof,single_blank_line_before_namespace,
                                      single_class_element_per_statement,single_import_per_statement,single_line_after_imports,single_quote,
                                      space_after_semicolon,standardize_not_equals,switch_case_semicolon_to_colon,switch_case_space,
                                      ternary_operator_spaces,trailing_comma_in_multiline_array,trim_array_spaces,unalign_double_arrow,
                                      unalign_equals,unary_operator_spaces,unix_line_endings,visibility_required,whitespace_after_comma_in_array,
                                      short_array_syntax,linebreak_after_opening_tag,ordered_imports,no_useless_return,phpdoc_order,ordered_use,
                                      -phpdoc_short_description');
     $cresolver->resolve();
     $config->fixers($cresolver->getFixers());
     // $fileCacheManager = new FileCacheManager(false, $directoryOutput, $cresolver->getFixers());
     $iFile = new SplFileInfo($fileActual, $directoryOutput . '/' . $namespace, $fileName);
     // $fixer->fixFile($iFile, $cresolver->getFixers(), false, false, $fileCacheManager);
     $config->finder(new \ArrayIterator([$iFile]));
     // $changed =
     $fixer->fix($config, false, false);
     $fileActualFixed = $iFile->getPathname();
     $actual = file_get_contents($fileActualFixed);
     if (!file_exists($fileExpected) && $createIfNotExist) {
         file_put_contents($fileExpected, $actual);
     }
     $expected = file_get_contents($fileExpected);
     $this->assertSame($expected, $actual, 'Classe ' . $className . ' invalid');
 }
Exemplo n.º 8
0
 /**
  * Print files
  *
  * @param File[] $files
  * @param string $directory
  */
 public function printFiles($files, $directory)
 {
     foreach ($files as $file) {
         if (!file_exists(dirname($file->getFilename()))) {
             mkdir(dirname($file->getFilename()), 0755, true);
         }
         file_put_contents($file->getFilename(), $this->prettyPrinter->prettyPrintFile([$file->getNode()]));
     }
     if ($this->fixer !== null) {
         $config = Config::create()->setRiskyAllowed(true)->setRules(array('@Symfony' => true, 'empty_return' => false, 'concat_without_spaces' => false, 'double_arrow_multiline_whitespaces' => false, 'unalign_equals' => false, 'unalign_double_arrow' => false, 'align_double_arrow' => true, 'align_equals' => true, 'concat_with_spaces' => true, 'newline_after_open_tag' => true, 'ordered_use' => true, 'phpdoc_order' => true, 'short_array_syntax' => true))->finder(DefaultFinder::create()->in($directory));
         $resolver = new ConfigurationResolver();
         $resolver->setDefaultConfig($config);
         $resolver->resolve();
         $this->fixer->fix($config);
     }
 }
Exemplo n.º 9
0
 /**
  * @covers Symfony\CS\Fixer::getLevelAsString
  * @dataProvider getFixerLevels
  */
 public function testThatCanGetFixerLevelString($level, $expectedLevelString)
 {
     $fixer = $this->getMock('Symfony\\CS\\FixerInterface');
     $fixer->expects($this->any())->method('getLevel')->will($this->returnValue($level));
     $this->assertSame($expectedLevelString, Fixer::getLevelAsString($fixer));
 }
Exemplo n.º 10
0
 /**
  * Uses PHP CS Fixer to make generated files following PSR and Symfony Coding Standards.
  *
  * @param array $files
  */
 private function fixCs(array $files)
 {
     $config = new Config();
     $fixer = new Fixer();
     $fixer->registerBuiltInConfigs();
     $fixer->registerBuiltInFixers();
     $resolver = new ConfigurationResolver();
     $resolver->setAllFixers($fixer->getFixers())->setConfig($config)->setOptions(array('level' => 'symfony', 'fixers' => null, 'progress' => false))->resolve();
     $config->fixers($resolver->getFixers());
     $finder = [];
     foreach ($files as $file) {
         $finder[] = new \SplFileInfo($file);
     }
     $config->finder(new \ArrayIterator($finder));
     $fixer->fix($config);
 }
Exemplo n.º 11
0
 /**
  * Set fixer instance.
  *
  * @param Fixer $fixer
  *
  * @return ConfigurationResolver
  */
 public function setFixer(Fixer $fixer)
 {
     $this->fixer = $fixer;
     $this->allFixers = $fixer->getFixers();
     return $this;
 }
Exemplo n.º 12
0
 public function getFixersPriorityCases()
 {
     $fixer = new Fixer();
     $fixer->registerBuiltInFixers();
     $fixers = array();
     foreach ($fixer->getFixers() as $fixer) {
         $fixers[$fixer->getName()] = $fixer;
     }
     return array(array($fixers['php_closing_tag'], $fixers['short_tag']), array($fixers['unused_use'], $fixers['extra_empty_lines']), array($fixers['multiple_use'], $fixers['unused_use']), array($fixers['multiple_use'], $fixers['ordered_use']), array($fixers['remove_lines_between_uses'], $fixers['ordered_use']), array($fixers['concat_without_spaces'], $fixers['concat_with_spaces']), array($fixers['elseif'], $fixers['braces']), array($fixers['duplicate_semicolon'], $fixers['braces']), array($fixers['duplicate_semicolon'], $fixers['spaces_before_semicolon']), array($fixers['duplicate_semicolon'], $fixers['multiline_spaces_before_semicolon']), array($fixers['standardize_not_equal'], $fixers['strict']));
 }
Exemplo n.º 13
0
 public function getFixersPriorityCases()
 {
     $fixer = new Fixer();
     $fixer->registerBuiltInFixers();
     $fixers = array();
     foreach ($fixer->getFixers() as $fixer) {
         $fixers[$fixer->getName()] = $fixer;
     }
     return array(array($fixers['php_closing_tag'], $fixers['short_tag']), array($fixers['multiple_use'], $fixers['unused_use']), array($fixers['multiple_use'], $fixers['ordered_use']), array($fixers['concat_without_spaces'], $fixers['concat_with_spaces']), array($fixers['elseif'], $fixers['braces']));
 }
Exemplo n.º 14
0
 public function provideFixersForFinalCheckCases()
 {
     $fixer = new Fixer();
     $fixer->registerBuiltInFixers();
     $fixers = $fixer->getFixers();
     $cases = array();
     foreach ($fixers as $fixer) {
         $cases[] = array(new \ReflectionClass($fixer));
     }
     return $cases;
 }
Exemplo n.º 15
0
 public function testCanFixWithConfigInterfaceImplementation()
 {
     $config = $this->getMockBuilder('Symfony\\CS\\ConfigInterface')->getMock();
     $config->expects($this->any())->method('getFixers')->willReturn(array());
     $config->expects($this->any())->method('getRules')->willReturn(array());
     $config->expects($this->any())->method('getFinder')->willReturn(array());
     $fixer = new Fixer();
     $fixer->fix($config);
 }
 /**
  * Applies the given fixers on the input and checks the result.
  *
  * It will write the input to a temp file. The file will be fixed by a Fixer instance
  * configured with the given fixers. The result is compared with the expected output.
  * It checks if no errors were reported during the fixing.
  *
  * @param string           $testFileName Filename
  * @param string           $testTitle    Test title
  * @param FixerInterface[] $fixers       Fixers to use
  * @param array            $requirements Env requirements (PHP, HHVM)
  * @param string           $input        Code to fix
  * @param string|null      $expected     Expected result or null if the input is expected not to change
  */
 protected function doTest($testFileName, $testTitle, $fixers, array $requirements, $input, $expected = null)
 {
     if (defined('HHVM_VERSION') && false === $requirements['hhvm']) {
         $this->markTestSkipped('HHVM is not supported.');
     }
     if (isset($requirements['php']) && version_compare(PHP_VERSION, $requirements['php']) < 0) {
         $this->markTestSkipped(sprintf('PHP %s (or later) is required.', $requirements['php']));
     }
     $fixer = new Fixer();
     $tmpFile = static::getTempFile();
     if (false === @file_put_contents($tmpFile, $input)) {
         throw new IOException(sprintf('Failed to write to tmp. file "%s".', $tmpFile));
     }
     $changed = $fixer->fixFile(new \SplFileInfo($tmpFile), $fixers, false, true, new FileCacheManager(false, null, $fixers));
     $errorsManager = $fixer->getErrorsManager();
     if (!$errorsManager->isEmpty()) {
         $errors = $errorsManager->getExceptionErrors();
         $this->assertEmpty($errors, sprintf('Errors reported during fixing: %s', $this->implodeErrors($errors)));
         $errors = $errorsManager->getInvalidErrors();
         $this->assertEmpty($errors, sprintf('Errors reported during linting before fixing: %s.', $this->implodeErrors($errors)));
         $errors = $errorsManager->getLintErrors();
         $this->assertEmpty($errors, sprintf('Errors reported during linting after fixing: %s.', $this->implodeErrors($errors)));
     }
     if (null === $expected) {
         $this->assertEmpty($changed, sprintf("Expected no changes made to test \"%s\" in \"%s\".\nFixers applied:\n\"%s\".\nDiff.:\n\"%s\".", $testTitle, $testFileName, $changed === null ? '[None]' : implode(',', $changed['appliedFixers']), $changed === null ? '[None]' : $changed['diff']));
         return;
     }
     $this->assertNotEmpty($changed, sprintf('Expected changes made to test "%s" in "%s".', $testTitle, $testFileName));
     $this->assertSame($expected, file_get_contents($tmpFile), sprintf('Expected changes do not match result for "%s" in "%s".', $testTitle, $testFileName));
     // run the test again with the `expected` part, this should always stay the same
     $this->testIntegration($testFileName, $testTitle . ' "--EXPECT-- part run"', $fixers, $requirements, $expected);
 }
 /**
  * Applies the given fixers on the input and checks the result.
  *
  * It will write the input to a temp file. The file will be fixed by a Fixer instance
  * configured with the given fixers. The result is compared with the expected output.
  * It checks if no errors were reported during the fixing.
  *
  * @param IntegrationCase $case
  */
 protected function doTest($case)
 {
     if (defined('HHVM_VERSION') && false === $case->getRequirement('hhvm')) {
         $this->markTestSkipped('HHVM is not supported.');
     }
     if (version_compare(PHP_VERSION, $case->getRequirement('php')) < 0) {
         $this->markTestSkipped(sprintf('PHP %s (or later) is required.', $case->getRequirement('php')));
     }
     $input = $case->getInputCode();
     $expected = $case->getExpectedCode();
     $input = $case->hasInputCode() ? $input : $expected;
     if (getenv('LINT_TEST_CASES')) {
         $linter = new Linter();
         $linter->lintSource($input);
     }
     $fixer = new Fixer();
     $tmpFile = static::getTempFile();
     if (false === @file_put_contents($tmpFile, $input)) {
         throw new IOException(sprintf('Failed to write to tmp. file "%s".', $tmpFile));
     }
     $changed = $fixer->fixFile(new \SplFileInfo($tmpFile), $case->getFixers(), false, true, new FileCacheManager(false, null, $case->getFixers()));
     $errorsManager = $fixer->getErrorsManager();
     if (!$errorsManager->isEmpty()) {
         $errors = $errorsManager->getExceptionErrors();
         $this->assertEmpty($errors, sprintf('Errors reported during fixing: %s', $this->implodeErrors($errors)));
         $errors = $errorsManager->getInvalidErrors();
         $this->assertEmpty($errors, sprintf('Errors reported during linting before fixing: %s.', $this->implodeErrors($errors)));
         $errors = $errorsManager->getLintErrors();
         $this->assertEmpty($errors, sprintf('Errors reported during linting after fixing: %s.', $this->implodeErrors($errors)));
     }
     if (!$case->hasInputCode()) {
         $this->assertEmpty($changed, sprintf("Expected no changes made to test \"%s\" in \"%s\".\nFixers applied:\n\"%s\".\nDiff.:\n\"%s\".", $case->getTitle(), $case->getFileName(), $changed === null ? '[None]' : implode(',', $changed['appliedFixers']), $changed === null ? '[None]' : $changed['diff']));
         return;
     }
     $this->assertNotEmpty($changed, sprintf('Expected changes made to test "%s" in "%s".', $case->getTitle(), $case->getFileName()));
     $fixedInputCode = file_get_contents($tmpFile);
     $this->assertSame($expected, $fixedInputCode, sprintf('Expected changes do not match result for "%s" in "%s".', $case->getTitle(), $case->getFileName()));
     if ($case->shouldCheckPriority()) {
         $priorities = array_map(function (FixerInterface $fixer) {
             return $fixer->getPriority();
         }, $case->getFixers());
         $this->assertNotCount(1, array_unique($priorities), 'All used fixers must not have the same priority, integration tests should cover fixers with different priorities.');
         $tmpFile = static::getTempFile();
         if (false === @file_put_contents($tmpFile, $input)) {
             throw new IOException(sprintf('Failed to write to tmp. file "%s".', $tmpFile));
         }
         $changed = $fixer->fixFile(new \SplFileInfo($tmpFile), array_reverse($case->getFixers()), false, true, new FileCacheManager(false, null, $case->getFixers()));
         $fixedInputCodeWithReversedFixers = file_get_contents($tmpFile);
         $this->assertNotSame($fixedInputCode, $fixedInputCodeWithReversedFixers, 'Set priorities must be significant. If fixers used in reverse order return same output then the integration test is not sufficient or the priority relation between used fixers should not be set.');
     }
     // run the test again with the `expected` part, this should always stay the same
     $this->testIntegration($case->setTitle($case->getTitle() . ' "--EXPECT-- part run"')->setInputCode(null));
 }
 public function main()
 {
     try {
         /*
          * PROPERTIES VALIDATION
          */
         // check if the proxy flag has been set
         $proxy = $this->getProject()->getUserProperty('proxy');
         $proxy = $proxy !== null ? filter_var($proxy, FILTER_VALIDATE_BOOLEAN) : true;
         // determine the url of the WSDL document
         $wsdlUrl = $this->getProject()->getUserProperty('wsdl.url');
         $wsdlUrl = $wsdlUrl ? $wsdlUrl : static::WSDL_URL;
         /*
          * PROXY CONFIGURATION
          */
         // read the proxy configuration from the environment variables
         $proxy = $proxy ? current(array_filter(array(getenv('HTTP_PROXY'), getenv('http_proxy')), 'strlen')) : null;
         // prepare an empty url for the stream context
         $streamContextProxyUrl = null;
         // if the proxy is configured in the system
         if ($proxy) {
             // parse the WSDL url
             $parsedWsdlPath = Url::createFromUrl($wsdlUrl);
             // parse the proxy url
             $proxy = Url::createFromUrl($proxy);
             // if not fetching the wsdl file from filesystem and a proxy has been configured
             if ($parsedWsdlPath->getScheme()->get() !== 'file') {
                 $streamContextProxyUrl = 'tcp://' . $proxy->getAuthority() . $proxy->getRelativeUrl();
                 libxml_set_streams_context(stream_context_get_default(array($proxy->getScheme()->get() => array('proxy' => $streamContextProxyUrl, 'request_fulluri' => true))));
             }
         }
         /*
          * INITIALIZATION
          */
         // prepare the path to the generated code
         $outputDir = $this->project->getBasedir() . '/src';
         $output = new ConsoleOutput();
         $progress = new ProgressBar($output, 100);
         $progress->setFormat(ProgressBar::getFormatDefinition('normal') . ' %message%...');
         $progress->setMessage('Starting');
         $progress->start();
         $progress->setMessage('Cleaning the environment');
         // clean the output directory
         array_map('unlink', glob($outputDir . '/*'));
         $progress->advance(10);
         /*
          * GENERATION
          */
         // prepare the generator configuration
         $progress->setMessage('Configuring the generator');
         $optionFeatures = array();
         if ($proxy) {
             /* @var \League\Url\UrlInterface $proxy */
             $optionFeatures['proxy_host'] = $proxy->getHost()->get();
             $optionFeatures['proxy_port'] = $proxy->getPort()->get();
         }
         $config = new Config($wsdlUrl, $outputDir);
         $config->setNoTypeConstructor(true);
         $config->setOptionFeatures($optionFeatures);
         $config->setCreateAccessors(false);
         $config->setWsdlCache(false);
         $progress->advance(10);
         // generate the code
         $progress->setMessage('Generating the code');
         $gen = new Generator();
         $gen->generate($config);
         $progress->advance(10);
         /*
          * FIX
          */
         // the 'optionFeatures' configuration options is misused by the generator:
         // it is correctly used as the default 'features' options of the service (its values are bitwised and put
         // in the service class constructor), but it is also used as the '$options' argument of the \SoapClient
         // class when it connects to the service to inspect it (hence the need to define the 'proxy_host' and
         // 'proxy_port' keys). this makes the generated code clash, so we need to fix it, removing the unneeded
         // values from the bitwise operation.
         $defaultFeatures = array('SOAP_SINGLE_ELEMENT_ARRAYS', 'SOAP_WAIT_ONE_WAY_CALLS');
         // fix the option 'features' management
         $fileContent = file_get_contents("{$outputDir}/ClabService.php");
         $fileContent = preg_replace('/(\\$options\\[\'features\'\\] = ).*/', '$1' . implode(' | ', $defaultFeatures) . ';', $fileContent, -1, $count);
         // if no features option has been found, they must be added manually
         if ($count === 0) {
             $fileContent = preg_replace('/parent::__construct/', "if (isset(\$options['features']) == false) {\n\$options['features'] = " . implode(' | ', $defaultFeatures) . ";\n}\n\nparent::__construct", $fileContent, -1, $count);
         }
         file_put_contents("{$outputDir}/ClabService.php", $fileContent);
         /*
          * LICENSE MANAGEMENT
          */
         $progress->setMessage('Applying the license to the generated files');
         // read the license header
         $licenseHeader = file_get_contents($this->project->getBasedir() . '/resources/license_header.txt');
         // print the license on top of every file
         foreach (glob($outputDir . '/*.php') as $sourceFile) {
             $fileContent = file_get_contents($sourceFile);
             $fileContent = preg_replace('/^(<\\?php)/', "\$1\n\n" . $licenseHeader, $fileContent);
             file_put_contents($sourceFile, $fileContent);
         }
         unset($sourceFile);
         $progress->advance(10);
         /*
          * CODING STANDARDS FIXES
          */
         // create the coding standards fixer
         $progress->setMessage('Configuring the Coding Standards fixer');
         $fixer = new Fixer();
         $csConfig = new CSConfig();
         $csConfig->setDir($outputDir);
         $progress->advance(10);
         // register all the existing fixers
         $fixer->registerBuiltInFixers();
         $progress->advance(10);
         // register all fixers from all PSR levels
         /* @var $csFixer \Symfony\CS\FixerInterface */
         $fixers = array();
         foreach ($fixer->getFixers() as $csFixer) {
             if ($csFixer->getLevel() === ($csFixer->getLevel() & FixerInterface::PSR2_LEVEL)) {
                 $fixers[] = $csFixer;
             }
         }
         // fix the generated code
         $progress->setMessage('Fixing the generated code');
         $csConfig->fixers($fixers);
         $progress->advance(10);
         $fixer->fix($csConfig);
         $progress->advance(10);
         $progress->setFormat(ProgressBar::getFormatDefinition('normal') . ' %message%');
         $progress->setMessage('Done');
         $progress->finish();
         $output->writeln('');
     } catch (\Exception $e) {
         $this->log($e->getMessage(), \Project::MSG_ERR);
     }
 }
Exemplo n.º 19
0
 /**
  * @see Command
  */
 protected function execute(InputInterface $input, OutputInterface $output)
 {
     $stdErr = $output instanceof ConsoleOutputInterface ? $output->getErrorOutput() : null;
     if ($stdErr && extension_loaded('xdebug')) {
         $stdErr->writeln(sprintf($stdErr->isDecorated() ? '<bg=yellow;fg=black;>%s</>' : '%s', 'You are running php-cs-fixer with xdebug enabled. This has a major impact on runtime performance.'));
     }
     $verbosity = $output->getVerbosity();
     $resolver = new ConfigurationResolver();
     $resolver->setCwd(getcwd())->setDefaultConfig($this->defaultConfig)->setFixer($this->fixer)->setOptions(array('allow-risky' => $input->getOption('allow-risky'), 'config-file' => $input->getOption('config-file'), 'dry-run' => $input->getOption('dry-run'), 'rules' => $input->getOption('rules'), 'path' => $input->getArgument('path'), 'progress' => OutputInterface::VERBOSITY_VERBOSE <= $verbosity && 'txt' === $input->getOption('format'), 'using-cache' => $input->getOption('using-cache'), 'cache-file' => $input->getOption('cache-file'), 'format' => $input->getOption('format')))->resolve();
     $config = $resolver->getConfig();
     $configFile = $resolver->getConfigFile();
     if ($configFile && 'txt' === $input->getOption('format')) {
         $output->writeln(sprintf('Loaded config from "%s"', $configFile));
     }
     if ($config->usingLinter()) {
         try {
             $this->fixer->setLinter(new Linter($config->getPhpExecutable()));
         } catch (UnavailableLinterException $e) {
             if ($configFile && 'txt' === $input->getOption('format')) {
                 $output->writeln('Unable to use linter, can not find PHP executable');
             }
         }
     }
     $showProgress = $resolver->getProgress();
     if ($showProgress) {
         $this->fixer->setEventDispatcher($this->eventDispatcher);
         $progressOutput = new ProcessOutput($this->eventDispatcher);
     }
     $this->stopwatch->start('fixFiles');
     $changed = $this->fixer->fix($config, $resolver->isDryRun(), $input->getOption('diff'));
     $this->stopwatch->stop('fixFiles');
     if ($showProgress) {
         $progressOutput->printLegend();
         $this->fixer->setEventDispatcher(null);
     }
     $i = 1;
     switch ($resolver->getFormat()) {
         case 'txt':
             $fixerDetailLine = false;
             if (OutputInterface::VERBOSITY_VERBOSE <= $verbosity) {
                 $fixerDetailLine = $output->isDecorated() ? ' (<comment>%s</comment>)' : ' %s';
             }
             foreach ($changed as $file => $fixResult) {
                 $output->write(sprintf('%4d) %s', $i++, $file));
                 if ($fixerDetailLine) {
                     $output->write(sprintf($fixerDetailLine, implode(', ', $fixResult['appliedFixers'])));
                 }
                 if ($input->getOption('diff')) {
                     $output->writeln('');
                     $output->writeln('<comment>      ---------- begin diff ----------</comment>');
                     $output->writeln($fixResult['diff']);
                     $output->writeln('<comment>      ---------- end diff ----------</comment>');
                 }
                 $output->writeln('');
             }
             if (OutputInterface::VERBOSITY_DEBUG <= $verbosity) {
                 $output->writeln('Fixing time per file:');
                 foreach ($this->stopwatch->getSectionEvents('fixFile') as $file => $event) {
                     if ('__section__' === $file) {
                         continue;
                     }
                     $output->writeln(sprintf('[%.3f s] %s', $event->getDuration() / 1000, $file));
                 }
                 $output->writeln('');
             }
             $fixEvent = $this->stopwatch->getEvent('fixFiles');
             $output->writeln(sprintf('%s all files in %.3f seconds, %.3f MB memory used', $input->getOption('dry-run') ? 'Checked' : 'Fixed', $fixEvent->getDuration() / 1000, $fixEvent->getMemory() / 1024 / 1024));
             break;
         case 'xml':
             $dom = new \DOMDocument('1.0', 'UTF-8');
             // new nodes should be added to this or existing children
             $root = $dom->createElement('report');
             $dom->appendChild($root);
             $filesXML = $dom->createElement('files');
             $root->appendChild($filesXML);
             foreach ($changed as $file => $fixResult) {
                 $fileXML = $dom->createElement('file');
                 $fileXML->setAttribute('id', $i++);
                 $fileXML->setAttribute('name', $file);
                 $filesXML->appendChild($fileXML);
                 if (OutputInterface::VERBOSITY_VERBOSE <= $verbosity) {
                     $appliedFixersXML = $dom->createElement('applied_fixers');
                     $fileXML->appendChild($appliedFixersXML);
                     foreach ($fixResult['appliedFixers'] as $appliedFixer) {
                         $appliedFixerXML = $dom->createElement('applied_fixer');
                         $appliedFixerXML->setAttribute('name', $appliedFixer);
                         $appliedFixersXML->appendChild($appliedFixerXML);
                     }
                 }
                 if ($input->getOption('diff')) {
                     $diffXML = $dom->createElement('diff');
                     $diffXML->appendChild($dom->createCDATASection($fixResult['diff']));
                     $fileXML->appendChild($diffXML);
                 }
             }
             $fixEvent = $this->stopwatch->getEvent('fixFiles');
             $timeXML = $dom->createElement('time');
             $memoryXML = $dom->createElement('memory');
             $root->appendChild($timeXML);
             $root->appendChild($memoryXML);
             $memoryXML->setAttribute('value', round($fixEvent->getMemory() / 1024 / 1024, 3));
             $memoryXML->setAttribute('unit', 'MB');
             $timeXML->setAttribute('unit', 's');
             $timeTotalXML = $dom->createElement('total');
             $timeTotalXML->setAttribute('value', round($fixEvent->getDuration() / 1000, 3));
             $timeXML->appendChild($timeTotalXML);
             if (OutputInterface::VERBOSITY_DEBUG <= $verbosity) {
                 $timeFilesXML = $dom->createElement('files');
                 $timeXML->appendChild($timeFilesXML);
                 $eventCounter = 1;
                 foreach ($this->stopwatch->getSectionEvents('fixFile') as $file => $event) {
                     if ('__section__' === $file) {
                         continue;
                     }
                     $timeFileXML = $dom->createElement('file');
                     $timeFilesXML->appendChild($timeFileXML);
                     $timeFileXML->setAttribute('id', $eventCounter++);
                     $timeFileXML->setAttribute('name', $file);
                     $timeFileXML->setAttribute('value', round($event->getDuration() / 1000, 3));
                 }
             }
             $dom->formatOutput = true;
             $output->write($dom->saveXML());
             break;
         case 'json':
             $jFiles = array();
             foreach ($changed as $file => $fixResult) {
                 $jfile = array('name' => $file);
                 if (OutputInterface::VERBOSITY_VERBOSE <= $verbosity) {
                     $jfile['appliedFixers'] = $fixResult['appliedFixers'];
                 }
                 if ($input->getOption('diff')) {
                     $jfile['diff'] = $fixResult['diff'];
                 }
                 $jFiles[] = $jfile;
             }
             $fixEvent = $this->stopwatch->getEvent('fixFiles');
             $json = array('files' => $jFiles, 'memory' => round($fixEvent->getMemory() / 1024 / 1024, 3), 'time' => array('total' => round($fixEvent->getDuration() / 1000, 3)));
             if (OutputInterface::VERBOSITY_DEBUG <= $verbosity) {
                 $jFileTime = array();
                 foreach ($this->stopwatch->getSectionEvents('fixFile') as $file => $event) {
                     if ('__section__' === $file) {
                         continue;
                     }
                     $jFileTime[$file] = round($event->getDuration() / 1000, 3);
                 }
                 $json['time']['files'] = $jFileTime;
             }
             $output->write(json_encode($json));
             break;
     }
     $invalidErrors = $this->errorsManager->getInvalidErrors();
     if (!empty($invalidErrors)) {
         $this->listErrors($output, 'linting before fixing', $invalidErrors);
     }
     $exceptionErrors = $this->errorsManager->getExceptionErrors();
     if (!empty($exceptionErrors)) {
         $this->listErrors($output, 'fixing', $exceptionErrors);
     }
     $lintErrors = $this->errorsManager->getLintErrors();
     if (!empty($lintErrors)) {
         $this->listErrors($output, 'linting after fixing', $lintErrors);
     }
     $exitStatus = 0;
     if ($resolver->isDryRun()) {
         if (!empty($invalidErrors)) {
             $exitStatus |= self::EXIT_STATUS_FLAG_HAS_INVALID_FILES;
         }
         if (!empty($changed)) {
             $exitStatus |= self::EXIT_STATUS_FLAG_HAS_CHANGED_FILES;
         }
     }
     return $exitStatus;
 }
Exemplo n.º 20
0
 /**
  * Parses the '--CONFIG--' block of a '.test' file and determines what fixers should be used.
  *
  * @param string $fileName
  * @param string $config
  *
  * @return FixerInterface[]
  */
 protected function getFixersFromConfig($fileName, $config)
 {
     static $levelMap = array('none' => FixerInterface::NONE_LEVEL, 'psr1' => FixerInterface::PSR1_LEVEL, 'psr2' => FixerInterface::PSR2_LEVEL, 'symfony' => FixerInterface::SYMFONY_LEVEL);
     $lines = explode("\n", $config);
     if (count($lines) < 1) {
         throw new \InvalidArgumentException(sprintf('No configuration options found in "%s".', $fileName));
     }
     $config = array('level' => null, 'fixers' => array(), '--fixers' => array());
     foreach ($lines as $line) {
         $labelValuePair = explode('=', $line);
         if (2 !== count($labelValuePair)) {
             throw new \InvalidArgumentException(sprintf('Invalid configuration line "%s" in "%s".', $line, $fileName));
         }
         $label = strtolower(trim($labelValuePair[0]));
         $value = trim($labelValuePair[1]);
         switch ($label) {
             case 'level':
                 if (!array_key_exists($value, $levelMap)) {
                     throw new \InvalidArgumentException(sprintf('Unknown level "%s" set in configuration in "%s", expected any of "%s".', $value, $fileName, implode(', ', array_keys($levelMap))));
                 }
                 if (null !== $config['level']) {
                     throw new \InvalidArgumentException(sprintf('Cannot use multiple levels in configuration in "%s".', $fileName));
                 }
                 $config['level'] = $value;
                 break;
             case 'fixers':
             case '--fixers':
                 foreach (explode(',', $value) as $fixer) {
                     $config[$label][] = strtolower(trim($fixer));
                 }
                 break;
             default:
                 throw new \InvalidArgumentException(sprintf('Unknown configuration item "%s" in "%s".', $label, $fileName));
         }
     }
     if (null === $config['level']) {
         throw new \InvalidArgumentException(sprintf('Level not set in configuration "%s".', $fileName));
     }
     if (null === self::$builtInFixers) {
         $fixer = new Fixer();
         $fixer->registerBuiltInFixers();
         self::$builtInFixers = $fixer->getFixers();
     }
     $fixers = array();
     for ($i = count(self::$builtInFixers) - 1; $i >= 0; --$i) {
         $fixer = self::$builtInFixers[$i];
         $fixerName = $fixer->getName();
         if ('psr0' === $fixer->getName()) {
             // File based fixer won't work
             continue;
         }
         if ($fixer->getLevel() !== ($fixer->getLevel() & $levelMap[$config['level']])) {
             if (false !== ($key = array_search($fixerName, $config['fixers'], true))) {
                 $fixers[] = $fixer;
                 unset($config['fixers'][$key]);
             }
             continue;
         }
         if (false !== ($key = array_search($fixerName, $config['--fixers'], true))) {
             unset($config['--fixers'][$key]);
             continue;
         }
         if (in_array($fixerName, $config['fixers'], true)) {
             throw new \InvalidArgumentException(sprintf('Additional fixer "%s" configured, but is already part of the level.', $fixerName));
         }
         $fixers[] = $fixer;
     }
     if (!empty($config['fixers']) || !empty($config['--fixers'])) {
         throw new \InvalidArgumentException(sprintf('Unknown fixers in configuration "%s".', implode(',', empty($config['fixers']) ? $config['--fixers'] : $config['fixers'])));
     }
     return $fixers;
 }
Exemplo n.º 21
0
 /**
  * Execute the code generation
  */
 public function generate()
 {
     /*
      * PROXY CONFIGURATION
      */
     $proxy = current(array_filter(array(getenv('HTTP_PROXY'), getenv('http_proxy')), 'strlen'));
     if ($proxy) {
         $parsedWsdlPath = Url::createFromUrl($this->config->getWsdlDocumentPath());
         // if not fetching the wsdl file from filesystem and a proxy has been set
         if ($parsedWsdlPath->getScheme()->get() !== 'file') {
             $proxy = Url::createFromUrl($proxy);
             libxml_set_streams_context(stream_context_get_default(array($proxy->getScheme()->get() => array('proxy' => 'tcp://' . $proxy->getAuthority() . $proxy->getRelativeUrl(), 'request_fulluri' => true))));
         }
     }
     unset($proxy);
     /*
      * LOAD THE WSDL DOCUMENT
      */
     $wsdlDocument = SimpleXMLElement::loadFile($this->config->getWsdlDocumentPath());
     $wsdlDocument->registerXPathNamespace('wsdl', static::WSDL_NS);
     $schemaReader = new SchemaReader();
     /* @var \Goetas\XML\XSDReader\Schema\Schema[] $schemas */
     $schemas = array();
     /* @var \Goetas\XML\XSDReader\Schema\Type\Type[] $types */
     $types = array();
     /*
      * LOAD THE XML SCHEMAS
      */
     // read the schemas included in the wsdl document
     foreach ($wsdlDocument->xpath('/wsdl:definitions/wsdl:types/xsd:schema') as $schemaNode) {
         $schemas[] = $schemaReader->readNode(dom_import_simplexml($schemaNode));
     }
     // exclude the schemas having the following namespaces
     $unusedSchemaNamespaces = array(SchemaReader::XML_NS, SchemaReader::XSD_NS);
     // recursively read all the schema chain
     $processedSchemas = array();
     while (!empty($schemas)) {
         /* @var \Goetas\XML\XSDReader\Schema\Schema $currentSchema */
         $currentSchema = array_shift($schemas);
         if (!in_array($currentSchema, $processedSchemas) and !in_array($currentSchema->getTargetNamespace(), $unusedSchemaNamespaces)) {
             $processedSchemas[] = $currentSchema;
             $schemas = array_merge($schemas, $currentSchema->getSchemas());
         }
     }
     $schemas = $processedSchemas;
     // cleanup
     unset($currentSchema);
     unset($processedSchemas);
     unset($unusedSchemaNamespaces);
     unset($schemaNode);
     unset($schemaReader);
     /*
      * LOAD THE DEFINED TYPES
      */
     // get the complete list of defined types
     foreach ($schemas as $schema) {
         $types = array_merge($types, $schema->getTypes());
     }
     /*
      * LOAD THE SERVICES
      */
     $services = $wsdlDocument->xpath('/wsdl:definitions/wsdl:portType');
     /*
      * CODE GENERATION
      */
     $classFactory = new ClassFactory($this->config, $schemas, $types);
     foreach ($types as $type) {
         if ($type instanceof SimpleType) {
             // build the inheritance chain of the current SimpleType
             /* @var \Goetas\XML\XSDReader\Schema\Type\SimpleType[] $inheritanceChain */
             $inheritanceChain = array($type->getRestriction());
             // loop through the type inheritance chain untill the base type
             while (end($inheritanceChain) !== null) {
                 $inheritanceChain[] = end($inheritanceChain)->getBase()->getParent();
             }
             // remove the null value
             array_pop($inheritanceChain);
             // remove the 'anySimpleType'
             array_pop($inheritanceChain);
             // now the last element of the chain is the base simple type
             // enums are built only of string enumerations
             if (end($inheritanceChain)->getBase()->getName() === 'string' and array_key_exists('enumeration', $type->getRestriction()->getChecks())) {
                 $className = $classFactory->createEnum($type);
                 $this->eventDispatcher->dispatch(Event::ENUM_CREATE, new Event($className));
             }
         } elseif ($type instanceof ComplexType) {
             $className = $classFactory->createDTO($type);
             $this->eventDispatcher->dispatch(Event::DTO_CREATE, new Event($className));
         }
     }
     foreach ($services as $service) {
         $className = $classFactory->createService($service);
         $this->eventDispatcher->dispatch(Event::SERVICE_CREATE, new Event($className));
     }
     $className = $classFactory->createClassmap();
     $this->eventDispatcher->dispatch(Event::CLASSMAP_CREATE, new Event($className));
     /*
      * GENERATED CODE FIX
      */
     // create the coding standards fixer
     $fixer = new Fixer();
     $config = new FixerConfig();
     $config->setDir($this->config->getOutputPath());
     // register all the existing fixers
     $fixer->registerBuiltInFixers();
     $config->fixers(array_filter($fixer->getFixers(), function (FixerInterface $fixer) {
         return $fixer->getLevel() === FixerInterface::PSR2_LEVEL;
     }));
     // fix the generated code
     $fixer->fix($config);
 }
Exemplo n.º 22
0
 public function provideFixersDescriptionConsistencyCases()
 {
     $fixer = new Fixer();
     $fixer->registerBuiltInFixers();
     $fixers = $fixer->getFixers();
     $cases = array();
     foreach ($fixers as $fixer) {
         $cases[] = array($fixer);
     }
     return $cases;
 }
Exemplo n.º 23
0
 protected function getFixersHelp()
 {
     $help = '';
     $maxName = 0;
     $fixers = $this->fixer->getFixers();
     // sort fixers by level and name
     usort($fixers, function (FixerInterface $a, FixerInterface $b) {
         $cmp = Fixer::cmpInt($a->getLevel(), $b->getLevel());
         if (0 !== $cmp) {
             return $cmp;
         }
         return strcmp($a->getName(), $b->getName());
     });
     foreach ($fixers as $fixer) {
         if (strlen($fixer->getName()) > $maxName) {
             $maxName = strlen($fixer->getName());
         }
     }
     $count = count($fixers) - 1;
     foreach ($fixers as $i => $fixer) {
         $chunks = explode("\n", wordwrap(sprintf('[%s] %s', $this->fixer->getLevelAsString($fixer), $fixer->getDescription()), 72 - $maxName, "\n"));
         $help .= sprintf(" * <comment>%s</comment>%s %s\n", $fixer->getName(), str_repeat(' ', $maxName - strlen($fixer->getName())), array_shift($chunks));
         while ($c = array_shift($chunks)) {
             $help .= str_repeat(' ', $maxName + 4) . $c . "\n";
         }
         if ($count !== $i) {
             $help .= "\n";
         }
     }
     return $help;
 }