These results are based on our legacy PHP analysis, consider migrating to our new PHP analysis engine instead. Learn more
1 | <?php |
||
2 | /* |
||
3 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
||
4 | * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
||
5 | * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
||
6 | * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
||
7 | * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
||
8 | * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
||
9 | * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
||
10 | * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
||
11 | * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
||
12 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
||
13 | * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
||
14 | * |
||
15 | * This software consists of voluntary contributions made by many individuals |
||
16 | * and is licensed under the MIT license. |
||
17 | */ |
||
18 | |||
19 | namespace KawaiiGherkin\Command; |
||
20 | |||
21 | use Behat\Gherkin\Parser; |
||
22 | use KawaiiGherkin\Formatter\Background; |
||
23 | use KawaiiGherkin\Formatter\FeatureDescription; |
||
24 | use KawaiiGherkin\Formatter\Scenario; |
||
25 | use KawaiiGherkin\Formatter\Step; |
||
26 | use KawaiiGherkin\Formatter\Tags; |
||
27 | use Symfony\Component\Console\Command\Command; |
||
28 | use Symfony\Component\Console\Input\InputArgument; |
||
29 | use Symfony\Component\Console\Input\InputInterface; |
||
30 | use Symfony\Component\Console\Input\InputOption; |
||
31 | use Symfony\Component\Console\Output\OutputInterface; |
||
32 | use Symfony\Component\Finder\Finder; |
||
33 | |||
34 | /** |
||
35 | * @author Jefersson Nathan <[email protected]> |
||
36 | * @license MIT |
||
37 | */ |
||
38 | final class FixGherkinCodeStyle extends Command |
||
0 ignored issues
–
show
Complexity
introduced
by
Loading history...
|
|||
39 | { |
||
40 | /** |
||
41 | * @var Parser |
||
42 | */ |
||
43 | private $parser; |
||
44 | |||
45 | /** |
||
46 | * {@inheritDoc} |
||
47 | * |
||
48 | * @param Parser $parser |
||
49 | */ |
||
50 | public function __construct($name, Parser $parser) |
||
51 | { |
||
52 | parent::__construct('Kawaii Gherkin'); |
||
53 | $this->parser = $parser; |
||
54 | } |
||
55 | |||
56 | /** |
||
57 | * {@inheritDoc} |
||
58 | */ |
||
59 | protected function configure() |
||
60 | { |
||
61 | $this |
||
62 | ->setName('gherkin:fix') |
||
63 | ->setDescription('Fix gherkin code style') |
||
64 | ->addArgument( |
||
65 | 'directory', |
||
66 | InputArgument::REQUIRED, |
||
67 | 'Path to find *.feature files' |
||
68 | ) |
||
69 | ->addOption( |
||
70 | 'align', |
||
71 | null, |
||
72 | InputOption::VALUE_OPTIONAL, |
||
73 | 'Side to align statement (right or left). Default right', |
||
74 | 'left' |
||
75 | ); |
||
76 | } |
||
77 | |||
78 | /** |
||
79 | * {@inheritDoc} |
||
80 | */ |
||
81 | protected function execute(InputInterface $input, OutputInterface $output) |
||
0 ignored issues
–
show
This operation has 630 execution paths which exceeds the configured maximum of 200.
A high number of execution paths generally suggests many nested conditional statements and make the code less readible. This can usually be fixed by splitting the method into several smaller methods. You can also find more information in the “Code” section of your repository.
Loading history...
|
|||
82 | { |
||
83 | $align = $input->getArgument('align') === Step::ALIGN_TO_LEFT |
||
84 | ? Step::ALIGN_TO_LEFT |
||
85 | : Step::ALIGN_TO_RIGHT; |
||
86 | |||
87 | $directory = $input->getArgument('directory'); |
||
88 | $finder = new Finder(); |
||
89 | $finder |
||
90 | ->files() |
||
91 | ->in($directory) |
||
92 | ->name('*.feature'); |
||
93 | |||
94 | $output->writeln(''); |
||
95 | $output->writeln('Finding files on <info>' . $directory . '</info>'); |
||
96 | $output->writeln(''); |
||
97 | |||
98 | /* @var $file \Symfony\Component\Finder\SplFileInfo */ |
||
99 | foreach ($finder as $file) { |
||
100 | |||
101 | $fileContent = $file->getContents(); |
||
102 | $feature = $this->parser->parse($fileContent); |
||
103 | |||
104 | $tagFormatter = new Tags(); |
||
105 | $featureDescription = new FeatureDescription(); |
||
106 | $background = new Background($align); |
||
107 | $scenario = new Scenario($align); |
||
108 | |||
109 | $formatted = $feature->hasTags() ? $tagFormatter->format($feature->getTags()) . PHP_EOL : ''; |
||
110 | $formatted .= $featureDescription->format($feature->getTitle(), explode(PHP_EOL, $feature->getDescription())) . PHP_EOL . PHP_EOL; |
||
111 | $formatted .= $feature->hasBackground() ? $background->format($feature->getBackground()) . PHP_EOL . PHP_EOL : ''; |
||
112 | $formatted .= $feature->hasScenarios() ? $scenario->format($feature->getScenarios()) : ''; |
||
113 | |||
114 | $filePointer = $file->openFile('w'); |
||
115 | $filePointer->fwrite($formatted); |
||
116 | |||
117 | $output->writeln('<info>' . $file->getRealpath() . '</info>'); |
||
118 | } |
||
119 | } |
||
120 | } |
||
121 |