@@ -9,48 +9,48 @@ |
||
9 | 9 | |
10 | 10 | class ProjectComposerPackage extends ComposerPackage |
11 | 11 | { |
12 | - protected string $author; |
|
13 | - |
|
14 | - protected string $vendorDirectory; |
|
15 | - |
|
16 | - public function __construct(string $absolutePath, array $overrideAutoload = null) |
|
17 | - { |
|
18 | - parent::__construct($absolutePath, $overrideAutoload); |
|
19 | - |
|
20 | - $authors = $this->composer->getPackage()->getAuthors(); |
|
21 | - if (empty($authors) || !isset($authors[0]['name'])) { |
|
22 | - $this->author = explode("/", $this->name, 2)[0]; |
|
23 | - } else { |
|
24 | - $this->author = $authors[0]['name']; |
|
25 | - } |
|
26 | - |
|
27 | - $vendorDirectory = $this->composer->getConfig()->get('vendor-dir'); |
|
28 | - if (is_string($vendorDirectory)) { |
|
29 | - $vendorDirectory = str_replace($absolutePath, '', (string) $vendorDirectory); |
|
30 | - $this->vendorDirectory = $vendorDirectory; |
|
31 | - } else { |
|
32 | - $this->vendorDirectory = 'vendor' . DIRECTORY_SEPARATOR; |
|
33 | - } |
|
34 | - } |
|
35 | - |
|
36 | - /** |
|
37 | - * @return StraussConfig |
|
38 | - * @throws \Exception |
|
39 | - */ |
|
40 | - public function getStraussConfig(): StraussConfig |
|
41 | - { |
|
42 | - |
|
43 | - return new StraussConfig($this->composer); |
|
44 | - } |
|
45 | - |
|
46 | - |
|
47 | - public function getAuthor(): string |
|
48 | - { |
|
49 | - return $this->author; |
|
50 | - } |
|
51 | - |
|
52 | - public function getVendorDirectory(): string |
|
53 | - { |
|
54 | - return rtrim($this->vendorDirectory, DIRECTORY_SEPARATOR) . DIRECTORY_SEPARATOR; |
|
55 | - } |
|
12 | + protected string $author; |
|
13 | + |
|
14 | + protected string $vendorDirectory; |
|
15 | + |
|
16 | + public function __construct(string $absolutePath, array $overrideAutoload = null) |
|
17 | + { |
|
18 | + parent::__construct($absolutePath, $overrideAutoload); |
|
19 | + |
|
20 | + $authors = $this->composer->getPackage()->getAuthors(); |
|
21 | + if (empty($authors) || !isset($authors[0]['name'])) { |
|
22 | + $this->author = explode("/", $this->name, 2)[0]; |
|
23 | + } else { |
|
24 | + $this->author = $authors[0]['name']; |
|
25 | + } |
|
26 | + |
|
27 | + $vendorDirectory = $this->composer->getConfig()->get('vendor-dir'); |
|
28 | + if (is_string($vendorDirectory)) { |
|
29 | + $vendorDirectory = str_replace($absolutePath, '', (string) $vendorDirectory); |
|
30 | + $this->vendorDirectory = $vendorDirectory; |
|
31 | + } else { |
|
32 | + $this->vendorDirectory = 'vendor' . DIRECTORY_SEPARATOR; |
|
33 | + } |
|
34 | + } |
|
35 | + |
|
36 | + /** |
|
37 | + * @return StraussConfig |
|
38 | + * @throws \Exception |
|
39 | + */ |
|
40 | + public function getStraussConfig(): StraussConfig |
|
41 | + { |
|
42 | + |
|
43 | + return new StraussConfig($this->composer); |
|
44 | + } |
|
45 | + |
|
46 | + |
|
47 | + public function getAuthor(): string |
|
48 | + { |
|
49 | + return $this->author; |
|
50 | + } |
|
51 | + |
|
52 | + public function getVendorDirectory(): string |
|
53 | + { |
|
54 | + return rtrim($this->vendorDirectory, DIRECTORY_SEPARATOR) . DIRECTORY_SEPARATOR; |
|
55 | + } |
|
56 | 56 | } |
@@ -13,20 +13,20 @@ discard block |
||
13 | 13 | |
14 | 14 | protected string $vendorDirectory; |
15 | 15 | |
16 | - public function __construct(string $absolutePath, array $overrideAutoload = null) |
|
16 | + public function __construct( string $absolutePath, array $overrideAutoload = null ) |
|
17 | 17 | { |
18 | - parent::__construct($absolutePath, $overrideAutoload); |
|
18 | + parent::__construct( $absolutePath, $overrideAutoload ); |
|
19 | 19 | |
20 | 20 | $authors = $this->composer->getPackage()->getAuthors(); |
21 | - if (empty($authors) || !isset($authors[0]['name'])) { |
|
22 | - $this->author = explode("/", $this->name, 2)[0]; |
|
21 | + if ( empty( $authors ) || ! isset( $authors[ 0 ][ 'name' ] ) ) { |
|
22 | + $this->author = explode( "/", $this->name, 2 )[ 0 ]; |
|
23 | 23 | } else { |
24 | - $this->author = $authors[0]['name']; |
|
24 | + $this->author = $authors[ 0 ][ 'name' ]; |
|
25 | 25 | } |
26 | 26 | |
27 | - $vendorDirectory = $this->composer->getConfig()->get('vendor-dir'); |
|
28 | - if (is_string($vendorDirectory)) { |
|
29 | - $vendorDirectory = str_replace($absolutePath, '', (string) $vendorDirectory); |
|
27 | + $vendorDirectory = $this->composer->getConfig()->get( 'vendor-dir' ); |
|
28 | + if ( is_string( $vendorDirectory ) ) { |
|
29 | + $vendorDirectory = str_replace( $absolutePath, '', (string)$vendorDirectory ); |
|
30 | 30 | $this->vendorDirectory = $vendorDirectory; |
31 | 31 | } else { |
32 | 32 | $this->vendorDirectory = 'vendor' . DIRECTORY_SEPARATOR; |
@@ -40,7 +40,7 @@ discard block |
||
40 | 40 | public function getStraussConfig(): StraussConfig |
41 | 41 | { |
42 | 42 | |
43 | - return new StraussConfig($this->composer); |
|
43 | + return new StraussConfig( $this->composer ); |
|
44 | 44 | } |
45 | 45 | |
46 | 46 | |
@@ -51,6 +51,6 @@ discard block |
||
51 | 51 | |
52 | 52 | public function getVendorDirectory(): string |
53 | 53 | { |
54 | - return rtrim($this->vendorDirectory, DIRECTORY_SEPARATOR) . DIRECTORY_SEPARATOR; |
|
54 | + return rtrim( $this->vendorDirectory, DIRECTORY_SEPARATOR ) . DIRECTORY_SEPARATOR; |
|
55 | 55 | } |
56 | 56 | } |
@@ -7,14 +7,12 @@ |
||
7 | 7 | |
8 | 8 | use BrianHenryIE\Strauss\Composer\Extra\StraussConfig; |
9 | 9 | |
10 | -class ProjectComposerPackage extends ComposerPackage |
|
11 | -{ |
|
10 | +class ProjectComposerPackage extends ComposerPackage { |
|
12 | 11 | protected string $author; |
13 | 12 | |
14 | 13 | protected string $vendorDirectory; |
15 | 14 | |
16 | - public function __construct(string $absolutePath, array $overrideAutoload = null) |
|
17 | - { |
|
15 | + public function __construct(string $absolutePath, array $overrideAutoload = null) { |
|
18 | 16 | parent::__construct($absolutePath, $overrideAutoload); |
19 | 17 | |
20 | 18 | $authors = $this->composer->getPackage()->getAuthors(); |
@@ -15,152 +15,152 @@ discard block |
||
15 | 15 | class Autoload |
16 | 16 | { |
17 | 17 | |
18 | - /** @var Filesystem */ |
|
19 | - protected $filesystem; |
|
20 | - |
|
21 | - protected string $workingDir; |
|
22 | - |
|
23 | - protected StraussConfig $config; |
|
24 | - |
|
25 | - /** |
|
26 | - * The files autolaoders of packages that have been copied by Strauss. |
|
27 | - * Keyed by package path. |
|
28 | - * |
|
29 | - * @var array |
|
30 | - */ |
|
31 | - protected array $discoveredFilesAutoloaders; |
|
32 | - |
|
33 | - /** |
|
34 | - * Autoload constructor. |
|
35 | - * @param StraussConfig $config |
|
36 | - * @param string $workingDir |
|
37 | - * @param array<string, array<string>> $files |
|
38 | - */ |
|
39 | - public function __construct(StraussConfig $config, string $workingDir, array $discoveredFilesAutoloaders) |
|
40 | - { |
|
41 | - $this->config = $config; |
|
42 | - $this->workingDir = $workingDir; |
|
43 | - $this->discoveredFilesAutoloaders = $discoveredFilesAutoloaders; |
|
44 | - $this->filesystem = new Filesystem(new Local($workingDir)); |
|
45 | - } |
|
46 | - |
|
47 | - public function generate() |
|
48 | - { |
|
49 | - |
|
50 | - if (! $this->config->isClassmapOutput()) { |
|
51 | - return; |
|
52 | - } |
|
53 | - |
|
54 | - // TODO Don't do this if vendor is the target dir (i.e. in-situ updating). |
|
55 | - |
|
56 | - $this->generateClassmap(); |
|
57 | - |
|
58 | - $this->generateFilesAutoloader(); |
|
59 | - |
|
60 | - $this->generateAutoloadPhp(); |
|
61 | - } |
|
18 | + /** @var Filesystem */ |
|
19 | + protected $filesystem; |
|
20 | + |
|
21 | + protected string $workingDir; |
|
22 | + |
|
23 | + protected StraussConfig $config; |
|
24 | + |
|
25 | + /** |
|
26 | + * The files autolaoders of packages that have been copied by Strauss. |
|
27 | + * Keyed by package path. |
|
28 | + * |
|
29 | + * @var array |
|
30 | + */ |
|
31 | + protected array $discoveredFilesAutoloaders; |
|
32 | + |
|
33 | + /** |
|
34 | + * Autoload constructor. |
|
35 | + * @param StraussConfig $config |
|
36 | + * @param string $workingDir |
|
37 | + * @param array<string, array<string>> $files |
|
38 | + */ |
|
39 | + public function __construct(StraussConfig $config, string $workingDir, array $discoveredFilesAutoloaders) |
|
40 | + { |
|
41 | + $this->config = $config; |
|
42 | + $this->workingDir = $workingDir; |
|
43 | + $this->discoveredFilesAutoloaders = $discoveredFilesAutoloaders; |
|
44 | + $this->filesystem = new Filesystem(new Local($workingDir)); |
|
45 | + } |
|
62 | 46 | |
63 | - /** |
|
64 | - * Uses Composer's `ClassMapGenerator::createMap()` to scan the directories for classes and generate the map. |
|
65 | - * |
|
66 | - * createMap() returns the full local path, so we then replace the root of the path with a variable. |
|
67 | - * |
|
68 | - * @see ClassMapGenerator::dump() |
|
69 | - * |
|
70 | - */ |
|
71 | - protected function generateClassmap(): string |
|
72 | - { |
|
73 | - |
|
74 | - // Hyphen used to match WordPress Coding Standards. |
|
75 | - $output_filename = "autoload-classmap.php"; |
|
76 | - |
|
77 | - $targetDirectory = getcwd() |
|
78 | - . DIRECTORY_SEPARATOR |
|
79 | - . ltrim($this->config->getTargetDirectory(), DIRECTORY_SEPARATOR); |
|
80 | - |
|
81 | - $dirs = array( |
|
82 | - $targetDirectory |
|
83 | - ); |
|
84 | - |
|
85 | - $dirname = ''; |
|
86 | - |
|
87 | - foreach ($dirs as $dir) { |
|
88 | - if (!is_dir($dir)) { |
|
89 | - continue; |
|
90 | - } |
|
47 | + public function generate() |
|
48 | + { |
|
49 | + |
|
50 | + if (! $this->config->isClassmapOutput()) { |
|
51 | + return; |
|
52 | + } |
|
53 | + |
|
54 | + // TODO Don't do this if vendor is the target dir (i.e. in-situ updating). |
|
55 | + |
|
56 | + $this->generateClassmap(); |
|
57 | + |
|
58 | + $this->generateFilesAutoloader(); |
|
59 | + |
|
60 | + $this->generateAutoloadPhp(); |
|
61 | + } |
|
62 | + |
|
63 | + /** |
|
64 | + * Uses Composer's `ClassMapGenerator::createMap()` to scan the directories for classes and generate the map. |
|
65 | + * |
|
66 | + * createMap() returns the full local path, so we then replace the root of the path with a variable. |
|
67 | + * |
|
68 | + * @see ClassMapGenerator::dump() |
|
69 | + * |
|
70 | + */ |
|
71 | + protected function generateClassmap(): string |
|
72 | + { |
|
73 | + |
|
74 | + // Hyphen used to match WordPress Coding Standards. |
|
75 | + $output_filename = "autoload-classmap.php"; |
|
76 | + |
|
77 | + $targetDirectory = getcwd() |
|
78 | + . DIRECTORY_SEPARATOR |
|
79 | + . ltrim($this->config->getTargetDirectory(), DIRECTORY_SEPARATOR); |
|
80 | + |
|
81 | + $dirs = array( |
|
82 | + $targetDirectory |
|
83 | + ); |
|
84 | + |
|
85 | + $dirname = ''; |
|
86 | + |
|
87 | + foreach ($dirs as $dir) { |
|
88 | + if (!is_dir($dir)) { |
|
89 | + continue; |
|
90 | + } |
|
91 | + |
|
92 | + $dirMap = ClassMapGenerator::createMap($dir); |
|
93 | + |
|
94 | + $dirname = preg_replace('/[^a-z]/i', '', str_replace(getcwd(), '', $dir)); |
|
95 | + |
|
96 | + array_walk( |
|
97 | + $dirMap, |
|
98 | + function (&$filepath, $_class) use ($dir, $dirname) { |
|
99 | + $filepath = "\${$dirname} . '" |
|
100 | + . DIRECTORY_SEPARATOR |
|
101 | + . ltrim(str_replace($dir, '', $filepath), DIRECTORY_SEPARATOR) . "'"; |
|
102 | + } |
|
103 | + ); |
|
104 | + |
|
105 | + ob_start(); |
|
106 | + |
|
107 | + echo "<?php\n\n"; |
|
108 | + echo "// {$output_filename} @generated by Strauss\n\n"; |
|
109 | + echo "\${$dirname} = dirname(__FILE__);\n\n"; |
|
110 | + echo "return array(\n"; |
|
111 | + foreach ($dirMap as $class => $file) { |
|
112 | + echo " '{$class}' => {$file},\n"; |
|
113 | + } |
|
114 | + echo ");"; |
|
115 | + |
|
116 | + file_put_contents($dir . $output_filename, ob_get_clean()); |
|
117 | + } |
|
118 | + |
|
119 | + return $dirname; |
|
120 | + } |
|
121 | + |
|
122 | + protected function generateFilesAutoloader() |
|
123 | + { |
|
124 | + |
|
125 | + // Hyphen used to match WordPress Coding Standards. |
|
126 | + $outputFilename = "autoload-files.php"; |
|
127 | + |
|
128 | + $filesAutoloaders = $this->discoveredFilesAutoloaders; |
|
129 | + |
|
130 | + if (empty($filesAutoloaders)) { |
|
131 | + return; |
|
132 | + } |
|
133 | + |
|
134 | + $targetDirectory = getcwd() |
|
135 | + . DIRECTORY_SEPARATOR |
|
136 | + . ltrim($this->config->getTargetDirectory(), DIRECTORY_SEPARATOR); |
|
91 | 137 | |
92 | - $dirMap = ClassMapGenerator::createMap($dir); |
|
138 | + $dirname = preg_replace('/[^a-z]/i', '', str_replace(getcwd(), '', $targetDirectory)); |
|
93 | 139 | |
94 | - $dirname = preg_replace('/[^a-z]/i', '', str_replace(getcwd(), '', $dir)); |
|
140 | + ob_start(); |
|
95 | 141 | |
96 | - array_walk( |
|
97 | - $dirMap, |
|
98 | - function (&$filepath, $_class) use ($dir, $dirname) { |
|
99 | - $filepath = "\${$dirname} . '" |
|
100 | - . DIRECTORY_SEPARATOR |
|
101 | - . ltrim(str_replace($dir, '', $filepath), DIRECTORY_SEPARATOR) . "'"; |
|
102 | - } |
|
103 | - ); |
|
104 | - |
|
105 | - ob_start(); |
|
142 | + echo "<?php\n\n"; |
|
143 | + echo "// {$outputFilename} @generated by Strauss\n"; |
|
144 | + echo "// @see https://github.com/BrianHenryIE/strauss/\n\n"; |
|
106 | 145 | |
107 | - echo "<?php\n\n"; |
|
108 | - echo "// {$output_filename} @generated by Strauss\n\n"; |
|
109 | - echo "\${$dirname} = dirname(__FILE__);\n\n"; |
|
110 | - echo "return array(\n"; |
|
111 | - foreach ($dirMap as $class => $file) { |
|
112 | - echo " '{$class}' => {$file},\n"; |
|
113 | - } |
|
114 | - echo ");"; |
|
146 | + foreach ($filesAutoloaders as $packagePath => $files) { |
|
147 | + foreach ($files as $file) { |
|
148 | + $filepath = DIRECTORY_SEPARATOR . $packagePath . DIRECTORY_SEPARATOR . $file; |
|
149 | + $filePathinfo = pathinfo(__DIR__ . $filepath); |
|
150 | + if (!isset($filePathinfo['extension']) || 'php' !== $filePathinfo['extension']) { |
|
151 | + continue; |
|
152 | + } |
|
153 | + echo "require_once __DIR__ . '{$filepath}';\n"; |
|
154 | + } |
|
155 | + } |
|
115 | 156 | |
116 | - file_put_contents($dir . $output_filename, ob_get_clean()); |
|
117 | - } |
|
157 | + file_put_contents($targetDirectory . $outputFilename, ob_get_clean()); |
|
158 | + } |
|
118 | 159 | |
119 | - return $dirname; |
|
120 | - } |
|
160 | + protected function generateAutoloadPhp() |
|
161 | + { |
|
121 | 162 | |
122 | - protected function generateFilesAutoloader() |
|
123 | - { |
|
124 | - |
|
125 | - // Hyphen used to match WordPress Coding Standards. |
|
126 | - $outputFilename = "autoload-files.php"; |
|
127 | - |
|
128 | - $filesAutoloaders = $this->discoveredFilesAutoloaders; |
|
129 | - |
|
130 | - if (empty($filesAutoloaders)) { |
|
131 | - return; |
|
132 | - } |
|
133 | - |
|
134 | - $targetDirectory = getcwd() |
|
135 | - . DIRECTORY_SEPARATOR |
|
136 | - . ltrim($this->config->getTargetDirectory(), DIRECTORY_SEPARATOR); |
|
137 | - |
|
138 | - $dirname = preg_replace('/[^a-z]/i', '', str_replace(getcwd(), '', $targetDirectory)); |
|
139 | - |
|
140 | - ob_start(); |
|
141 | - |
|
142 | - echo "<?php\n\n"; |
|
143 | - echo "// {$outputFilename} @generated by Strauss\n"; |
|
144 | - echo "// @see https://github.com/BrianHenryIE/strauss/\n\n"; |
|
145 | - |
|
146 | - foreach ($filesAutoloaders as $packagePath => $files) { |
|
147 | - foreach ($files as $file) { |
|
148 | - $filepath = DIRECTORY_SEPARATOR . $packagePath . DIRECTORY_SEPARATOR . $file; |
|
149 | - $filePathinfo = pathinfo(__DIR__ . $filepath); |
|
150 | - if (!isset($filePathinfo['extension']) || 'php' !== $filePathinfo['extension']) { |
|
151 | - continue; |
|
152 | - } |
|
153 | - echo "require_once __DIR__ . '{$filepath}';\n"; |
|
154 | - } |
|
155 | - } |
|
156 | - |
|
157 | - file_put_contents($targetDirectory . $outputFilename, ob_get_clean()); |
|
158 | - } |
|
159 | - |
|
160 | - protected function generateAutoloadPhp() |
|
161 | - { |
|
162 | - |
|
163 | - $autoloadPhp = <<<'EOD' |
|
163 | + $autoloadPhp = <<<'EOD' |
|
164 | 164 | <?php |
165 | 165 | // autoload.php @generated by Strauss |
166 | 166 | |
@@ -183,9 +183,9 @@ discard block |
||
183 | 183 | } |
184 | 184 | EOD; |
185 | 185 | |
186 | - $relativeFilepath = $this->config->getTargetDirectory() . 'autoload.php'; |
|
187 | - $absoluteFilepath = $this->workingDir . $relativeFilepath; |
|
186 | + $relativeFilepath = $this->config->getTargetDirectory() . 'autoload.php'; |
|
187 | + $absoluteFilepath = $this->workingDir . $relativeFilepath; |
|
188 | 188 | |
189 | - file_put_contents($absoluteFilepath, $autoloadPhp); |
|
190 | - } |
|
189 | + file_put_contents($absoluteFilepath, $autoloadPhp); |
|
190 | + } |
|
191 | 191 | } |
@@ -36,18 +36,18 @@ discard block |
||
36 | 36 | * @param string $workingDir |
37 | 37 | * @param array<string, array<string>> $files |
38 | 38 | */ |
39 | - public function __construct(StraussConfig $config, string $workingDir, array $discoveredFilesAutoloaders) |
|
39 | + public function __construct( StraussConfig $config, string $workingDir, array $discoveredFilesAutoloaders ) |
|
40 | 40 | { |
41 | 41 | $this->config = $config; |
42 | 42 | $this->workingDir = $workingDir; |
43 | 43 | $this->discoveredFilesAutoloaders = $discoveredFilesAutoloaders; |
44 | - $this->filesystem = new Filesystem(new Local($workingDir)); |
|
44 | + $this->filesystem = new Filesystem( new Local( $workingDir ) ); |
|
45 | 45 | } |
46 | 46 | |
47 | 47 | public function generate() |
48 | 48 | { |
49 | 49 | |
50 | - if (! $this->config->isClassmapOutput()) { |
|
50 | + if ( ! $this->config->isClassmapOutput() ) { |
|
51 | 51 | return; |
52 | 52 | } |
53 | 53 | |
@@ -76,7 +76,7 @@ discard block |
||
76 | 76 | |
77 | 77 | $targetDirectory = getcwd() |
78 | 78 | . DIRECTORY_SEPARATOR |
79 | - . ltrim($this->config->getTargetDirectory(), DIRECTORY_SEPARATOR); |
|
79 | + . ltrim( $this->config->getTargetDirectory(), DIRECTORY_SEPARATOR ); |
|
80 | 80 | |
81 | 81 | $dirs = array( |
82 | 82 | $targetDirectory |
@@ -84,21 +84,21 @@ discard block |
||
84 | 84 | |
85 | 85 | $dirname = ''; |
86 | 86 | |
87 | - foreach ($dirs as $dir) { |
|
88 | - if (!is_dir($dir)) { |
|
87 | + foreach ( $dirs as $dir ) { |
|
88 | + if ( ! is_dir( $dir ) ) { |
|
89 | 89 | continue; |
90 | 90 | } |
91 | 91 | |
92 | - $dirMap = ClassMapGenerator::createMap($dir); |
|
92 | + $dirMap = ClassMapGenerator::createMap( $dir ); |
|
93 | 93 | |
94 | - $dirname = preg_replace('/[^a-z]/i', '', str_replace(getcwd(), '', $dir)); |
|
94 | + $dirname = preg_replace( '/[^a-z]/i', '', str_replace( getcwd(), '', $dir ) ); |
|
95 | 95 | |
96 | 96 | array_walk( |
97 | 97 | $dirMap, |
98 | - function (&$filepath, $_class) use ($dir, $dirname) { |
|
98 | + function( &$filepath, $_class ) use ( $dir, $dirname ) { |
|
99 | 99 | $filepath = "\${$dirname} . '" |
100 | 100 | . DIRECTORY_SEPARATOR |
101 | - . ltrim(str_replace($dir, '', $filepath), DIRECTORY_SEPARATOR) . "'"; |
|
101 | + . ltrim( str_replace( $dir, '', $filepath ), DIRECTORY_SEPARATOR ) . "'"; |
|
102 | 102 | } |
103 | 103 | ); |
104 | 104 | |
@@ -108,12 +108,12 @@ discard block |
||
108 | 108 | echo "// {$output_filename} @generated by Strauss\n\n"; |
109 | 109 | echo "\${$dirname} = dirname(__FILE__);\n\n"; |
110 | 110 | echo "return array(\n"; |
111 | - foreach ($dirMap as $class => $file) { |
|
111 | + foreach ( $dirMap as $class => $file ) { |
|
112 | 112 | echo " '{$class}' => {$file},\n"; |
113 | 113 | } |
114 | 114 | echo ");"; |
115 | 115 | |
116 | - file_put_contents($dir . $output_filename, ob_get_clean()); |
|
116 | + file_put_contents( $dir . $output_filename, ob_get_clean() ); |
|
117 | 117 | } |
118 | 118 | |
119 | 119 | return $dirname; |
@@ -127,15 +127,15 @@ discard block |
||
127 | 127 | |
128 | 128 | $filesAutoloaders = $this->discoveredFilesAutoloaders; |
129 | 129 | |
130 | - if (empty($filesAutoloaders)) { |
|
130 | + if ( empty( $filesAutoloaders ) ) { |
|
131 | 131 | return; |
132 | 132 | } |
133 | 133 | |
134 | 134 | $targetDirectory = getcwd() |
135 | 135 | . DIRECTORY_SEPARATOR |
136 | - . ltrim($this->config->getTargetDirectory(), DIRECTORY_SEPARATOR); |
|
136 | + . ltrim( $this->config->getTargetDirectory(), DIRECTORY_SEPARATOR ); |
|
137 | 137 | |
138 | - $dirname = preg_replace('/[^a-z]/i', '', str_replace(getcwd(), '', $targetDirectory)); |
|
138 | + $dirname = preg_replace( '/[^a-z]/i', '', str_replace( getcwd(), '', $targetDirectory ) ); |
|
139 | 139 | |
140 | 140 | ob_start(); |
141 | 141 | |
@@ -143,18 +143,18 @@ discard block |
||
143 | 143 | echo "// {$outputFilename} @generated by Strauss\n"; |
144 | 144 | echo "// @see https://github.com/BrianHenryIE/strauss/\n\n"; |
145 | 145 | |
146 | - foreach ($filesAutoloaders as $packagePath => $files) { |
|
147 | - foreach ($files as $file) { |
|
146 | + foreach ( $filesAutoloaders as $packagePath => $files ) { |
|
147 | + foreach ( $files as $file ) { |
|
148 | 148 | $filepath = DIRECTORY_SEPARATOR . $packagePath . DIRECTORY_SEPARATOR . $file; |
149 | - $filePathinfo = pathinfo(__DIR__ . $filepath); |
|
150 | - if (!isset($filePathinfo['extension']) || 'php' !== $filePathinfo['extension']) { |
|
149 | + $filePathinfo = pathinfo( __DIR__ . $filepath ); |
|
150 | + if ( ! isset( $filePathinfo[ 'extension' ] ) || 'php' !== $filePathinfo[ 'extension' ] ) { |
|
151 | 151 | continue; |
152 | 152 | } |
153 | 153 | echo "require_once __DIR__ . '{$filepath}';\n"; |
154 | 154 | } |
155 | 155 | } |
156 | 156 | |
157 | - file_put_contents($targetDirectory . $outputFilename, ob_get_clean()); |
|
157 | + file_put_contents( $targetDirectory . $outputFilename, ob_get_clean() ); |
|
158 | 158 | } |
159 | 159 | |
160 | 160 | protected function generateAutoloadPhp() |
@@ -186,6 +186,6 @@ discard block |
||
186 | 186 | $relativeFilepath = $this->config->getTargetDirectory() . 'autoload.php'; |
187 | 187 | $absoluteFilepath = $this->workingDir . $relativeFilepath; |
188 | 188 | |
189 | - file_put_contents($absoluteFilepath, $autoloadPhp); |
|
189 | + file_put_contents( $absoluteFilepath, $autoloadPhp ); |
|
190 | 190 | } |
191 | 191 | } |
@@ -12,8 +12,7 @@ discard block |
||
12 | 12 | use League\Flysystem\Adapter\Local; |
13 | 13 | use League\Flysystem\Filesystem; |
14 | 14 | |
15 | -class Autoload |
|
16 | -{ |
|
15 | +class Autoload { |
|
17 | 16 | |
18 | 17 | /** @var Filesystem */ |
19 | 18 | protected $filesystem; |
@@ -36,16 +35,14 @@ discard block |
||
36 | 35 | * @param string $workingDir |
37 | 36 | * @param array<string, array<string>> $files |
38 | 37 | */ |
39 | - public function __construct(StraussConfig $config, string $workingDir, array $discoveredFilesAutoloaders) |
|
40 | - { |
|
38 | + public function __construct(StraussConfig $config, string $workingDir, array $discoveredFilesAutoloaders) { |
|
41 | 39 | $this->config = $config; |
42 | 40 | $this->workingDir = $workingDir; |
43 | 41 | $this->discoveredFilesAutoloaders = $discoveredFilesAutoloaders; |
44 | 42 | $this->filesystem = new Filesystem(new Local($workingDir)); |
45 | 43 | } |
46 | 44 | |
47 | - public function generate() |
|
48 | - { |
|
45 | + public function generate() { |
|
49 | 46 | |
50 | 47 | if (! $this->config->isClassmapOutput()) { |
51 | 48 | return; |
@@ -119,8 +116,7 @@ discard block |
||
119 | 116 | return $dirname; |
120 | 117 | } |
121 | 118 | |
122 | - protected function generateFilesAutoloader() |
|
123 | - { |
|
119 | + protected function generateFilesAutoloader() { |
|
124 | 120 | |
125 | 121 | // Hyphen used to match WordPress Coding Standards. |
126 | 122 | $outputFilename = "autoload-files.php"; |
@@ -157,8 +153,7 @@ discard block |
||
157 | 153 | file_put_contents($targetDirectory . $outputFilename, ob_get_clean()); |
158 | 154 | } |
159 | 155 | |
160 | - protected function generateAutoloadPhp() |
|
161 | - { |
|
156 | + protected function generateAutoloadPhp() { |
|
162 | 157 | |
163 | 158 | $autoloadPhp = <<<'EOD' |
164 | 159 | <?php |
@@ -181,7 +181,7 @@ |
||
181 | 181 | if ( file_exists( __DIR__ . '/autoload-files.php' ) ) { |
182 | 182 | require_once __DIR__ . '/autoload-files.php'; |
183 | 183 | } |
184 | -EOD; |
|
184 | +eod; |
|
185 | 185 | |
186 | 186 | $relativeFilepath = $this->config->getTargetDirectory() . 'autoload.php'; |
187 | 187 | $absoluteFilepath = $this->workingDir . $relativeFilepath; |
@@ -14,73 +14,73 @@ |
||
14 | 14 | class Cleanup |
15 | 15 | { |
16 | 16 | |
17 | - /** @var Filesystem */ |
|
18 | - protected Filesystem $filesystem; |
|
17 | + /** @var Filesystem */ |
|
18 | + protected Filesystem $filesystem; |
|
19 | 19 | |
20 | - protected bool $isDeleteVendorFiles; |
|
20 | + protected bool $isDeleteVendorFiles; |
|
21 | 21 | |
22 | - protected string $vendorDirectory = 'vendor'. DIRECTORY_SEPARATOR; |
|
22 | + protected string $vendorDirectory = 'vendor'. DIRECTORY_SEPARATOR; |
|
23 | 23 | |
24 | - public function __construct(StraussConfig $config, string $workingDir) |
|
25 | - { |
|
24 | + public function __construct(StraussConfig $config, string $workingDir) |
|
25 | + { |
|
26 | 26 | |
27 | - $this->isDeleteVendorFiles = $config->isDeleteVendorFiles(); |
|
27 | + $this->isDeleteVendorFiles = $config->isDeleteVendorFiles(); |
|
28 | 28 | |
29 | - $this->filesystem = new Filesystem(new Local($workingDir)); |
|
30 | - } |
|
31 | - |
|
32 | - /** |
|
33 | - * Maybe delete the source files that were copied (depending on config), |
|
34 | - * then delete empty directories. |
|
35 | - * |
|
36 | - * @param array $sourceFiles |
|
37 | - */ |
|
38 | - public function cleanup(array $sourceFiles) |
|
39 | - { |
|
40 | - |
|
41 | - // TODO Don't do this if vendor is the target dir (i.e. in-situ updating). |
|
42 | - |
|
43 | - if ($this->isDeleteVendorFiles) { |
|
44 | - foreach ($sourceFiles as $sourceFile) { |
|
45 | - $relativeFilepath = $this->vendorDirectory . $sourceFile; |
|
46 | - |
|
47 | - $this->filesystem->delete($relativeFilepath); |
|
48 | - } |
|
49 | - |
|
50 | - // Get the root folders of the moved files. |
|
51 | - $rootSourceDirectories = []; |
|
52 | - foreach ($sourceFiles as $sourceFile) { |
|
53 | - $arr = explode("/", $sourceFile, 2); |
|
54 | - $dir = $arr[0]; |
|
55 | - $rootSourceDirectories[ $dir ] = $dir; |
|
56 | - } |
|
57 | - $rootSourceDirectories = array_keys($rootSourceDirectories); |
|
58 | - |
|
59 | - |
|
60 | - $finder = new Finder(); |
|
61 | - |
|
62 | - foreach ($rootSourceDirectories as $rootSourceDirectory) { |
|
63 | - if (!is_dir($rootSourceDirectory) || is_link($rootSourceDirectory)) { |
|
64 | - continue; |
|
65 | - } |
|
66 | - |
|
67 | - $finder->directories()->path($rootSourceDirectory); |
|
68 | - |
|
69 | - foreach ($finder as $directory) { |
|
70 | - $metadata = $this->filesystem->getMetadata($directory); |
|
71 | - |
|
72 | - if ($this->dirIsEmpty($directory)) { |
|
73 | - $this->filesystem->deleteDir($directory); |
|
74 | - } |
|
75 | - } |
|
76 | - } |
|
77 | - } |
|
78 | - } |
|
79 | - |
|
80 | - // TODO: Use Symphony or Flysystem functions. |
|
81 | - protected function dirIsEmpty(string $dir): bool |
|
82 | - { |
|
83 | - $di = new RecursiveDirectoryIterator($dir, \FilesystemIterator::SKIP_DOTS); |
|
84 | - return iterator_count($di) === 0; |
|
85 | - } |
|
29 | + $this->filesystem = new Filesystem(new Local($workingDir)); |
|
30 | + } |
|
31 | + |
|
32 | + /** |
|
33 | + * Maybe delete the source files that were copied (depending on config), |
|
34 | + * then delete empty directories. |
|
35 | + * |
|
36 | + * @param array $sourceFiles |
|
37 | + */ |
|
38 | + public function cleanup(array $sourceFiles) |
|
39 | + { |
|
40 | + |
|
41 | + // TODO Don't do this if vendor is the target dir (i.e. in-situ updating). |
|
42 | + |
|
43 | + if ($this->isDeleteVendorFiles) { |
|
44 | + foreach ($sourceFiles as $sourceFile) { |
|
45 | + $relativeFilepath = $this->vendorDirectory . $sourceFile; |
|
46 | + |
|
47 | + $this->filesystem->delete($relativeFilepath); |
|
48 | + } |
|
49 | + |
|
50 | + // Get the root folders of the moved files. |
|
51 | + $rootSourceDirectories = []; |
|
52 | + foreach ($sourceFiles as $sourceFile) { |
|
53 | + $arr = explode("/", $sourceFile, 2); |
|
54 | + $dir = $arr[0]; |
|
55 | + $rootSourceDirectories[ $dir ] = $dir; |
|
56 | + } |
|
57 | + $rootSourceDirectories = array_keys($rootSourceDirectories); |
|
58 | + |
|
59 | + |
|
60 | + $finder = new Finder(); |
|
61 | + |
|
62 | + foreach ($rootSourceDirectories as $rootSourceDirectory) { |
|
63 | + if (!is_dir($rootSourceDirectory) || is_link($rootSourceDirectory)) { |
|
64 | + continue; |
|
65 | + } |
|
66 | + |
|
67 | + $finder->directories()->path($rootSourceDirectory); |
|
68 | + |
|
69 | + foreach ($finder as $directory) { |
|
70 | + $metadata = $this->filesystem->getMetadata($directory); |
|
71 | + |
|
72 | + if ($this->dirIsEmpty($directory)) { |
|
73 | + $this->filesystem->deleteDir($directory); |
|
74 | + } |
|
75 | + } |
|
76 | + } |
|
77 | + } |
|
78 | + } |
|
79 | + |
|
80 | + // TODO: Use Symphony or Flysystem functions. |
|
81 | + protected function dirIsEmpty(string $dir): bool |
|
82 | + { |
|
83 | + $di = new RecursiveDirectoryIterator($dir, \FilesystemIterator::SKIP_DOTS); |
|
84 | + return iterator_count($di) === 0; |
|
85 | + } |
|
86 | 86 | } |
@@ -19,14 +19,14 @@ discard block |
||
19 | 19 | |
20 | 20 | protected bool $isDeleteVendorFiles; |
21 | 21 | |
22 | - protected string $vendorDirectory = 'vendor'. DIRECTORY_SEPARATOR; |
|
22 | + protected string $vendorDirectory = 'vendor' . DIRECTORY_SEPARATOR; |
|
23 | 23 | |
24 | - public function __construct(StraussConfig $config, string $workingDir) |
|
24 | + public function __construct( StraussConfig $config, string $workingDir ) |
|
25 | 25 | { |
26 | 26 | |
27 | 27 | $this->isDeleteVendorFiles = $config->isDeleteVendorFiles(); |
28 | 28 | |
29 | - $this->filesystem = new Filesystem(new Local($workingDir)); |
|
29 | + $this->filesystem = new Filesystem( new Local( $workingDir ) ); |
|
30 | 30 | } |
31 | 31 | |
32 | 32 | /** |
@@ -35,42 +35,42 @@ discard block |
||
35 | 35 | * |
36 | 36 | * @param array $sourceFiles |
37 | 37 | */ |
38 | - public function cleanup(array $sourceFiles) |
|
38 | + public function cleanup( array $sourceFiles ) |
|
39 | 39 | { |
40 | 40 | |
41 | 41 | // TODO Don't do this if vendor is the target dir (i.e. in-situ updating). |
42 | 42 | |
43 | - if ($this->isDeleteVendorFiles) { |
|
44 | - foreach ($sourceFiles as $sourceFile) { |
|
43 | + if ( $this->isDeleteVendorFiles ) { |
|
44 | + foreach ( $sourceFiles as $sourceFile ) { |
|
45 | 45 | $relativeFilepath = $this->vendorDirectory . $sourceFile; |
46 | 46 | |
47 | - $this->filesystem->delete($relativeFilepath); |
|
47 | + $this->filesystem->delete( $relativeFilepath ); |
|
48 | 48 | } |
49 | 49 | |
50 | 50 | // Get the root folders of the moved files. |
51 | - $rootSourceDirectories = []; |
|
52 | - foreach ($sourceFiles as $sourceFile) { |
|
53 | - $arr = explode("/", $sourceFile, 2); |
|
54 | - $dir = $arr[0]; |
|
51 | + $rootSourceDirectories = [ ]; |
|
52 | + foreach ( $sourceFiles as $sourceFile ) { |
|
53 | + $arr = explode( "/", $sourceFile, 2 ); |
|
54 | + $dir = $arr[ 0 ]; |
|
55 | 55 | $rootSourceDirectories[ $dir ] = $dir; |
56 | 56 | } |
57 | - $rootSourceDirectories = array_keys($rootSourceDirectories); |
|
57 | + $rootSourceDirectories = array_keys( $rootSourceDirectories ); |
|
58 | 58 | |
59 | 59 | |
60 | 60 | $finder = new Finder(); |
61 | 61 | |
62 | - foreach ($rootSourceDirectories as $rootSourceDirectory) { |
|
63 | - if (!is_dir($rootSourceDirectory) || is_link($rootSourceDirectory)) { |
|
62 | + foreach ( $rootSourceDirectories as $rootSourceDirectory ) { |
|
63 | + if ( ! is_dir( $rootSourceDirectory ) || is_link( $rootSourceDirectory ) ) { |
|
64 | 64 | continue; |
65 | 65 | } |
66 | 66 | |
67 | - $finder->directories()->path($rootSourceDirectory); |
|
67 | + $finder->directories()->path( $rootSourceDirectory ); |
|
68 | 68 | |
69 | - foreach ($finder as $directory) { |
|
70 | - $metadata = $this->filesystem->getMetadata($directory); |
|
69 | + foreach ( $finder as $directory ) { |
|
70 | + $metadata = $this->filesystem->getMetadata( $directory ); |
|
71 | 71 | |
72 | - if ($this->dirIsEmpty($directory)) { |
|
73 | - $this->filesystem->deleteDir($directory); |
|
72 | + if ( $this->dirIsEmpty( $directory ) ) { |
|
73 | + $this->filesystem->deleteDir( $directory ); |
|
74 | 74 | } |
75 | 75 | } |
76 | 76 | } |
@@ -78,9 +78,9 @@ discard block |
||
78 | 78 | } |
79 | 79 | |
80 | 80 | // TODO: Use Symphony or Flysystem functions. |
81 | - protected function dirIsEmpty(string $dir): bool |
|
81 | + protected function dirIsEmpty( string $dir ): bool |
|
82 | 82 | { |
83 | - $di = new RecursiveDirectoryIterator($dir, \FilesystemIterator::SKIP_DOTS); |
|
84 | - return iterator_count($di) === 0; |
|
83 | + $di = new RecursiveDirectoryIterator( $dir, \FilesystemIterator::SKIP_DOTS ); |
|
84 | + return iterator_count( $di ) === 0; |
|
85 | 85 | } |
86 | 86 | } |
@@ -11,8 +11,7 @@ discard block |
||
11 | 11 | use RecursiveDirectoryIterator; |
12 | 12 | use Symfony\Component\Finder\Finder; |
13 | 13 | |
14 | -class Cleanup |
|
15 | -{ |
|
14 | +class Cleanup { |
|
16 | 15 | |
17 | 16 | /** @var Filesystem */ |
18 | 17 | protected Filesystem $filesystem; |
@@ -21,8 +20,7 @@ discard block |
||
21 | 20 | |
22 | 21 | protected string $vendorDirectory = 'vendor'. DIRECTORY_SEPARATOR; |
23 | 22 | |
24 | - public function __construct(StraussConfig $config, string $workingDir) |
|
25 | - { |
|
23 | + public function __construct(StraussConfig $config, string $workingDir) { |
|
26 | 24 | |
27 | 25 | $this->isDeleteVendorFiles = $config->isDeleteVendorFiles(); |
28 | 26 | |
@@ -35,8 +33,7 @@ discard block |
||
35 | 33 | * |
36 | 34 | * @param array $sourceFiles |
37 | 35 | */ |
38 | - public function cleanup(array $sourceFiles) |
|
39 | - { |
|
36 | + public function cleanup(array $sourceFiles) { |
|
40 | 37 | |
41 | 38 | // TODO Don't do this if vendor is the target dir (i.e. in-situ updating). |
42 | 39 |
@@ -16,180 +16,180 @@ |
||
16 | 16 | class FileEnumerator |
17 | 17 | { |
18 | 18 | |
19 | - /** |
|
20 | - * The only path variable with a leading slash. |
|
21 | - * All directories in project end with a slash. |
|
22 | - * |
|
23 | - * @var string |
|
24 | - */ |
|
25 | - protected string $workingDir; |
|
26 | - |
|
27 | - /** @var ComposerPackage[] */ |
|
28 | - protected array $dependencies; |
|
29 | - |
|
30 | - protected array $excludePackageNames = array(); |
|
31 | - protected array $excludeNamespaces = array(); |
|
32 | - protected array $excludeFilePatterns = array(); |
|
33 | - |
|
34 | - /** @var Filesystem */ |
|
35 | - protected Filesystem $filesystem; |
|
36 | - |
|
37 | - /** |
|
38 | - * Complete list of files specified in packages autoloaders. |
|
39 | - * |
|
40 | - * Relative filepaths as key, with their dependency as the value. |
|
41 | - * |
|
42 | - * Relative from vendor/ |
|
43 | - * |
|
44 | - * @var array<string, ComposerPackage> |
|
45 | - */ |
|
46 | - protected array $filesWithDependencies = []; |
|
47 | - |
|
48 | - /** |
|
49 | - * Record the files autolaoders for later use in building our own autoloader. |
|
50 | - * |
|
51 | - * @var array |
|
52 | - */ |
|
53 | - protected array $filesAutoloaders = []; |
|
54 | - |
|
55 | - /** |
|
56 | - * Copier constructor. |
|
57 | - * @param ComposerPackage[] $dependencies |
|
58 | - * @param string $workingDir |
|
59 | - */ |
|
60 | - public function __construct( |
|
61 | - array $dependencies, |
|
62 | - string $workingDir, |
|
63 | - StraussConfig $config |
|
64 | - ) { |
|
65 | - $this->workingDir = $workingDir; |
|
66 | - |
|
67 | - $this->dependencies = $dependencies; |
|
68 | - |
|
69 | - $this->excludeNamespaces = $config->getExcludeNamespacesFromCopy(); |
|
70 | - $this->excludePackageNames = $config->getExcludePackagesFromCopy(); |
|
71 | - $this->excludeFilePatterns = $config->getExcludeFilePatternsFromCopy(); |
|
72 | - |
|
73 | - $this->filesystem = new Filesystem(new Local($this->workingDir)); |
|
74 | - } |
|
75 | - |
|
76 | - /** |
|
77 | - * Read the autoload keys of the dependencies and generate a list of the files referenced. |
|
78 | - */ |
|
79 | - public function compileFileList() |
|
80 | - { |
|
81 | - |
|
82 | - // TODO: read 'vendor' from composer.json. |
|
83 | - $prefixToRemove = $this->workingDir .'vendor'. DIRECTORY_SEPARATOR; |
|
84 | - |
|
85 | - foreach ($this->dependencies as $dependency) { |
|
86 | - if (in_array($dependency->getName(), $this->excludePackageNames)) { |
|
87 | - continue; |
|
88 | - } |
|
89 | - |
|
90 | - $packagePath = $this->workingDir . 'vendor' . DIRECTORY_SEPARATOR |
|
91 | - . $dependency->getPath() . DIRECTORY_SEPARATOR; |
|
92 | - |
|
93 | - /** |
|
94 | - * Where $dependency->autoload is ~ |
|
95 | - * |
|
96 | - * [ "psr-4" => [ "BrianHenryIE\Strauss" => "src" ] ] |
|
97 | - * Exclude "exclude-from-classmap" |
|
98 | - * @see https://getcomposer.org/doc/04-schema.md#exclude-files-from-classmaps |
|
99 | - */ |
|
100 | - $autoloaders = array_filter($dependency->getAutoload(), function ($type) { |
|
101 | - return 'exclude-from-classmap' !== $type; |
|
102 | - }, ARRAY_FILTER_USE_KEY); |
|
103 | - |
|
104 | - foreach ($autoloaders as $type => $value) { |
|
105 | - // Might have to switch/case here. |
|
106 | - |
|
107 | - if ('files' === $type) { |
|
108 | - $this->filesAutoloaders[$dependency->getPath()] = $value; |
|
109 | - } |
|
110 | - |
|
111 | - foreach ($value as $namespace => $namespace_relative_path) { |
|
112 | - if (!empty($namespace) && in_array($namespace, $this->excludeNamespaces)) { |
|
113 | - continue; |
|
114 | - } |
|
115 | - |
|
116 | - if (is_file($packagePath . $namespace_relative_path)) { |
|
117 | - // $finder->files()->name($file)->in($source_path); |
|
118 | - |
|
119 | - $relativeFilepath = str_replace($prefixToRemove, '', $packagePath . $namespace_relative_path); |
|
120 | - $relativeFilepath = preg_replace('#[\\\/]+#', DIRECTORY_SEPARATOR, $relativeFilepath); |
|
19 | + /** |
|
20 | + * The only path variable with a leading slash. |
|
21 | + * All directories in project end with a slash. |
|
22 | + * |
|
23 | + * @var string |
|
24 | + */ |
|
25 | + protected string $workingDir; |
|
26 | + |
|
27 | + /** @var ComposerPackage[] */ |
|
28 | + protected array $dependencies; |
|
29 | + |
|
30 | + protected array $excludePackageNames = array(); |
|
31 | + protected array $excludeNamespaces = array(); |
|
32 | + protected array $excludeFilePatterns = array(); |
|
33 | + |
|
34 | + /** @var Filesystem */ |
|
35 | + protected Filesystem $filesystem; |
|
36 | + |
|
37 | + /** |
|
38 | + * Complete list of files specified in packages autoloaders. |
|
39 | + * |
|
40 | + * Relative filepaths as key, with their dependency as the value. |
|
41 | + * |
|
42 | + * Relative from vendor/ |
|
43 | + * |
|
44 | + * @var array<string, ComposerPackage> |
|
45 | + */ |
|
46 | + protected array $filesWithDependencies = []; |
|
47 | + |
|
48 | + /** |
|
49 | + * Record the files autolaoders for later use in building our own autoloader. |
|
50 | + * |
|
51 | + * @var array |
|
52 | + */ |
|
53 | + protected array $filesAutoloaders = []; |
|
54 | + |
|
55 | + /** |
|
56 | + * Copier constructor. |
|
57 | + * @param ComposerPackage[] $dependencies |
|
58 | + * @param string $workingDir |
|
59 | + */ |
|
60 | + public function __construct( |
|
61 | + array $dependencies, |
|
62 | + string $workingDir, |
|
63 | + StraussConfig $config |
|
64 | + ) { |
|
65 | + $this->workingDir = $workingDir; |
|
66 | + |
|
67 | + $this->dependencies = $dependencies; |
|
68 | + |
|
69 | + $this->excludeNamespaces = $config->getExcludeNamespacesFromCopy(); |
|
70 | + $this->excludePackageNames = $config->getExcludePackagesFromCopy(); |
|
71 | + $this->excludeFilePatterns = $config->getExcludeFilePatternsFromCopy(); |
|
72 | + |
|
73 | + $this->filesystem = new Filesystem(new Local($this->workingDir)); |
|
74 | + } |
|
75 | + |
|
76 | + /** |
|
77 | + * Read the autoload keys of the dependencies and generate a list of the files referenced. |
|
78 | + */ |
|
79 | + public function compileFileList() |
|
80 | + { |
|
81 | + |
|
82 | + // TODO: read 'vendor' from composer.json. |
|
83 | + $prefixToRemove = $this->workingDir .'vendor'. DIRECTORY_SEPARATOR; |
|
84 | + |
|
85 | + foreach ($this->dependencies as $dependency) { |
|
86 | + if (in_array($dependency->getName(), $this->excludePackageNames)) { |
|
87 | + continue; |
|
88 | + } |
|
89 | + |
|
90 | + $packagePath = $this->workingDir . 'vendor' . DIRECTORY_SEPARATOR |
|
91 | + . $dependency->getPath() . DIRECTORY_SEPARATOR; |
|
92 | + |
|
93 | + /** |
|
94 | + * Where $dependency->autoload is ~ |
|
95 | + * |
|
96 | + * [ "psr-4" => [ "BrianHenryIE\Strauss" => "src" ] ] |
|
97 | + * Exclude "exclude-from-classmap" |
|
98 | + * @see https://getcomposer.org/doc/04-schema.md#exclude-files-from-classmaps |
|
99 | + */ |
|
100 | + $autoloaders = array_filter($dependency->getAutoload(), function ($type) { |
|
101 | + return 'exclude-from-classmap' !== $type; |
|
102 | + }, ARRAY_FILTER_USE_KEY); |
|
103 | + |
|
104 | + foreach ($autoloaders as $type => $value) { |
|
105 | + // Might have to switch/case here. |
|
106 | + |
|
107 | + if ('files' === $type) { |
|
108 | + $this->filesAutoloaders[$dependency->getPath()] = $value; |
|
109 | + } |
|
110 | + |
|
111 | + foreach ($value as $namespace => $namespace_relative_path) { |
|
112 | + if (!empty($namespace) && in_array($namespace, $this->excludeNamespaces)) { |
|
113 | + continue; |
|
114 | + } |
|
115 | + |
|
116 | + if (is_file($packagePath . $namespace_relative_path)) { |
|
117 | + // $finder->files()->name($file)->in($source_path); |
|
118 | + |
|
119 | + $relativeFilepath = str_replace($prefixToRemove, '', $packagePath . $namespace_relative_path); |
|
120 | + $relativeFilepath = preg_replace('#[\\\/]+#', DIRECTORY_SEPARATOR, $relativeFilepath); |
|
121 | 121 | |
122 | - $this->filesWithDependencies[$relativeFilepath] = $dependency; |
|
123 | - |
|
124 | - continue; |
|
125 | - } |
|
126 | - |
|
127 | - // else it is a directory. |
|
128 | - |
|
129 | - // trailingslashit(). |
|
130 | - $namespace_relative_path = rtrim($namespace_relative_path, DIRECTORY_SEPARATOR) |
|
131 | - . DIRECTORY_SEPARATOR; |
|
132 | - |
|
133 | - $sourcePath = $packagePath . $namespace_relative_path; |
|
134 | - |
|
135 | - // trailingslashit(). (to remove duplicates). |
|
136 | - $sourcePath = rtrim($sourcePath, DIRECTORY_SEPARATOR) . DIRECTORY_SEPARATOR; |
|
137 | - |
|
138 | - $finder = new Finder(); |
|
139 | - $finder->files()->in($sourcePath)->followLinks(); |
|
140 | - |
|
141 | - foreach ($finder as $foundFile) { |
|
142 | - $filePath = $foundFile->getPathname(); |
|
143 | - |
|
144 | - $relativeFilepath = str_replace($prefixToRemove, '', $filePath); |
|
145 | - |
|
146 | - // TODO: Is this needed here?! If anything, it's the prefix that needs to be normalised a few |
|
147 | - // lines above before being used. |
|
148 | - // Replace multiple \ and/or / with OS native DIRECTORY_SEPARATOR. |
|
149 | - $relativeFilepath = preg_replace('#[\\\/]+#', DIRECTORY_SEPARATOR, $relativeFilepath); |
|
150 | - |
|
151 | - foreach ($this->excludeFilePatterns as $excludePattern) { |
|
152 | - if (1 === preg_match($excludePattern, $relativeFilepath)) { |
|
153 | - continue 2; |
|
154 | - } |
|
155 | - } |
|
156 | - |
|
157 | - $this->filesWithDependencies[$relativeFilepath] = $dependency; |
|
158 | - } |
|
159 | - } |
|
160 | - } |
|
161 | - } |
|
162 | - } |
|
163 | - |
|
164 | - /** |
|
165 | - * Returns all found files. |
|
166 | - * |
|
167 | - * @return array<string, ComposerPackage> |
|
168 | - */ |
|
169 | - public function getAllFilesAndDependencyList(): array |
|
170 | - { |
|
171 | - return $this->filesWithDependencies; |
|
172 | - } |
|
173 | - |
|
174 | - /** |
|
175 | - * Returns found PHP files. |
|
176 | - * |
|
177 | - * @return array<string, ComposerPackage> |
|
178 | - */ |
|
179 | - public function getPhpFilesAndDependencyList(): array |
|
180 | - { |
|
181 | - return array_filter($this->filesWithDependencies, function ($value, $key) { |
|
182 | - return false !== strpos($key, '.php'); |
|
183 | - }, ARRAY_FILTER_USE_BOTH); |
|
184 | - } |
|
185 | - |
|
186 | - /** |
|
187 | - * Get the recorded files autoloaders. |
|
188 | - * |
|
189 | - * @return array<string, array<string>> |
|
190 | - */ |
|
191 | - public function getFilesAutoloaders(): array |
|
192 | - { |
|
193 | - return $this->filesAutoloaders; |
|
194 | - } |
|
122 | + $this->filesWithDependencies[$relativeFilepath] = $dependency; |
|
123 | + |
|
124 | + continue; |
|
125 | + } |
|
126 | + |
|
127 | + // else it is a directory. |
|
128 | + |
|
129 | + // trailingslashit(). |
|
130 | + $namespace_relative_path = rtrim($namespace_relative_path, DIRECTORY_SEPARATOR) |
|
131 | + . DIRECTORY_SEPARATOR; |
|
132 | + |
|
133 | + $sourcePath = $packagePath . $namespace_relative_path; |
|
134 | + |
|
135 | + // trailingslashit(). (to remove duplicates). |
|
136 | + $sourcePath = rtrim($sourcePath, DIRECTORY_SEPARATOR) . DIRECTORY_SEPARATOR; |
|
137 | + |
|
138 | + $finder = new Finder(); |
|
139 | + $finder->files()->in($sourcePath)->followLinks(); |
|
140 | + |
|
141 | + foreach ($finder as $foundFile) { |
|
142 | + $filePath = $foundFile->getPathname(); |
|
143 | + |
|
144 | + $relativeFilepath = str_replace($prefixToRemove, '', $filePath); |
|
145 | + |
|
146 | + // TODO: Is this needed here?! If anything, it's the prefix that needs to be normalised a few |
|
147 | + // lines above before being used. |
|
148 | + // Replace multiple \ and/or / with OS native DIRECTORY_SEPARATOR. |
|
149 | + $relativeFilepath = preg_replace('#[\\\/]+#', DIRECTORY_SEPARATOR, $relativeFilepath); |
|
150 | + |
|
151 | + foreach ($this->excludeFilePatterns as $excludePattern) { |
|
152 | + if (1 === preg_match($excludePattern, $relativeFilepath)) { |
|
153 | + continue 2; |
|
154 | + } |
|
155 | + } |
|
156 | + |
|
157 | + $this->filesWithDependencies[$relativeFilepath] = $dependency; |
|
158 | + } |
|
159 | + } |
|
160 | + } |
|
161 | + } |
|
162 | + } |
|
163 | + |
|
164 | + /** |
|
165 | + * Returns all found files. |
|
166 | + * |
|
167 | + * @return array<string, ComposerPackage> |
|
168 | + */ |
|
169 | + public function getAllFilesAndDependencyList(): array |
|
170 | + { |
|
171 | + return $this->filesWithDependencies; |
|
172 | + } |
|
173 | + |
|
174 | + /** |
|
175 | + * Returns found PHP files. |
|
176 | + * |
|
177 | + * @return array<string, ComposerPackage> |
|
178 | + */ |
|
179 | + public function getPhpFilesAndDependencyList(): array |
|
180 | + { |
|
181 | + return array_filter($this->filesWithDependencies, function ($value, $key) { |
|
182 | + return false !== strpos($key, '.php'); |
|
183 | + }, ARRAY_FILTER_USE_BOTH); |
|
184 | + } |
|
185 | + |
|
186 | + /** |
|
187 | + * Get the recorded files autoloaders. |
|
188 | + * |
|
189 | + * @return array<string, array<string>> |
|
190 | + */ |
|
191 | + public function getFilesAutoloaders(): array |
|
192 | + { |
|
193 | + return $this->filesAutoloaders; |
|
194 | + } |
|
195 | 195 | } |
@@ -43,14 +43,14 @@ discard block |
||
43 | 43 | * |
44 | 44 | * @var array<string, ComposerPackage> |
45 | 45 | */ |
46 | - protected array $filesWithDependencies = []; |
|
46 | + protected array $filesWithDependencies = [ ]; |
|
47 | 47 | |
48 | 48 | /** |
49 | 49 | * Record the files autolaoders for later use in building our own autoloader. |
50 | 50 | * |
51 | 51 | * @var array |
52 | 52 | */ |
53 | - protected array $filesAutoloaders = []; |
|
53 | + protected array $filesAutoloaders = [ ]; |
|
54 | 54 | |
55 | 55 | /** |
56 | 56 | * Copier constructor. |
@@ -70,7 +70,7 @@ discard block |
||
70 | 70 | $this->excludePackageNames = $config->getExcludePackagesFromCopy(); |
71 | 71 | $this->excludeFilePatterns = $config->getExcludeFilePatternsFromCopy(); |
72 | 72 | |
73 | - $this->filesystem = new Filesystem(new Local($this->workingDir)); |
|
73 | + $this->filesystem = new Filesystem( new Local( $this->workingDir ) ); |
|
74 | 74 | } |
75 | 75 | |
76 | 76 | /** |
@@ -80,10 +80,10 @@ discard block |
||
80 | 80 | { |
81 | 81 | |
82 | 82 | // TODO: read 'vendor' from composer.json. |
83 | - $prefixToRemove = $this->workingDir .'vendor'. DIRECTORY_SEPARATOR; |
|
83 | + $prefixToRemove = $this->workingDir . 'vendor' . DIRECTORY_SEPARATOR; |
|
84 | 84 | |
85 | - foreach ($this->dependencies as $dependency) { |
|
86 | - if (in_array($dependency->getName(), $this->excludePackageNames)) { |
|
85 | + foreach ( $this->dependencies as $dependency ) { |
|
86 | + if ( in_array( $dependency->getName(), $this->excludePackageNames ) ) { |
|
87 | 87 | continue; |
88 | 88 | } |
89 | 89 | |
@@ -97,29 +97,29 @@ discard block |
||
97 | 97 | * Exclude "exclude-from-classmap" |
98 | 98 | * @see https://getcomposer.org/doc/04-schema.md#exclude-files-from-classmaps |
99 | 99 | */ |
100 | - $autoloaders = array_filter($dependency->getAutoload(), function ($type) { |
|
100 | + $autoloaders = array_filter( $dependency->getAutoload(), function( $type ) { |
|
101 | 101 | return 'exclude-from-classmap' !== $type; |
102 | - }, ARRAY_FILTER_USE_KEY); |
|
102 | + }, ARRAY_FILTER_USE_KEY ); |
|
103 | 103 | |
104 | - foreach ($autoloaders as $type => $value) { |
|
104 | + foreach ( $autoloaders as $type => $value ) { |
|
105 | 105 | // Might have to switch/case here. |
106 | 106 | |
107 | - if ('files' === $type) { |
|
108 | - $this->filesAutoloaders[$dependency->getPath()] = $value; |
|
107 | + if ( 'files' === $type ) { |
|
108 | + $this->filesAutoloaders[ $dependency->getPath() ] = $value; |
|
109 | 109 | } |
110 | 110 | |
111 | - foreach ($value as $namespace => $namespace_relative_path) { |
|
112 | - if (!empty($namespace) && in_array($namespace, $this->excludeNamespaces)) { |
|
111 | + foreach ( $value as $namespace => $namespace_relative_path ) { |
|
112 | + if ( ! empty( $namespace ) && in_array( $namespace, $this->excludeNamespaces ) ) { |
|
113 | 113 | continue; |
114 | 114 | } |
115 | 115 | |
116 | - if (is_file($packagePath . $namespace_relative_path)) { |
|
116 | + if ( is_file( $packagePath . $namespace_relative_path ) ) { |
|
117 | 117 | // $finder->files()->name($file)->in($source_path); |
118 | 118 | |
119 | - $relativeFilepath = str_replace($prefixToRemove, '', $packagePath . $namespace_relative_path); |
|
120 | - $relativeFilepath = preg_replace('#[\\\/]+#', DIRECTORY_SEPARATOR, $relativeFilepath); |
|
119 | + $relativeFilepath = str_replace( $prefixToRemove, '', $packagePath . $namespace_relative_path ); |
|
120 | + $relativeFilepath = preg_replace( '#[\\\/]+#', DIRECTORY_SEPARATOR, $relativeFilepath ); |
|
121 | 121 | |
122 | - $this->filesWithDependencies[$relativeFilepath] = $dependency; |
|
122 | + $this->filesWithDependencies[ $relativeFilepath ] = $dependency; |
|
123 | 123 | |
124 | 124 | continue; |
125 | 125 | } |
@@ -127,34 +127,34 @@ discard block |
||
127 | 127 | // else it is a directory. |
128 | 128 | |
129 | 129 | // trailingslashit(). |
130 | - $namespace_relative_path = rtrim($namespace_relative_path, DIRECTORY_SEPARATOR) |
|
130 | + $namespace_relative_path = rtrim( $namespace_relative_path, DIRECTORY_SEPARATOR ) |
|
131 | 131 | . DIRECTORY_SEPARATOR; |
132 | 132 | |
133 | 133 | $sourcePath = $packagePath . $namespace_relative_path; |
134 | 134 | |
135 | 135 | // trailingslashit(). (to remove duplicates). |
136 | - $sourcePath = rtrim($sourcePath, DIRECTORY_SEPARATOR) . DIRECTORY_SEPARATOR; |
|
136 | + $sourcePath = rtrim( $sourcePath, DIRECTORY_SEPARATOR ) . DIRECTORY_SEPARATOR; |
|
137 | 137 | |
138 | 138 | $finder = new Finder(); |
139 | - $finder->files()->in($sourcePath)->followLinks(); |
|
139 | + $finder->files()->in( $sourcePath )->followLinks(); |
|
140 | 140 | |
141 | - foreach ($finder as $foundFile) { |
|
141 | + foreach ( $finder as $foundFile ) { |
|
142 | 142 | $filePath = $foundFile->getPathname(); |
143 | 143 | |
144 | - $relativeFilepath = str_replace($prefixToRemove, '', $filePath); |
|
144 | + $relativeFilepath = str_replace( $prefixToRemove, '', $filePath ); |
|
145 | 145 | |
146 | 146 | // TODO: Is this needed here?! If anything, it's the prefix that needs to be normalised a few |
147 | 147 | // lines above before being used. |
148 | 148 | // Replace multiple \ and/or / with OS native DIRECTORY_SEPARATOR. |
149 | - $relativeFilepath = preg_replace('#[\\\/]+#', DIRECTORY_SEPARATOR, $relativeFilepath); |
|
149 | + $relativeFilepath = preg_replace( '#[\\\/]+#', DIRECTORY_SEPARATOR, $relativeFilepath ); |
|
150 | 150 | |
151 | - foreach ($this->excludeFilePatterns as $excludePattern) { |
|
152 | - if (1 === preg_match($excludePattern, $relativeFilepath)) { |
|
151 | + foreach ( $this->excludeFilePatterns as $excludePattern ) { |
|
152 | + if ( 1 === preg_match( $excludePattern, $relativeFilepath ) ) { |
|
153 | 153 | continue 2; |
154 | 154 | } |
155 | 155 | } |
156 | 156 | |
157 | - $this->filesWithDependencies[$relativeFilepath] = $dependency; |
|
157 | + $this->filesWithDependencies[ $relativeFilepath ] = $dependency; |
|
158 | 158 | } |
159 | 159 | } |
160 | 160 | } |
@@ -178,9 +178,9 @@ discard block |
||
178 | 178 | */ |
179 | 179 | public function getPhpFilesAndDependencyList(): array |
180 | 180 | { |
181 | - return array_filter($this->filesWithDependencies, function ($value, $key) { |
|
182 | - return false !== strpos($key, '.php'); |
|
183 | - }, ARRAY_FILTER_USE_BOTH); |
|
181 | + return array_filter( $this->filesWithDependencies, function( $value, $key ) { |
|
182 | + return false !== strpos( $key, '.php' ); |
|
183 | + }, ARRAY_FILTER_USE_BOTH ); |
|
184 | 184 | } |
185 | 185 | |
186 | 186 | /** |
@@ -13,8 +13,7 @@ discard block |
||
13 | 13 | use League\Flysystem\Filesystem; |
14 | 14 | use Symfony\Component\Finder\Finder; |
15 | 15 | |
16 | -class FileEnumerator |
|
17 | -{ |
|
16 | +class FileEnumerator { |
|
18 | 17 | |
19 | 18 | /** |
20 | 19 | * The only path variable with a leading slash. |
@@ -76,8 +75,7 @@ discard block |
||
76 | 75 | /** |
77 | 76 | * Read the autoload keys of the dependencies and generate a list of the files referenced. |
78 | 77 | */ |
79 | - public function compileFileList() |
|
80 | - { |
|
78 | + public function compileFileList() { |
|
81 | 79 | |
82 | 80 | // TODO: read 'vendor' from composer.json. |
83 | 81 | $prefixToRemove = $this->workingDir .'vendor'. DIRECTORY_SEPARATOR; |
@@ -25,170 +25,170 @@ discard block |
||
25 | 25 | class Licenser |
26 | 26 | { |
27 | 27 | |
28 | - protected string $workingDir; |
|
28 | + protected string $workingDir; |
|
29 | 29 | |
30 | - protected array $dependencies; |
|
30 | + protected array $dependencies; |
|
31 | 31 | |
32 | - // The author of the current project who is running Strauss to make the changes to the required libraries. |
|
33 | - protected string $author; |
|
32 | + // The author of the current project who is running Strauss to make the changes to the required libraries. |
|
33 | + protected string $author; |
|
34 | 34 | |
35 | - protected string $targetDirectory; |
|
35 | + protected string $targetDirectory; |
|
36 | 36 | |
37 | - /** |
|
38 | - * An array of files relative to the project vendor folder. |
|
39 | - * |
|
40 | - * @var string[] |
|
41 | - */ |
|
42 | - protected array $discoveredLicenseFiles = array(); |
|
37 | + /** |
|
38 | + * An array of files relative to the project vendor folder. |
|
39 | + * |
|
40 | + * @var string[] |
|
41 | + */ |
|
42 | + protected array $discoveredLicenseFiles = array(); |
|
43 | 43 | |
44 | - /** @var Filesystem */ |
|
45 | - protected $filesystem; |
|
44 | + /** @var Filesystem */ |
|
45 | + protected $filesystem; |
|
46 | 46 | |
47 | 47 | |
48 | - /** |
|
49 | - * Licenser constructor. |
|
50 | - * @param string $workingDir |
|
51 | - * @param array $dependencies Whose folders are searched for existing license.txt files. |
|
52 | - * @param string $author To add to each modified file's header |
|
53 | - */ |
|
54 | - public function __construct(StraussConfig $config, string $workingDir, array $dependencies, string $author) |
|
55 | - { |
|
56 | - $this->workingDir = $workingDir; |
|
57 | - $this->dependencies = $dependencies; |
|
58 | - $this->author = $author; |
|
48 | + /** |
|
49 | + * Licenser constructor. |
|
50 | + * @param string $workingDir |
|
51 | + * @param array $dependencies Whose folders are searched for existing license.txt files. |
|
52 | + * @param string $author To add to each modified file's header |
|
53 | + */ |
|
54 | + public function __construct(StraussConfig $config, string $workingDir, array $dependencies, string $author) |
|
55 | + { |
|
56 | + $this->workingDir = $workingDir; |
|
57 | + $this->dependencies = $dependencies; |
|
58 | + $this->author = $author; |
|
59 | 59 | |
60 | - $this->targetDirectory = $config->getTargetDirectory(); |
|
60 | + $this->targetDirectory = $config->getTargetDirectory(); |
|
61 | 61 | |
62 | - $this->filesystem = new Filesystem(new Local($workingDir)); |
|
63 | - } |
|
62 | + $this->filesystem = new Filesystem(new Local($workingDir)); |
|
63 | + } |
|
64 | 64 | |
65 | - public function copyLicenses(): void |
|
66 | - { |
|
67 | - $this->findLicenseFiles(); |
|
68 | - |
|
69 | - foreach ($this->getDiscoveredLicenseFiles() as $licenseFile) { |
|
70 | - $targetLicenseFile = $this->targetDirectory . $licenseFile; |
|
71 | - |
|
72 | - $targetLicenseFileDir = dirname($targetLicenseFile); |
|
73 | - |
|
74 | - // Don't try copy it if it's already there. |
|
75 | - if ($this->filesystem->has($targetLicenseFile)) { |
|
76 | - continue; |
|
77 | - } |
|
78 | - |
|
79 | - // Don't add licenses to non-existent directories – there were no files copied there! |
|
80 | - if (! $this->filesystem->has($targetLicenseFileDir)) { |
|
81 | - continue; |
|
82 | - } |
|
83 | - |
|
84 | - $this->filesystem->copy( |
|
85 | - 'vendor' . DIRECTORY_SEPARATOR . $licenseFile, |
|
86 | - $targetLicenseFile |
|
87 | - ); |
|
88 | - } |
|
89 | - } |
|
90 | - |
|
91 | - |
|
92 | - /** |
|
93 | - * @see https://www.phpliveregex.com/p/A5y |
|
94 | - */ |
|
95 | - public function findLicenseFiles(?Finder $finder = null) |
|
96 | - { |
|
97 | - |
|
98 | - // Include all license files in the dependency path. |
|
99 | - $finder = $finder ?? new Finder(); |
|
100 | - |
|
101 | - // TODO: read 'vendor' from composer.json. |
|
102 | - $prefixToRemove = 'vendor' . DIRECTORY_SEPARATOR; |
|
103 | - |
|
104 | - /** @var ComposerPackage $dependency */ |
|
105 | - foreach ($this->dependencies as $dependency) { |
|
106 | - $packagePath = 'vendor' . DIRECTORY_SEPARATOR . $dependency->getPath(); |
|
107 | - |
|
108 | - // If packages happen to have their vendor dir, i.e. locally required packages, don't included the licenses |
|
109 | - // from their vendor dir (they should be included otherwise anyway). |
|
110 | - // $dependency->getVendorDir() |
|
111 | - $finder->files()->in($packagePath)->followLinks()->exclude(array( 'vendor' ))->name('/^.*licen.e.*/i'); |
|
112 | - |
|
113 | - /** @var \SplFileInfo $foundFile */ |
|
114 | - foreach ($finder as $foundFile) { |
|
115 | - $filePath = $foundFile->getPathname(); |
|
116 | - |
|
117 | - $relativeFilepath = str_replace($prefixToRemove, '', $filePath); |
|
118 | - |
|
119 | - // Replace multiple \ and/or / with OS native DIRECTORY_SEPARATOR. |
|
120 | - $relativeFilepath = preg_replace('#[\\\/]+#', DIRECTORY_SEPARATOR, $relativeFilepath); |
|
121 | - |
|
122 | - $this->discoveredLicenseFiles[$relativeFilepath] = $dependency->getName(); |
|
123 | - } |
|
124 | - } |
|
125 | - } |
|
126 | - |
|
127 | - public function getDiscoveredLicenseFiles(): array |
|
128 | - { |
|
129 | - return array_keys($this->discoveredLicenseFiles); |
|
130 | - } |
|
131 | - |
|
132 | - /** |
|
133 | - * @param array<string, ComposerPackage> $modifiedFiles |
|
134 | - */ |
|
135 | - public function addInformationToUpdatedFiles(array $modifiedFiles) |
|
136 | - { |
|
137 | - |
|
138 | - // e.g. "25-April-2021". |
|
139 | - $date = gmdate("d-F-Y", time()); |
|
140 | - |
|
141 | - foreach ($modifiedFiles as $relativeFilePath => $package) { |
|
142 | - $filepath = $this->targetDirectory . $relativeFilePath; |
|
143 | - |
|
144 | - $packageLicense = $package->getLicense(); |
|
145 | - |
|
146 | - // Throws an exception, but unlikely to happen. |
|
147 | - $contents = $this->filesystem->read($filepath); |
|
148 | - |
|
149 | - $updatedContents = $this->addChangeDeclarationToPhpString($contents, $date, $packageLicense); |
|
150 | - |
|
151 | - if ($updatedContents !== $contents) { |
|
152 | - $this->filesystem->put($filepath, $updatedContents); |
|
153 | - } |
|
154 | - } |
|
155 | - } |
|
156 | - |
|
157 | - /** |
|
158 | - * Given a php file as a string, edit it's header phpdoc, or add a header, to include: |
|
159 | - * |
|
160 | - * "Modified by {author} on {date} using Strauss. |
|
161 | - * @see https://github.com/BrianHenryIE/strauss" |
|
162 | - * |
|
163 | - * Should probably include the original license in each file since it'll often be a mix, with the parent |
|
164 | - * project often being a GPL WordPress plugin. |
|
165 | - * |
|
166 | - * Find the string between the end of php-opener and the first valid code. |
|
167 | - * First valid code will be a line whose first non-whitespace character is not / or * ?... NO! |
|
168 | - * If the first non whitespace string after php-opener is multiline-comment-opener, find the |
|
169 | - * closing multiline-comment-closer |
|
170 | - * / If there's already a comment, work within that comment |
|
171 | - * If there is no mention in the header of the license already, add it. |
|
172 | - * Add a note that changes have been made. |
|
173 | - * |
|
174 | - * @param string $phpString Code. |
|
175 | - */ |
|
176 | - public function addChangeDeclarationToPhpString( |
|
177 | - string $phpString, |
|
178 | - string $modifiedDate, |
|
179 | - string $packageLicense |
|
180 | - ) : string { |
|
181 | - |
|
182 | - $author = $this->author; |
|
183 | - |
|
184 | - $licenseDeclaration = "@license {$packageLicense}"; |
|
185 | - $modifiedDeclaration = "Modified by {$author} on {$modifiedDate} using Strauss."; |
|
186 | - $straussLink = "@see https://github.com/BrianHenryIE/strauss"; |
|
187 | - |
|
188 | - // php-open followed by some whitespace and new line until the first ... |
|
189 | - $noCommentBetweenPhpOpenAndFirstCodePattern = '~<\?php[\s\n]*[\w\\\?]+~'; |
|
190 | - |
|
191 | - $multilineCommentCapturePattern = ' |
|
65 | + public function copyLicenses(): void |
|
66 | + { |
|
67 | + $this->findLicenseFiles(); |
|
68 | + |
|
69 | + foreach ($this->getDiscoveredLicenseFiles() as $licenseFile) { |
|
70 | + $targetLicenseFile = $this->targetDirectory . $licenseFile; |
|
71 | + |
|
72 | + $targetLicenseFileDir = dirname($targetLicenseFile); |
|
73 | + |
|
74 | + // Don't try copy it if it's already there. |
|
75 | + if ($this->filesystem->has($targetLicenseFile)) { |
|
76 | + continue; |
|
77 | + } |
|
78 | + |
|
79 | + // Don't add licenses to non-existent directories – there were no files copied there! |
|
80 | + if (! $this->filesystem->has($targetLicenseFileDir)) { |
|
81 | + continue; |
|
82 | + } |
|
83 | + |
|
84 | + $this->filesystem->copy( |
|
85 | + 'vendor' . DIRECTORY_SEPARATOR . $licenseFile, |
|
86 | + $targetLicenseFile |
|
87 | + ); |
|
88 | + } |
|
89 | + } |
|
90 | + |
|
91 | + |
|
92 | + /** |
|
93 | + * @see https://www.phpliveregex.com/p/A5y |
|
94 | + */ |
|
95 | + public function findLicenseFiles(?Finder $finder = null) |
|
96 | + { |
|
97 | + |
|
98 | + // Include all license files in the dependency path. |
|
99 | + $finder = $finder ?? new Finder(); |
|
100 | + |
|
101 | + // TODO: read 'vendor' from composer.json. |
|
102 | + $prefixToRemove = 'vendor' . DIRECTORY_SEPARATOR; |
|
103 | + |
|
104 | + /** @var ComposerPackage $dependency */ |
|
105 | + foreach ($this->dependencies as $dependency) { |
|
106 | + $packagePath = 'vendor' . DIRECTORY_SEPARATOR . $dependency->getPath(); |
|
107 | + |
|
108 | + // If packages happen to have their vendor dir, i.e. locally required packages, don't included the licenses |
|
109 | + // from their vendor dir (they should be included otherwise anyway). |
|
110 | + // $dependency->getVendorDir() |
|
111 | + $finder->files()->in($packagePath)->followLinks()->exclude(array( 'vendor' ))->name('/^.*licen.e.*/i'); |
|
112 | + |
|
113 | + /** @var \SplFileInfo $foundFile */ |
|
114 | + foreach ($finder as $foundFile) { |
|
115 | + $filePath = $foundFile->getPathname(); |
|
116 | + |
|
117 | + $relativeFilepath = str_replace($prefixToRemove, '', $filePath); |
|
118 | + |
|
119 | + // Replace multiple \ and/or / with OS native DIRECTORY_SEPARATOR. |
|
120 | + $relativeFilepath = preg_replace('#[\\\/]+#', DIRECTORY_SEPARATOR, $relativeFilepath); |
|
121 | + |
|
122 | + $this->discoveredLicenseFiles[$relativeFilepath] = $dependency->getName(); |
|
123 | + } |
|
124 | + } |
|
125 | + } |
|
126 | + |
|
127 | + public function getDiscoveredLicenseFiles(): array |
|
128 | + { |
|
129 | + return array_keys($this->discoveredLicenseFiles); |
|
130 | + } |
|
131 | + |
|
132 | + /** |
|
133 | + * @param array<string, ComposerPackage> $modifiedFiles |
|
134 | + */ |
|
135 | + public function addInformationToUpdatedFiles(array $modifiedFiles) |
|
136 | + { |
|
137 | + |
|
138 | + // e.g. "25-April-2021". |
|
139 | + $date = gmdate("d-F-Y", time()); |
|
140 | + |
|
141 | + foreach ($modifiedFiles as $relativeFilePath => $package) { |
|
142 | + $filepath = $this->targetDirectory . $relativeFilePath; |
|
143 | + |
|
144 | + $packageLicense = $package->getLicense(); |
|
145 | + |
|
146 | + // Throws an exception, but unlikely to happen. |
|
147 | + $contents = $this->filesystem->read($filepath); |
|
148 | + |
|
149 | + $updatedContents = $this->addChangeDeclarationToPhpString($contents, $date, $packageLicense); |
|
150 | + |
|
151 | + if ($updatedContents !== $contents) { |
|
152 | + $this->filesystem->put($filepath, $updatedContents); |
|
153 | + } |
|
154 | + } |
|
155 | + } |
|
156 | + |
|
157 | + /** |
|
158 | + * Given a php file as a string, edit it's header phpdoc, or add a header, to include: |
|
159 | + * |
|
160 | + * "Modified by {author} on {date} using Strauss. |
|
161 | + * @see https://github.com/BrianHenryIE/strauss" |
|
162 | + * |
|
163 | + * Should probably include the original license in each file since it'll often be a mix, with the parent |
|
164 | + * project often being a GPL WordPress plugin. |
|
165 | + * |
|
166 | + * Find the string between the end of php-opener and the first valid code. |
|
167 | + * First valid code will be a line whose first non-whitespace character is not / or * ?... NO! |
|
168 | + * If the first non whitespace string after php-opener is multiline-comment-opener, find the |
|
169 | + * closing multiline-comment-closer |
|
170 | + * / If there's already a comment, work within that comment |
|
171 | + * If there is no mention in the header of the license already, add it. |
|
172 | + * Add a note that changes have been made. |
|
173 | + * |
|
174 | + * @param string $phpString Code. |
|
175 | + */ |
|
176 | + public function addChangeDeclarationToPhpString( |
|
177 | + string $phpString, |
|
178 | + string $modifiedDate, |
|
179 | + string $packageLicense |
|
180 | + ) : string { |
|
181 | + |
|
182 | + $author = $this->author; |
|
183 | + |
|
184 | + $licenseDeclaration = "@license {$packageLicense}"; |
|
185 | + $modifiedDeclaration = "Modified by {$author} on {$modifiedDate} using Strauss."; |
|
186 | + $straussLink = "@see https://github.com/BrianHenryIE/strauss"; |
|
187 | + |
|
188 | + // php-open followed by some whitespace and new line until the first ... |
|
189 | + $noCommentBetweenPhpOpenAndFirstCodePattern = '~<\?php[\s\n]*[\w\\\?]+~'; |
|
190 | + |
|
191 | + $multilineCommentCapturePattern = ' |
|
192 | 192 | ~ # Start the pattern |
193 | 193 | ( |
194 | 194 | <\?php[\S\s]* # match the beginning of the files php-open and following whitespace |
@@ -202,51 +202,51 @@ discard block |
||
202 | 202 | ~Ux'; // U: Non-greedy matching, x: ignore whitespace in pattern. |
203 | 203 | |
204 | 204 | |
205 | - $replaceInMultilineCommentFunction = function ($matches) use ( |
|
206 | - $licenseDeclaration, |
|
207 | - $modifiedDeclaration, |
|
208 | - $straussLink |
|
209 | - ) { |
|
205 | + $replaceInMultilineCommentFunction = function ($matches) use ( |
|
206 | + $licenseDeclaration, |
|
207 | + $modifiedDeclaration, |
|
208 | + $straussLink |
|
209 | + ) { |
|
210 | 210 | |
211 | - // Find the line prefix and use it, i.e. could be none, asterisk or space-asterisk. |
|
212 | - $commentLines = explode("\n", $matches[2]); |
|
211 | + // Find the line prefix and use it, i.e. could be none, asterisk or space-asterisk. |
|
212 | + $commentLines = explode("\n", $matches[2]); |
|
213 | 213 | |
214 | - if (isset($commentLines[1])&& 1 === preg_match('/^([\s\\\*]*)/', $commentLines[1], $output_array)) { |
|
215 | - $lineStart = $output_array[1]; |
|
216 | - } else { |
|
217 | - $lineStart = ' * '; |
|
218 | - } |
|
214 | + if (isset($commentLines[1])&& 1 === preg_match('/^([\s\\\*]*)/', $commentLines[1], $output_array)) { |
|
215 | + $lineStart = $output_array[1]; |
|
216 | + } else { |
|
217 | + $lineStart = ' * '; |
|
218 | + } |
|
219 | 219 | |
220 | - $appendString = "*\n"; |
|
220 | + $appendString = "*\n"; |
|
221 | 221 | |
222 | - // If the license is not already specified in the header, add it. |
|
223 | - if (false === strpos($matches[2], 'licen')) { |
|
224 | - $appendString .= "{$lineStart}{$licenseDeclaration}\n"; |
|
225 | - } |
|
222 | + // If the license is not already specified in the header, add it. |
|
223 | + if (false === strpos($matches[2], 'licen')) { |
|
224 | + $appendString .= "{$lineStart}{$licenseDeclaration}\n"; |
|
225 | + } |
|
226 | 226 | |
227 | - $appendString .= "{$lineStart}{$modifiedDeclaration}\n"; |
|
228 | - $appendString .= "{$lineStart}{$straussLink}\n"; |
|
227 | + $appendString .= "{$lineStart}{$modifiedDeclaration}\n"; |
|
228 | + $appendString .= "{$lineStart}{$straussLink}\n"; |
|
229 | 229 | |
230 | - $commentEnd = rtrim(rtrim($lineStart, ' '), '*').'*/'; |
|
230 | + $commentEnd = rtrim(rtrim($lineStart, ' '), '*').'*/'; |
|
231 | 231 | |
232 | - $replaceWith = $matches[1] . $matches[2] . $appendString . $commentEnd; |
|
232 | + $replaceWith = $matches[1] . $matches[2] . $appendString . $commentEnd; |
|
233 | 233 | |
234 | - return $replaceWith; |
|
235 | - }; |
|
234 | + return $replaceWith; |
|
235 | + }; |
|
236 | 236 | |
237 | - // If it's a simple case where there is no existing header, add the existing license. |
|
238 | - if (1 === preg_match($noCommentBetweenPhpOpenAndFirstCodePattern, $phpString)) { |
|
239 | - $modifiedComment = "/**\n * {$licenseDeclaration}\n *\n * {$modifiedDeclaration}\n * {$straussLink}\n */"; |
|
240 | - $updatedPhpString = preg_replace('~<\?php~', "<?php\n". $modifiedComment, $phpString, 1); |
|
241 | - } else { |
|
242 | - $updatedPhpString = preg_replace_callback( |
|
243 | - $multilineCommentCapturePattern, |
|
244 | - $replaceInMultilineCommentFunction, |
|
245 | - $phpString, |
|
246 | - 1 |
|
247 | - ); |
|
248 | - } |
|
237 | + // If it's a simple case where there is no existing header, add the existing license. |
|
238 | + if (1 === preg_match($noCommentBetweenPhpOpenAndFirstCodePattern, $phpString)) { |
|
239 | + $modifiedComment = "/**\n * {$licenseDeclaration}\n *\n * {$modifiedDeclaration}\n * {$straussLink}\n */"; |
|
240 | + $updatedPhpString = preg_replace('~<\?php~', "<?php\n". $modifiedComment, $phpString, 1); |
|
241 | + } else { |
|
242 | + $updatedPhpString = preg_replace_callback( |
|
243 | + $multilineCommentCapturePattern, |
|
244 | + $replaceInMultilineCommentFunction, |
|
245 | + $phpString, |
|
246 | + 1 |
|
247 | + ); |
|
248 | + } |
|
249 | 249 | |
250 | - return $updatedPhpString; |
|
251 | - } |
|
250 | + return $updatedPhpString; |
|
251 | + } |
|
252 | 252 | } |
@@ -51,7 +51,7 @@ discard block |
||
51 | 51 | * @param array $dependencies Whose folders are searched for existing license.txt files. |
52 | 52 | * @param string $author To add to each modified file's header |
53 | 53 | */ |
54 | - public function __construct(StraussConfig $config, string $workingDir, array $dependencies, string $author) |
|
54 | + public function __construct( StraussConfig $config, string $workingDir, array $dependencies, string $author ) |
|
55 | 55 | { |
56 | 56 | $this->workingDir = $workingDir; |
57 | 57 | $this->dependencies = $dependencies; |
@@ -59,25 +59,25 @@ discard block |
||
59 | 59 | |
60 | 60 | $this->targetDirectory = $config->getTargetDirectory(); |
61 | 61 | |
62 | - $this->filesystem = new Filesystem(new Local($workingDir)); |
|
62 | + $this->filesystem = new Filesystem( new Local( $workingDir ) ); |
|
63 | 63 | } |
64 | 64 | |
65 | 65 | public function copyLicenses(): void |
66 | 66 | { |
67 | 67 | $this->findLicenseFiles(); |
68 | 68 | |
69 | - foreach ($this->getDiscoveredLicenseFiles() as $licenseFile) { |
|
69 | + foreach ( $this->getDiscoveredLicenseFiles() as $licenseFile ) { |
|
70 | 70 | $targetLicenseFile = $this->targetDirectory . $licenseFile; |
71 | 71 | |
72 | - $targetLicenseFileDir = dirname($targetLicenseFile); |
|
72 | + $targetLicenseFileDir = dirname( $targetLicenseFile ); |
|
73 | 73 | |
74 | 74 | // Don't try copy it if it's already there. |
75 | - if ($this->filesystem->has($targetLicenseFile)) { |
|
75 | + if ( $this->filesystem->has( $targetLicenseFile ) ) { |
|
76 | 76 | continue; |
77 | 77 | } |
78 | 78 | |
79 | 79 | // Don't add licenses to non-existent directories – there were no files copied there! |
80 | - if (! $this->filesystem->has($targetLicenseFileDir)) { |
|
80 | + if ( ! $this->filesystem->has( $targetLicenseFileDir ) ) { |
|
81 | 81 | continue; |
82 | 82 | } |
83 | 83 | |
@@ -92,7 +92,7 @@ discard block |
||
92 | 92 | /** |
93 | 93 | * @see https://www.phpliveregex.com/p/A5y |
94 | 94 | */ |
95 | - public function findLicenseFiles(?Finder $finder = null) |
|
95 | + public function findLicenseFiles( ?Finder $finder = null ) |
|
96 | 96 | { |
97 | 97 | |
98 | 98 | // Include all license files in the dependency path. |
@@ -102,54 +102,54 @@ discard block |
||
102 | 102 | $prefixToRemove = 'vendor' . DIRECTORY_SEPARATOR; |
103 | 103 | |
104 | 104 | /** @var ComposerPackage $dependency */ |
105 | - foreach ($this->dependencies as $dependency) { |
|
105 | + foreach ( $this->dependencies as $dependency ) { |
|
106 | 106 | $packagePath = 'vendor' . DIRECTORY_SEPARATOR . $dependency->getPath(); |
107 | 107 | |
108 | 108 | // If packages happen to have their vendor dir, i.e. locally required packages, don't included the licenses |
109 | 109 | // from their vendor dir (they should be included otherwise anyway). |
110 | 110 | // $dependency->getVendorDir() |
111 | - $finder->files()->in($packagePath)->followLinks()->exclude(array( 'vendor' ))->name('/^.*licen.e.*/i'); |
|
111 | + $finder->files()->in( $packagePath )->followLinks()->exclude( array( 'vendor' ) )->name( '/^.*licen.e.*/i' ); |
|
112 | 112 | |
113 | 113 | /** @var \SplFileInfo $foundFile */ |
114 | - foreach ($finder as $foundFile) { |
|
114 | + foreach ( $finder as $foundFile ) { |
|
115 | 115 | $filePath = $foundFile->getPathname(); |
116 | 116 | |
117 | - $relativeFilepath = str_replace($prefixToRemove, '', $filePath); |
|
117 | + $relativeFilepath = str_replace( $prefixToRemove, '', $filePath ); |
|
118 | 118 | |
119 | 119 | // Replace multiple \ and/or / with OS native DIRECTORY_SEPARATOR. |
120 | - $relativeFilepath = preg_replace('#[\\\/]+#', DIRECTORY_SEPARATOR, $relativeFilepath); |
|
120 | + $relativeFilepath = preg_replace( '#[\\\/]+#', DIRECTORY_SEPARATOR, $relativeFilepath ); |
|
121 | 121 | |
122 | - $this->discoveredLicenseFiles[$relativeFilepath] = $dependency->getName(); |
|
122 | + $this->discoveredLicenseFiles[ $relativeFilepath ] = $dependency->getName(); |
|
123 | 123 | } |
124 | 124 | } |
125 | 125 | } |
126 | 126 | |
127 | 127 | public function getDiscoveredLicenseFiles(): array |
128 | 128 | { |
129 | - return array_keys($this->discoveredLicenseFiles); |
|
129 | + return array_keys( $this->discoveredLicenseFiles ); |
|
130 | 130 | } |
131 | 131 | |
132 | 132 | /** |
133 | 133 | * @param array<string, ComposerPackage> $modifiedFiles |
134 | 134 | */ |
135 | - public function addInformationToUpdatedFiles(array $modifiedFiles) |
|
135 | + public function addInformationToUpdatedFiles( array $modifiedFiles ) |
|
136 | 136 | { |
137 | 137 | |
138 | 138 | // e.g. "25-April-2021". |
139 | - $date = gmdate("d-F-Y", time()); |
|
139 | + $date = gmdate( "d-F-Y", time() ); |
|
140 | 140 | |
141 | - foreach ($modifiedFiles as $relativeFilePath => $package) { |
|
141 | + foreach ( $modifiedFiles as $relativeFilePath => $package ) { |
|
142 | 142 | $filepath = $this->targetDirectory . $relativeFilePath; |
143 | 143 | |
144 | 144 | $packageLicense = $package->getLicense(); |
145 | 145 | |
146 | 146 | // Throws an exception, but unlikely to happen. |
147 | - $contents = $this->filesystem->read($filepath); |
|
147 | + $contents = $this->filesystem->read( $filepath ); |
|
148 | 148 | |
149 | - $updatedContents = $this->addChangeDeclarationToPhpString($contents, $date, $packageLicense); |
|
149 | + $updatedContents = $this->addChangeDeclarationToPhpString( $contents, $date, $packageLicense ); |
|
150 | 150 | |
151 | - if ($updatedContents !== $contents) { |
|
152 | - $this->filesystem->put($filepath, $updatedContents); |
|
151 | + if ( $updatedContents !== $contents ) { |
|
152 | + $this->filesystem->put( $filepath, $updatedContents ); |
|
153 | 153 | } |
154 | 154 | } |
155 | 155 | } |
@@ -202,17 +202,17 @@ discard block |
||
202 | 202 | ~Ux'; // U: Non-greedy matching, x: ignore whitespace in pattern. |
203 | 203 | |
204 | 204 | |
205 | - $replaceInMultilineCommentFunction = function ($matches) use ( |
|
205 | + $replaceInMultilineCommentFunction = function( $matches ) use ( |
|
206 | 206 | $licenseDeclaration, |
207 | 207 | $modifiedDeclaration, |
208 | 208 | $straussLink |
209 | 209 | ) { |
210 | 210 | |
211 | 211 | // Find the line prefix and use it, i.e. could be none, asterisk or space-asterisk. |
212 | - $commentLines = explode("\n", $matches[2]); |
|
212 | + $commentLines = explode( "\n", $matches[ 2 ] ); |
|
213 | 213 | |
214 | - if (isset($commentLines[1])&& 1 === preg_match('/^([\s\\\*]*)/', $commentLines[1], $output_array)) { |
|
215 | - $lineStart = $output_array[1]; |
|
214 | + if ( isset( $commentLines[ 1 ] ) && 1 === preg_match( '/^([\s\\\*]*)/', $commentLines[ 1 ], $output_array ) ) { |
|
215 | + $lineStart = $output_array[ 1 ]; |
|
216 | 216 | } else { |
217 | 217 | $lineStart = ' * '; |
218 | 218 | } |
@@ -220,24 +220,24 @@ discard block |
||
220 | 220 | $appendString = "*\n"; |
221 | 221 | |
222 | 222 | // If the license is not already specified in the header, add it. |
223 | - if (false === strpos($matches[2], 'licen')) { |
|
223 | + if ( false === strpos( $matches[ 2 ], 'licen' ) ) { |
|
224 | 224 | $appendString .= "{$lineStart}{$licenseDeclaration}\n"; |
225 | 225 | } |
226 | 226 | |
227 | 227 | $appendString .= "{$lineStart}{$modifiedDeclaration}\n"; |
228 | 228 | $appendString .= "{$lineStart}{$straussLink}\n"; |
229 | 229 | |
230 | - $commentEnd = rtrim(rtrim($lineStart, ' '), '*').'*/'; |
|
230 | + $commentEnd = rtrim( rtrim( $lineStart, ' ' ), '*' ) . '*/'; |
|
231 | 231 | |
232 | - $replaceWith = $matches[1] . $matches[2] . $appendString . $commentEnd; |
|
232 | + $replaceWith = $matches[ 1 ] . $matches[ 2 ] . $appendString . $commentEnd; |
|
233 | 233 | |
234 | 234 | return $replaceWith; |
235 | 235 | }; |
236 | 236 | |
237 | 237 | // If it's a simple case where there is no existing header, add the existing license. |
238 | - if (1 === preg_match($noCommentBetweenPhpOpenAndFirstCodePattern, $phpString)) { |
|
238 | + if ( 1 === preg_match( $noCommentBetweenPhpOpenAndFirstCodePattern, $phpString ) ) { |
|
239 | 239 | $modifiedComment = "/**\n * {$licenseDeclaration}\n *\n * {$modifiedDeclaration}\n * {$straussLink}\n */"; |
240 | - $updatedPhpString = preg_replace('~<\?php~', "<?php\n". $modifiedComment, $phpString, 1); |
|
240 | + $updatedPhpString = preg_replace( '~<\?php~', "<?php\n" . $modifiedComment, $phpString, 1 ); |
|
241 | 241 | } else { |
242 | 242 | $updatedPhpString = preg_replace_callback( |
243 | 243 | $multilineCommentCapturePattern, |
@@ -22,8 +22,7 @@ discard block |
||
22 | 22 | use League\Flysystem\Filesystem; |
23 | 23 | use Symfony\Component\Finder\Finder; |
24 | 24 | |
25 | -class Licenser |
|
26 | -{ |
|
25 | +class Licenser { |
|
27 | 26 | |
28 | 27 | protected string $workingDir; |
29 | 28 | |
@@ -51,8 +50,7 @@ discard block |
||
51 | 50 | * @param array $dependencies Whose folders are searched for existing license.txt files. |
52 | 51 | * @param string $author To add to each modified file's header |
53 | 52 | */ |
54 | - public function __construct(StraussConfig $config, string $workingDir, array $dependencies, string $author) |
|
55 | - { |
|
53 | + public function __construct(StraussConfig $config, string $workingDir, array $dependencies, string $author) { |
|
56 | 54 | $this->workingDir = $workingDir; |
57 | 55 | $this->dependencies = $dependencies; |
58 | 56 | $this->author = $author; |
@@ -92,8 +90,7 @@ discard block |
||
92 | 90 | /** |
93 | 91 | * @see https://www.phpliveregex.com/p/A5y |
94 | 92 | */ |
95 | - public function findLicenseFiles(?Finder $finder = null) |
|
96 | - { |
|
93 | + public function findLicenseFiles(?Finder $finder = null) { |
|
97 | 94 | |
98 | 95 | // Include all license files in the dependency path. |
99 | 96 | $finder = $finder ?? new Finder(); |
@@ -132,8 +129,7 @@ discard block |
||
132 | 129 | /** |
133 | 130 | * @param array<string, ComposerPackage> $modifiedFiles |
134 | 131 | */ |
135 | - public function addInformationToUpdatedFiles(array $modifiedFiles) |
|
136 | - { |
|
132 | + public function addInformationToUpdatedFiles(array $modifiedFiles) { |
|
137 | 133 | |
138 | 134 | // e.g. "25-April-2021". |
139 | 135 | $date = gmdate("d-F-Y", time()); |
@@ -11,118 +11,118 @@ discard block |
||
11 | 11 | |
12 | 12 | class Prefixer |
13 | 13 | { |
14 | - /** @var StraussConfig */ |
|
15 | - protected $config; |
|
16 | - |
|
17 | - /** @var Filesystem */ |
|
18 | - protected $filesystem; |
|
19 | - |
|
20 | - protected string $targetDirectory; |
|
21 | - protected string $namespacePrefix; |
|
22 | - protected string $classmapPrefix; |
|
23 | - |
|
24 | - protected array $excludePackageNamesFromPrefixing; |
|
25 | - protected array $excludeNamespacesFromPrefixing; |
|
26 | - protected array $excludeFilePatternsFromPrefixing; |
|
27 | - |
|
28 | - /** @var array<string, ComposerPackage> */ |
|
29 | - protected array $changedFiles = array(); |
|
30 | - |
|
31 | - public function __construct(StraussConfig $config, string $workingDir) |
|
32 | - { |
|
33 | - $this->filesystem = new Filesystem(new Local($workingDir)); |
|
34 | - |
|
35 | - $this->targetDirectory = $config->getTargetDirectory(); |
|
36 | - $this->namespacePrefix = $config->getNamespacePrefix(); |
|
37 | - $this->classmapPrefix = $config->getClassmapPrefix(); |
|
38 | - |
|
39 | - $this->excludePackageNamesFromPrefixing = $config->getExcludePackagesFromPrefixing(); |
|
40 | - $this->excludeNamespacesFromPrefixing = $config->getExcludeNamespacesFromPrefixing(); |
|
41 | - $this->excludeFilePatternsFromPrefixing = $config->getExcludeFilePatternsFromPrefixing(); |
|
42 | - } |
|
43 | - |
|
44 | - // Don't replace a classname if there's an import for a class with the same name. |
|
45 | - // but do replace \Classname always |
|
46 | - |
|
47 | - |
|
48 | - /** |
|
49 | - * @param array<string, string> $namespaceChanges |
|
50 | - * @param array<string, string> $classChanges |
|
51 | - * @param array<string, ComposerPackage> $phpFileList |
|
52 | - * @throws FileNotFoundException |
|
53 | - */ |
|
54 | - public function replaceInFiles(array $namespaceChanges, array $classChanges, array $phpFileList) |
|
55 | - { |
|
56 | - |
|
57 | - foreach ($phpFileList as $sourceRelativeFilePathFromVendor => $package) { |
|
58 | - // Skip excluded namespaces. |
|
59 | - if (in_array($package->getName(), $this->excludePackageNamesFromPrefixing)) { |
|
60 | - continue; |
|
61 | - } |
|
62 | - |
|
63 | - // Skip files whose filepath matches an excluded pattern. |
|
64 | - foreach ($this->excludeFilePatternsFromPrefixing as $excludePattern) { |
|
65 | - if (1 === preg_match($excludePattern, $sourceRelativeFilePathFromVendor)) { |
|
66 | - continue 2; |
|
67 | - } |
|
68 | - } |
|
69 | - |
|
70 | - $targetRelativeFilepathFromProject = |
|
71 | - $this->targetDirectory. $sourceRelativeFilePathFromVendor; |
|
72 | - |
|
73 | - // Throws an exception, but unlikely to happen. |
|
74 | - $contents = $this->filesystem->read($targetRelativeFilepathFromProject); |
|
75 | - |
|
76 | - $updatedContents = $this->replaceInString($namespaceChanges, $classChanges, $contents); |
|
77 | - |
|
78 | - if ($updatedContents !== $contents) { |
|
79 | - $this->changedFiles[$sourceRelativeFilePathFromVendor] = $package; |
|
80 | - $this->filesystem->put($targetRelativeFilepathFromProject, $updatedContents); |
|
81 | - } |
|
82 | - } |
|
83 | - } |
|
84 | - |
|
85 | - public function replaceInString(array $namespacesChanges, array $classes, string $contents): string |
|
86 | - { |
|
87 | - |
|
88 | - foreach ($namespacesChanges as $originalNamespace => $replacement) { |
|
89 | - if (in_array($originalNamespace, $this->excludeNamespacesFromPrefixing)) { |
|
90 | - continue; |
|
91 | - } |
|
92 | - |
|
93 | - $contents = $this->replaceNamespace($contents, $originalNamespace, $replacement); |
|
94 | - } |
|
95 | - |
|
96 | - foreach ($classes as $originalClassname) { |
|
97 | - $classmapPrefix = $this->classmapPrefix; |
|
98 | - |
|
99 | - $contents = $this->replaceClassname($contents, $originalClassname, $classmapPrefix); |
|
100 | - } |
|
101 | - |
|
102 | - return $contents; |
|
103 | - } |
|
104 | - |
|
105 | - /** |
|
106 | - * TODO: Test against traits. |
|
107 | - * |
|
108 | - * @param string $contents The text to make replacements in. |
|
109 | - * |
|
110 | - * @return string The updated text. |
|
111 | - */ |
|
112 | - public function replaceNamespace($contents, $originalNamespace, $replacement) |
|
113 | - { |
|
114 | - |
|
115 | - // When namespaces exist inside strings... |
|
116 | - $searchNamespace = |
|
117 | - preg_quote($originalNamespace, '/') |
|
118 | - . '|' |
|
119 | - . preg_quote(str_replace('\\', '\\\\', $originalNamespace), '/') |
|
120 | - . '|' |
|
121 | - . preg_quote('\\' . $originalNamespace, '/') |
|
122 | - . '|' |
|
123 | - . preg_quote('\\\\' . str_replace('\\', '\\\\', $originalNamespace), '/'); |
|
124 | - |
|
125 | - $pattern = " |
|
14 | + /** @var StraussConfig */ |
|
15 | + protected $config; |
|
16 | + |
|
17 | + /** @var Filesystem */ |
|
18 | + protected $filesystem; |
|
19 | + |
|
20 | + protected string $targetDirectory; |
|
21 | + protected string $namespacePrefix; |
|
22 | + protected string $classmapPrefix; |
|
23 | + |
|
24 | + protected array $excludePackageNamesFromPrefixing; |
|
25 | + protected array $excludeNamespacesFromPrefixing; |
|
26 | + protected array $excludeFilePatternsFromPrefixing; |
|
27 | + |
|
28 | + /** @var array<string, ComposerPackage> */ |
|
29 | + protected array $changedFiles = array(); |
|
30 | + |
|
31 | + public function __construct(StraussConfig $config, string $workingDir) |
|
32 | + { |
|
33 | + $this->filesystem = new Filesystem(new Local($workingDir)); |
|
34 | + |
|
35 | + $this->targetDirectory = $config->getTargetDirectory(); |
|
36 | + $this->namespacePrefix = $config->getNamespacePrefix(); |
|
37 | + $this->classmapPrefix = $config->getClassmapPrefix(); |
|
38 | + |
|
39 | + $this->excludePackageNamesFromPrefixing = $config->getExcludePackagesFromPrefixing(); |
|
40 | + $this->excludeNamespacesFromPrefixing = $config->getExcludeNamespacesFromPrefixing(); |
|
41 | + $this->excludeFilePatternsFromPrefixing = $config->getExcludeFilePatternsFromPrefixing(); |
|
42 | + } |
|
43 | + |
|
44 | + // Don't replace a classname if there's an import for a class with the same name. |
|
45 | + // but do replace \Classname always |
|
46 | + |
|
47 | + |
|
48 | + /** |
|
49 | + * @param array<string, string> $namespaceChanges |
|
50 | + * @param array<string, string> $classChanges |
|
51 | + * @param array<string, ComposerPackage> $phpFileList |
|
52 | + * @throws FileNotFoundException |
|
53 | + */ |
|
54 | + public function replaceInFiles(array $namespaceChanges, array $classChanges, array $phpFileList) |
|
55 | + { |
|
56 | + |
|
57 | + foreach ($phpFileList as $sourceRelativeFilePathFromVendor => $package) { |
|
58 | + // Skip excluded namespaces. |
|
59 | + if (in_array($package->getName(), $this->excludePackageNamesFromPrefixing)) { |
|
60 | + continue; |
|
61 | + } |
|
62 | + |
|
63 | + // Skip files whose filepath matches an excluded pattern. |
|
64 | + foreach ($this->excludeFilePatternsFromPrefixing as $excludePattern) { |
|
65 | + if (1 === preg_match($excludePattern, $sourceRelativeFilePathFromVendor)) { |
|
66 | + continue 2; |
|
67 | + } |
|
68 | + } |
|
69 | + |
|
70 | + $targetRelativeFilepathFromProject = |
|
71 | + $this->targetDirectory. $sourceRelativeFilePathFromVendor; |
|
72 | + |
|
73 | + // Throws an exception, but unlikely to happen. |
|
74 | + $contents = $this->filesystem->read($targetRelativeFilepathFromProject); |
|
75 | + |
|
76 | + $updatedContents = $this->replaceInString($namespaceChanges, $classChanges, $contents); |
|
77 | + |
|
78 | + if ($updatedContents !== $contents) { |
|
79 | + $this->changedFiles[$sourceRelativeFilePathFromVendor] = $package; |
|
80 | + $this->filesystem->put($targetRelativeFilepathFromProject, $updatedContents); |
|
81 | + } |
|
82 | + } |
|
83 | + } |
|
84 | + |
|
85 | + public function replaceInString(array $namespacesChanges, array $classes, string $contents): string |
|
86 | + { |
|
87 | + |
|
88 | + foreach ($namespacesChanges as $originalNamespace => $replacement) { |
|
89 | + if (in_array($originalNamespace, $this->excludeNamespacesFromPrefixing)) { |
|
90 | + continue; |
|
91 | + } |
|
92 | + |
|
93 | + $contents = $this->replaceNamespace($contents, $originalNamespace, $replacement); |
|
94 | + } |
|
95 | + |
|
96 | + foreach ($classes as $originalClassname) { |
|
97 | + $classmapPrefix = $this->classmapPrefix; |
|
98 | + |
|
99 | + $contents = $this->replaceClassname($contents, $originalClassname, $classmapPrefix); |
|
100 | + } |
|
101 | + |
|
102 | + return $contents; |
|
103 | + } |
|
104 | + |
|
105 | + /** |
|
106 | + * TODO: Test against traits. |
|
107 | + * |
|
108 | + * @param string $contents The text to make replacements in. |
|
109 | + * |
|
110 | + * @return string The updated text. |
|
111 | + */ |
|
112 | + public function replaceNamespace($contents, $originalNamespace, $replacement) |
|
113 | + { |
|
114 | + |
|
115 | + // When namespaces exist inside strings... |
|
116 | + $searchNamespace = |
|
117 | + preg_quote($originalNamespace, '/') |
|
118 | + . '|' |
|
119 | + . preg_quote(str_replace('\\', '\\\\', $originalNamespace), '/') |
|
120 | + . '|' |
|
121 | + . preg_quote('\\' . $originalNamespace, '/') |
|
122 | + . '|' |
|
123 | + . preg_quote('\\\\' . str_replace('\\', '\\\\', $originalNamespace), '/'); |
|
124 | + |
|
125 | + $pattern = " |
|
126 | 126 | / # Start the pattern |
127 | 127 | ( |
128 | 128 | ^\s* # start of the line |
@@ -156,62 +156,62 @@ discard block |
||
156 | 156 | ) |
157 | 157 | /Ux"; // U: Non-greedy matching, x: ignore whitespace in pattern. |
158 | 158 | |
159 | - $replacingFunction = function ($matches) use ($originalNamespace, $replacement) { |
|
160 | - |
|
161 | - $singleBackslash = '\\\\'; |
|
162 | - $doubleBackslash = '\\\\\\\\'; |
|
163 | - $originalNamespacePattern = str_replace('\\', '\\\\+', $originalNamespace); |
|
164 | - $beginsSingleBackslashPattern = "#{$singleBackslash}{$originalNamespacePattern}#"; |
|
165 | - $beginsDoubleBackslashPattern = "#{$doubleBackslash}{$originalNamespacePattern}#"; |
|
166 | - $containsDoubleBackslashPattern = "#{$doubleBackslash}#"; |
|
167 | - |
|
168 | - // Namespace begins with \\. |
|
169 | - if (preg_match($beginsDoubleBackslashPattern, $matches[2])) { |
|
170 | - $replacement = str_replace("\\", "\\\\", $replacement); |
|
171 | - $replacement = "\\\\" . $replacement; |
|
172 | - } elseif (preg_match($beginsSingleBackslashPattern, $matches[2])) { |
|
173 | - $replacement = "\\" . $replacement; |
|
174 | - } elseif (preg_match($containsDoubleBackslashPattern, $matches[2])) { |
|
175 | - $replacement = str_replace("\\", "\\\\", $replacement); |
|
176 | - } |
|
177 | - |
|
178 | - return $matches[1] . $replacement . $matches[3]; |
|
179 | - }; |
|
180 | - |
|
181 | - $result = preg_replace_callback($pattern, $replacingFunction, $contents); |
|
182 | - |
|
183 | - $matchingError = preg_last_error(); |
|
184 | - if (0 !== $matchingError) { |
|
185 | - $message = "Matching error {$matchingError}"; |
|
186 | - if (PREG_BACKTRACK_LIMIT_ERROR === $matchingError) { |
|
187 | - $message = 'Preg Backtrack limit was exhausted!'; |
|
188 | - } |
|
189 | - throw new Exception($message); |
|
190 | - } |
|
191 | - |
|
192 | - return $result; |
|
193 | - } |
|
194 | - |
|
195 | - /** |
|
196 | - * In a namespace: |
|
197 | - * * use \Classname; |
|
198 | - * * new \Classname() |
|
199 | - * |
|
200 | - * In a global namespace: |
|
201 | - * * new Classname() |
|
202 | - * |
|
203 | - * @param string $contents |
|
204 | - * @param string $originalClassname |
|
205 | - * @param string $classnamePrefix |
|
206 | - * @return array|string|string[]|null |
|
207 | - * @throws \Exception |
|
208 | - */ |
|
209 | - public function replaceClassname($contents, $originalClassname, $classnamePrefix) |
|
210 | - { |
|
211 | - $searchClassname = preg_quote($originalClassname, '/'); |
|
212 | - |
|
213 | - // This could be more specific if we could enumerate all preceeding and proceeding words ("new", "("...). |
|
214 | - $pattern = ' |
|
159 | + $replacingFunction = function ($matches) use ($originalNamespace, $replacement) { |
|
160 | + |
|
161 | + $singleBackslash = '\\\\'; |
|
162 | + $doubleBackslash = '\\\\\\\\'; |
|
163 | + $originalNamespacePattern = str_replace('\\', '\\\\+', $originalNamespace); |
|
164 | + $beginsSingleBackslashPattern = "#{$singleBackslash}{$originalNamespacePattern}#"; |
|
165 | + $beginsDoubleBackslashPattern = "#{$doubleBackslash}{$originalNamespacePattern}#"; |
|
166 | + $containsDoubleBackslashPattern = "#{$doubleBackslash}#"; |
|
167 | + |
|
168 | + // Namespace begins with \\. |
|
169 | + if (preg_match($beginsDoubleBackslashPattern, $matches[2])) { |
|
170 | + $replacement = str_replace("\\", "\\\\", $replacement); |
|
171 | + $replacement = "\\\\" . $replacement; |
|
172 | + } elseif (preg_match($beginsSingleBackslashPattern, $matches[2])) { |
|
173 | + $replacement = "\\" . $replacement; |
|
174 | + } elseif (preg_match($containsDoubleBackslashPattern, $matches[2])) { |
|
175 | + $replacement = str_replace("\\", "\\\\", $replacement); |
|
176 | + } |
|
177 | + |
|
178 | + return $matches[1] . $replacement . $matches[3]; |
|
179 | + }; |
|
180 | + |
|
181 | + $result = preg_replace_callback($pattern, $replacingFunction, $contents); |
|
182 | + |
|
183 | + $matchingError = preg_last_error(); |
|
184 | + if (0 !== $matchingError) { |
|
185 | + $message = "Matching error {$matchingError}"; |
|
186 | + if (PREG_BACKTRACK_LIMIT_ERROR === $matchingError) { |
|
187 | + $message = 'Preg Backtrack limit was exhausted!'; |
|
188 | + } |
|
189 | + throw new Exception($message); |
|
190 | + } |
|
191 | + |
|
192 | + return $result; |
|
193 | + } |
|
194 | + |
|
195 | + /** |
|
196 | + * In a namespace: |
|
197 | + * * use \Classname; |
|
198 | + * * new \Classname() |
|
199 | + * |
|
200 | + * In a global namespace: |
|
201 | + * * new Classname() |
|
202 | + * |
|
203 | + * @param string $contents |
|
204 | + * @param string $originalClassname |
|
205 | + * @param string $classnamePrefix |
|
206 | + * @return array|string|string[]|null |
|
207 | + * @throws \Exception |
|
208 | + */ |
|
209 | + public function replaceClassname($contents, $originalClassname, $classnamePrefix) |
|
210 | + { |
|
211 | + $searchClassname = preg_quote($originalClassname, '/'); |
|
212 | + |
|
213 | + // This could be more specific if we could enumerate all preceeding and proceeding words ("new", "("...). |
|
214 | + $pattern = ' |
|
215 | 215 | / # Start the pattern |
216 | 216 | namespace\s+([a-zA-Z0-9_\x7f-\xff\\\\]+).*?{.*?(namespace|\z) |
217 | 217 | # Look for a preceeding namespace declaration, up until a |
@@ -222,65 +222,65 @@ discard block |
||
222 | 222 | |
223 | 223 | /x'; // # x: ignore whitespace in regex. |
224 | 224 | |
225 | - $replacingFunction = function ($matches) use ($originalClassname, $classnamePrefix) { |
|
226 | - |
|
227 | - // If we're inside a namespace other than the global namespace: |
|
228 | - if (1 === preg_match('/^namespace\s+[a-zA-Z0-9_\x7f-\xff\\\\]+[;{\s\n]{1}.*/', $matches[0])) { |
|
229 | - $updated = $this->replaceGlobalClassInsideNamedNamespace( |
|
230 | - $matches[0], |
|
231 | - $originalClassname, |
|
232 | - $classnamePrefix |
|
233 | - ); |
|
234 | - |
|
235 | - return $updated; |
|
236 | - } |
|
237 | - |
|
238 | - return $matches[1] . $matches[2] . $matches[3] . $classnamePrefix . $originalClassname . $matches[5]; |
|
239 | - }; |
|
240 | - |
|
241 | - $result = preg_replace_callback($pattern, $replacingFunction, $contents); |
|
242 | - |
|
243 | - $matchingError = preg_last_error(); |
|
244 | - if (0 !== $matchingError) { |
|
245 | - $message = "Matching error {$matchingError}"; |
|
246 | - if (PREG_BACKTRACK_LIMIT_ERROR === $matchingError) { |
|
247 | - $message = 'Backtrack limit was exhausted!'; |
|
248 | - } |
|
249 | - throw new Exception($message); |
|
250 | - } |
|
251 | - |
|
252 | - return $result; |
|
253 | - } |
|
254 | - |
|
255 | - /** |
|
256 | - * Pass in a string and look for \Classname instances. |
|
257 | - * |
|
258 | - * @param string $contents |
|
259 | - * @param string $originalClassname |
|
260 | - * @param string $classnamePrefix |
|
261 | - * @return string |
|
262 | - */ |
|
263 | - protected function replaceGlobalClassInsideNamedNamespace($contents, $originalClassname, $classnamePrefix): string |
|
264 | - { |
|
265 | - |
|
266 | - return preg_replace_callback( |
|
267 | - '/([^a-zA-Z0-9_\x7f-\xff] # Not a class character |
|
225 | + $replacingFunction = function ($matches) use ($originalClassname, $classnamePrefix) { |
|
226 | + |
|
227 | + // If we're inside a namespace other than the global namespace: |
|
228 | + if (1 === preg_match('/^namespace\s+[a-zA-Z0-9_\x7f-\xff\\\\]+[;{\s\n]{1}.*/', $matches[0])) { |
|
229 | + $updated = $this->replaceGlobalClassInsideNamedNamespace( |
|
230 | + $matches[0], |
|
231 | + $originalClassname, |
|
232 | + $classnamePrefix |
|
233 | + ); |
|
234 | + |
|
235 | + return $updated; |
|
236 | + } |
|
237 | + |
|
238 | + return $matches[1] . $matches[2] . $matches[3] . $classnamePrefix . $originalClassname . $matches[5]; |
|
239 | + }; |
|
240 | + |
|
241 | + $result = preg_replace_callback($pattern, $replacingFunction, $contents); |
|
242 | + |
|
243 | + $matchingError = preg_last_error(); |
|
244 | + if (0 !== $matchingError) { |
|
245 | + $message = "Matching error {$matchingError}"; |
|
246 | + if (PREG_BACKTRACK_LIMIT_ERROR === $matchingError) { |
|
247 | + $message = 'Backtrack limit was exhausted!'; |
|
248 | + } |
|
249 | + throw new Exception($message); |
|
250 | + } |
|
251 | + |
|
252 | + return $result; |
|
253 | + } |
|
254 | + |
|
255 | + /** |
|
256 | + * Pass in a string and look for \Classname instances. |
|
257 | + * |
|
258 | + * @param string $contents |
|
259 | + * @param string $originalClassname |
|
260 | + * @param string $classnamePrefix |
|
261 | + * @return string |
|
262 | + */ |
|
263 | + protected function replaceGlobalClassInsideNamedNamespace($contents, $originalClassname, $classnamePrefix): string |
|
264 | + { |
|
265 | + |
|
266 | + return preg_replace_callback( |
|
267 | + '/([^a-zA-Z0-9_\x7f-\xff] # Not a class character |
|
268 | 268 | \\\) # Followed by a backslash to indicate global namespace |
269 | 269 | ('.$originalClassname.') # Followed by the classname |
270 | 270 | ([^\\\;]+) # Not a backslash or semicolon which might indicate a namespace |
271 | 271 | /x', // # x: ignore whitespace in regex. |
272 | - function ($matches) use ($originalClassname, $classnamePrefix) { |
|
273 | - return $matches[1] . $classnamePrefix . $originalClassname . $matches[3]; |
|
274 | - }, |
|
275 | - $contents |
|
276 | - ); |
|
277 | - } |
|
278 | - |
|
279 | - /** |
|
280 | - * @return array<string, ComposerPackage> |
|
281 | - */ |
|
282 | - public function getModifiedFiles(): array |
|
283 | - { |
|
284 | - return $this->changedFiles; |
|
285 | - } |
|
272 | + function ($matches) use ($originalClassname, $classnamePrefix) { |
|
273 | + return $matches[1] . $classnamePrefix . $originalClassname . $matches[3]; |
|
274 | + }, |
|
275 | + $contents |
|
276 | + ); |
|
277 | + } |
|
278 | + |
|
279 | + /** |
|
280 | + * @return array<string, ComposerPackage> |
|
281 | + */ |
|
282 | + public function getModifiedFiles(): array |
|
283 | + { |
|
284 | + return $this->changedFiles; |
|
285 | + } |
|
286 | 286 | } |
@@ -28,9 +28,9 @@ discard block |
||
28 | 28 | /** @var array<string, ComposerPackage> */ |
29 | 29 | protected array $changedFiles = array(); |
30 | 30 | |
31 | - public function __construct(StraussConfig $config, string $workingDir) |
|
31 | + public function __construct( StraussConfig $config, string $workingDir ) |
|
32 | 32 | { |
33 | - $this->filesystem = new Filesystem(new Local($workingDir)); |
|
33 | + $this->filesystem = new Filesystem( new Local( $workingDir ) ); |
|
34 | 34 | |
35 | 35 | $this->targetDirectory = $config->getTargetDirectory(); |
36 | 36 | $this->namespacePrefix = $config->getNamespacePrefix(); |
@@ -51,52 +51,52 @@ discard block |
||
51 | 51 | * @param array<string, ComposerPackage> $phpFileList |
52 | 52 | * @throws FileNotFoundException |
53 | 53 | */ |
54 | - public function replaceInFiles(array $namespaceChanges, array $classChanges, array $phpFileList) |
|
54 | + public function replaceInFiles( array $namespaceChanges, array $classChanges, array $phpFileList ) |
|
55 | 55 | { |
56 | 56 | |
57 | - foreach ($phpFileList as $sourceRelativeFilePathFromVendor => $package) { |
|
57 | + foreach ( $phpFileList as $sourceRelativeFilePathFromVendor => $package ) { |
|
58 | 58 | // Skip excluded namespaces. |
59 | - if (in_array($package->getName(), $this->excludePackageNamesFromPrefixing)) { |
|
59 | + if ( in_array( $package->getName(), $this->excludePackageNamesFromPrefixing ) ) { |
|
60 | 60 | continue; |
61 | 61 | } |
62 | 62 | |
63 | 63 | // Skip files whose filepath matches an excluded pattern. |
64 | - foreach ($this->excludeFilePatternsFromPrefixing as $excludePattern) { |
|
65 | - if (1 === preg_match($excludePattern, $sourceRelativeFilePathFromVendor)) { |
|
64 | + foreach ( $this->excludeFilePatternsFromPrefixing as $excludePattern ) { |
|
65 | + if ( 1 === preg_match( $excludePattern, $sourceRelativeFilePathFromVendor ) ) { |
|
66 | 66 | continue 2; |
67 | 67 | } |
68 | 68 | } |
69 | 69 | |
70 | 70 | $targetRelativeFilepathFromProject = |
71 | - $this->targetDirectory. $sourceRelativeFilePathFromVendor; |
|
71 | + $this->targetDirectory . $sourceRelativeFilePathFromVendor; |
|
72 | 72 | |
73 | 73 | // Throws an exception, but unlikely to happen. |
74 | - $contents = $this->filesystem->read($targetRelativeFilepathFromProject); |
|
74 | + $contents = $this->filesystem->read( $targetRelativeFilepathFromProject ); |
|
75 | 75 | |
76 | - $updatedContents = $this->replaceInString($namespaceChanges, $classChanges, $contents); |
|
76 | + $updatedContents = $this->replaceInString( $namespaceChanges, $classChanges, $contents ); |
|
77 | 77 | |
78 | - if ($updatedContents !== $contents) { |
|
79 | - $this->changedFiles[$sourceRelativeFilePathFromVendor] = $package; |
|
80 | - $this->filesystem->put($targetRelativeFilepathFromProject, $updatedContents); |
|
78 | + if ( $updatedContents !== $contents ) { |
|
79 | + $this->changedFiles[ $sourceRelativeFilePathFromVendor ] = $package; |
|
80 | + $this->filesystem->put( $targetRelativeFilepathFromProject, $updatedContents ); |
|
81 | 81 | } |
82 | 82 | } |
83 | 83 | } |
84 | 84 | |
85 | - public function replaceInString(array $namespacesChanges, array $classes, string $contents): string |
|
85 | + public function replaceInString( array $namespacesChanges, array $classes, string $contents ): string |
|
86 | 86 | { |
87 | 87 | |
88 | - foreach ($namespacesChanges as $originalNamespace => $replacement) { |
|
89 | - if (in_array($originalNamespace, $this->excludeNamespacesFromPrefixing)) { |
|
88 | + foreach ( $namespacesChanges as $originalNamespace => $replacement ) { |
|
89 | + if ( in_array( $originalNamespace, $this->excludeNamespacesFromPrefixing ) ) { |
|
90 | 90 | continue; |
91 | 91 | } |
92 | 92 | |
93 | - $contents = $this->replaceNamespace($contents, $originalNamespace, $replacement); |
|
93 | + $contents = $this->replaceNamespace( $contents, $originalNamespace, $replacement ); |
|
94 | 94 | } |
95 | 95 | |
96 | - foreach ($classes as $originalClassname) { |
|
96 | + foreach ( $classes as $originalClassname ) { |
|
97 | 97 | $classmapPrefix = $this->classmapPrefix; |
98 | 98 | |
99 | - $contents = $this->replaceClassname($contents, $originalClassname, $classmapPrefix); |
|
99 | + $contents = $this->replaceClassname( $contents, $originalClassname, $classmapPrefix ); |
|
100 | 100 | } |
101 | 101 | |
102 | 102 | return $contents; |
@@ -109,18 +109,18 @@ discard block |
||
109 | 109 | * |
110 | 110 | * @return string The updated text. |
111 | 111 | */ |
112 | - public function replaceNamespace($contents, $originalNamespace, $replacement) |
|
112 | + public function replaceNamespace( $contents, $originalNamespace, $replacement ) |
|
113 | 113 | { |
114 | 114 | |
115 | 115 | // When namespaces exist inside strings... |
116 | 116 | $searchNamespace = |
117 | - preg_quote($originalNamespace, '/') |
|
117 | + preg_quote( $originalNamespace, '/' ) |
|
118 | 118 | . '|' |
119 | - . preg_quote(str_replace('\\', '\\\\', $originalNamespace), '/') |
|
119 | + . preg_quote( str_replace( '\\', '\\\\', $originalNamespace ), '/' ) |
|
120 | 120 | . '|' |
121 | - . preg_quote('\\' . $originalNamespace, '/') |
|
121 | + . preg_quote( '\\' . $originalNamespace, '/' ) |
|
122 | 122 | . '|' |
123 | - . preg_quote('\\\\' . str_replace('\\', '\\\\', $originalNamespace), '/'); |
|
123 | + . preg_quote( '\\\\' . str_replace( '\\', '\\\\', $originalNamespace ), '/' ); |
|
124 | 124 | |
125 | 125 | $pattern = " |
126 | 126 | / # Start the pattern |
@@ -154,39 +154,39 @@ discard block |
||
154 | 154 | |' # or single quote |
155 | 155 | |: # or a colon to access a static |
156 | 156 | ) |
157 | - /Ux"; // U: Non-greedy matching, x: ignore whitespace in pattern. |
|
157 | + /Ux"; // U: Non-greedy matching, x: ignore whitespace in pattern. |
|
158 | 158 | |
159 | - $replacingFunction = function ($matches) use ($originalNamespace, $replacement) { |
|
159 | + $replacingFunction = function( $matches ) use ( $originalNamespace, $replacement ) { |
|
160 | 160 | |
161 | 161 | $singleBackslash = '\\\\'; |
162 | 162 | $doubleBackslash = '\\\\\\\\'; |
163 | - $originalNamespacePattern = str_replace('\\', '\\\\+', $originalNamespace); |
|
163 | + $originalNamespacePattern = str_replace( '\\', '\\\\+', $originalNamespace ); |
|
164 | 164 | $beginsSingleBackslashPattern = "#{$singleBackslash}{$originalNamespacePattern}#"; |
165 | 165 | $beginsDoubleBackslashPattern = "#{$doubleBackslash}{$originalNamespacePattern}#"; |
166 | 166 | $containsDoubleBackslashPattern = "#{$doubleBackslash}#"; |
167 | 167 | |
168 | 168 | // Namespace begins with \\. |
169 | - if (preg_match($beginsDoubleBackslashPattern, $matches[2])) { |
|
170 | - $replacement = str_replace("\\", "\\\\", $replacement); |
|
169 | + if ( preg_match( $beginsDoubleBackslashPattern, $matches[ 2 ] ) ) { |
|
170 | + $replacement = str_replace( "\\", "\\\\", $replacement ); |
|
171 | 171 | $replacement = "\\\\" . $replacement; |
172 | - } elseif (preg_match($beginsSingleBackslashPattern, $matches[2])) { |
|
172 | + } elseif ( preg_match( $beginsSingleBackslashPattern, $matches[ 2 ] ) ) { |
|
173 | 173 | $replacement = "\\" . $replacement; |
174 | - } elseif (preg_match($containsDoubleBackslashPattern, $matches[2])) { |
|
175 | - $replacement = str_replace("\\", "\\\\", $replacement); |
|
174 | + } elseif ( preg_match( $containsDoubleBackslashPattern, $matches[ 2 ] ) ) { |
|
175 | + $replacement = str_replace( "\\", "\\\\", $replacement ); |
|
176 | 176 | } |
177 | 177 | |
178 | - return $matches[1] . $replacement . $matches[3]; |
|
178 | + return $matches[ 1 ] . $replacement . $matches[ 3 ]; |
|
179 | 179 | }; |
180 | 180 | |
181 | - $result = preg_replace_callback($pattern, $replacingFunction, $contents); |
|
181 | + $result = preg_replace_callback( $pattern, $replacingFunction, $contents ); |
|
182 | 182 | |
183 | 183 | $matchingError = preg_last_error(); |
184 | - if (0 !== $matchingError) { |
|
184 | + if ( 0 !== $matchingError ) { |
|
185 | 185 | $message = "Matching error {$matchingError}"; |
186 | - if (PREG_BACKTRACK_LIMIT_ERROR === $matchingError) { |
|
186 | + if ( PREG_BACKTRACK_LIMIT_ERROR === $matchingError ) { |
|
187 | 187 | $message = 'Preg Backtrack limit was exhausted!'; |
188 | 188 | } |
189 | - throw new Exception($message); |
|
189 | + throw new Exception( $message ); |
|
190 | 190 | } |
191 | 191 | |
192 | 192 | return $result; |
@@ -206,9 +206,9 @@ discard block |
||
206 | 206 | * @return array|string|string[]|null |
207 | 207 | * @throws \Exception |
208 | 208 | */ |
209 | - public function replaceClassname($contents, $originalClassname, $classnamePrefix) |
|
209 | + public function replaceClassname( $contents, $originalClassname, $classnamePrefix ) |
|
210 | 210 | { |
211 | - $searchClassname = preg_quote($originalClassname, '/'); |
|
211 | + $searchClassname = preg_quote( $originalClassname, '/' ); |
|
212 | 212 | |
213 | 213 | // This could be more specific if we could enumerate all preceeding and proceeding words ("new", "("...). |
214 | 214 | $pattern = ' |
@@ -222,12 +222,12 @@ discard block |
||
222 | 222 | |
223 | 223 | /x'; // # x: ignore whitespace in regex. |
224 | 224 | |
225 | - $replacingFunction = function ($matches) use ($originalClassname, $classnamePrefix) { |
|
225 | + $replacingFunction = function( $matches ) use ( $originalClassname, $classnamePrefix ) { |
|
226 | 226 | |
227 | 227 | // If we're inside a namespace other than the global namespace: |
228 | - if (1 === preg_match('/^namespace\s+[a-zA-Z0-9_\x7f-\xff\\\\]+[;{\s\n]{1}.*/', $matches[0])) { |
|
228 | + if ( 1 === preg_match( '/^namespace\s+[a-zA-Z0-9_\x7f-\xff\\\\]+[;{\s\n]{1}.*/', $matches[ 0 ] ) ) { |
|
229 | 229 | $updated = $this->replaceGlobalClassInsideNamedNamespace( |
230 | - $matches[0], |
|
230 | + $matches[ 0 ], |
|
231 | 231 | $originalClassname, |
232 | 232 | $classnamePrefix |
233 | 233 | ); |
@@ -235,18 +235,18 @@ discard block |
||
235 | 235 | return $updated; |
236 | 236 | } |
237 | 237 | |
238 | - return $matches[1] . $matches[2] . $matches[3] . $classnamePrefix . $originalClassname . $matches[5]; |
|
238 | + return $matches[ 1 ] . $matches[ 2 ] . $matches[ 3 ] . $classnamePrefix . $originalClassname . $matches[ 5 ]; |
|
239 | 239 | }; |
240 | 240 | |
241 | - $result = preg_replace_callback($pattern, $replacingFunction, $contents); |
|
241 | + $result = preg_replace_callback( $pattern, $replacingFunction, $contents ); |
|
242 | 242 | |
243 | 243 | $matchingError = preg_last_error(); |
244 | - if (0 !== $matchingError) { |
|
244 | + if ( 0 !== $matchingError ) { |
|
245 | 245 | $message = "Matching error {$matchingError}"; |
246 | - if (PREG_BACKTRACK_LIMIT_ERROR === $matchingError) { |
|
246 | + if ( PREG_BACKTRACK_LIMIT_ERROR === $matchingError ) { |
|
247 | 247 | $message = 'Backtrack limit was exhausted!'; |
248 | 248 | } |
249 | - throw new Exception($message); |
|
249 | + throw new Exception( $message ); |
|
250 | 250 | } |
251 | 251 | |
252 | 252 | return $result; |
@@ -260,17 +260,17 @@ discard block |
||
260 | 260 | * @param string $classnamePrefix |
261 | 261 | * @return string |
262 | 262 | */ |
263 | - protected function replaceGlobalClassInsideNamedNamespace($contents, $originalClassname, $classnamePrefix): string |
|
263 | + protected function replaceGlobalClassInsideNamedNamespace( $contents, $originalClassname, $classnamePrefix ): string |
|
264 | 264 | { |
265 | 265 | |
266 | 266 | return preg_replace_callback( |
267 | 267 | '/([^a-zA-Z0-9_\x7f-\xff] # Not a class character |
268 | 268 | \\\) # Followed by a backslash to indicate global namespace |
269 | - ('.$originalClassname.') # Followed by the classname |
|
269 | + ('.$originalClassname . ') # Followed by the classname |
|
270 | 270 | ([^\\\;]+) # Not a backslash or semicolon which might indicate a namespace |
271 | 271 | /x', // # x: ignore whitespace in regex. |
272 | - function ($matches) use ($originalClassname, $classnamePrefix) { |
|
273 | - return $matches[1] . $classnamePrefix . $originalClassname . $matches[3]; |
|
272 | + function( $matches ) use ( $originalClassname, $classnamePrefix ) { |
|
273 | + return $matches[ 1 ] . $classnamePrefix . $originalClassname . $matches[ 3 ]; |
|
274 | 274 | }, |
275 | 275 | $contents |
276 | 276 | ); |
@@ -9,8 +9,7 @@ discard block |
||
9 | 9 | use League\Flysystem\FileNotFoundException; |
10 | 10 | use League\Flysystem\Filesystem; |
11 | 11 | |
12 | -class Prefixer |
|
13 | -{ |
|
12 | +class Prefixer { |
|
14 | 13 | /** @var StraussConfig */ |
15 | 14 | protected $config; |
16 | 15 | |
@@ -28,8 +27,7 @@ discard block |
||
28 | 27 | /** @var array<string, ComposerPackage> */ |
29 | 28 | protected array $changedFiles = array(); |
30 | 29 | |
31 | - public function __construct(StraussConfig $config, string $workingDir) |
|
32 | - { |
|
30 | + public function __construct(StraussConfig $config, string $workingDir) { |
|
33 | 31 | $this->filesystem = new Filesystem(new Local($workingDir)); |
34 | 32 | |
35 | 33 | $this->targetDirectory = $config->getTargetDirectory(); |
@@ -51,8 +49,7 @@ discard block |
||
51 | 49 | * @param array<string, ComposerPackage> $phpFileList |
52 | 50 | * @throws FileNotFoundException |
53 | 51 | */ |
54 | - public function replaceInFiles(array $namespaceChanges, array $classChanges, array $phpFileList) |
|
55 | - { |
|
52 | + public function replaceInFiles(array $namespaceChanges, array $classChanges, array $phpFileList) { |
|
56 | 53 | |
57 | 54 | foreach ($phpFileList as $sourceRelativeFilePathFromVendor => $package) { |
58 | 55 | // Skip excluded namespaces. |
@@ -109,8 +106,7 @@ discard block |
||
109 | 106 | * |
110 | 107 | * @return string The updated text. |
111 | 108 | */ |
112 | - public function replaceNamespace($contents, $originalNamespace, $replacement) |
|
113 | - { |
|
109 | + public function replaceNamespace($contents, $originalNamespace, $replacement) { |
|
114 | 110 | |
115 | 111 | // When namespaces exist inside strings... |
116 | 112 | $searchNamespace = |
@@ -206,8 +202,7 @@ discard block |
||
206 | 202 | * @return array|string|string[]|null |
207 | 203 | * @throws \Exception |
208 | 204 | */ |
209 | - public function replaceClassname($contents, $originalClassname, $classnamePrefix) |
|
210 | - { |
|
205 | + public function replaceClassname($contents, $originalClassname, $classnamePrefix) { |
|
211 | 206 | $searchClassname = preg_quote($originalClassname, '/'); |
212 | 207 | |
213 | 208 | // This could be more specific if we could enumerate all preceeding and proceeding words ("new", "("...). |
@@ -13,128 +13,128 @@ discard block |
||
13 | 13 | class ChangeEnumerator |
14 | 14 | { |
15 | 15 | |
16 | - protected string $namespacePrefix; |
|
17 | - protected string $classmapPrefix; |
|
18 | - /** |
|
19 | - * |
|
20 | - * @var string[] |
|
21 | - */ |
|
22 | - protected array $excludePackagesFromPrefixing = array(); |
|
23 | - protected array $excludeNamespacesFromPrefixing = array(); |
|
24 | - |
|
25 | - protected array $excludeFilePatternsFromPrefixing = array(); |
|
26 | - |
|
27 | - protected array $namespaceReplacementPatterns = array(); |
|
28 | - |
|
29 | - /** @var string[] */ |
|
30 | - protected array $discoveredNamespaces = []; |
|
31 | - |
|
32 | - /** @var string[] */ |
|
33 | - protected array $discoveredClasses = []; |
|
34 | - |
|
35 | - |
|
36 | - /** |
|
37 | - * ChangeEnumerator constructor. |
|
38 | - * @param \BrianHenryIE\Strauss\Composer\Extra\StraussConfig $config |
|
39 | - */ |
|
40 | - public function __construct(StraussConfig $config) |
|
41 | - { |
|
42 | - $this->namespacePrefix = $config->getNamespacePrefix(); |
|
43 | - $this->classmapPrefix = $config->getClassmapPrefix(); |
|
44 | - |
|
45 | - $this->excludePackagesFromPrefixing = $config->getExcludePackagesFromPrefixing(); |
|
46 | - $this->excludeNamespacesFromPrefixing = $config->getExcludeNamespacesFromPrefixing(); |
|
47 | - $this->excludeFilePatternsFromPrefixing = $config->getExcludeFilePatternsFromPrefixing(); |
|
48 | - |
|
49 | - $this->namespaceReplacementPatterns = $config->getNamespaceReplacementPatterns(); |
|
50 | - } |
|
51 | - |
|
52 | - /** |
|
53 | - * TODO: Order by longest string first. (or instead, record classnames with their namespaces) |
|
54 | - * |
|
55 | - * @return string[] |
|
56 | - */ |
|
57 | - public function getDiscoveredNamespaceReplacements(): array |
|
58 | - { |
|
59 | - $discoveredNamespaceReplacements = $this->discoveredNamespaces; |
|
60 | - |
|
61 | - uksort($discoveredNamespaceReplacements, function ($a, $b) { |
|
62 | - return strlen($b) <=> strlen($a); |
|
63 | - }); |
|
64 | - |
|
65 | - return $discoveredNamespaceReplacements; |
|
66 | - } |
|
67 | - |
|
68 | - /** |
|
69 | - * @return string[] |
|
70 | - */ |
|
71 | - public function getDiscoveredClasses(): array |
|
72 | - { |
|
73 | - return array_keys($this->discoveredClasses); |
|
74 | - } |
|
75 | - |
|
76 | - |
|
77 | - /** |
|
78 | - * @param string $dir |
|
79 | - * @param array<string, ComposerPackage> $relativeFilepaths |
|
80 | - */ |
|
81 | - public function findInFiles($dir, $relativeFilepaths) |
|
82 | - { |
|
83 | - |
|
84 | - foreach ($relativeFilepaths as $relativeFilepath => $package) { |
|
85 | - foreach ($this->excludePackagesFromPrefixing as $excludePackagesName) { |
|
86 | - if ($package->getName() === $excludePackagesName) { |
|
87 | - continue 2; |
|
88 | - } |
|
89 | - } |
|
90 | - |
|
91 | - foreach ($this->excludeFilePatternsFromPrefixing as $excludeFilePattern) { |
|
92 | - if (1 === preg_match($excludeFilePattern, $relativeFilepath)) { |
|
93 | - continue 2; |
|
94 | - } |
|
95 | - } |
|
96 | - |
|
97 | - |
|
98 | - $filepath = $dir . $relativeFilepath; |
|
99 | - |
|
100 | - // TODO: use flysystem |
|
101 | - // $contents = $this->filesystem->read($targetFile); |
|
102 | - |
|
103 | - $contents = file_get_contents($filepath); |
|
104 | - |
|
105 | - $this->find($contents); |
|
106 | - } |
|
107 | - } |
|
108 | - |
|
109 | - |
|
110 | - /** |
|
111 | - * TODO: Don't use preg_replace_callback! |
|
112 | - * |
|
113 | - * @param string $contents |
|
114 | - * |
|
115 | - * @return string $contents |
|
116 | - */ |
|
117 | - public function find(string $contents): string |
|
118 | - { |
|
119 | - |
|
120 | - // If the entire file is under one namespace, all we want is the namespace. |
|
121 | - $singleNamespacePattern = '/ |
|
16 | + protected string $namespacePrefix; |
|
17 | + protected string $classmapPrefix; |
|
18 | + /** |
|
19 | + * |
|
20 | + * @var string[] |
|
21 | + */ |
|
22 | + protected array $excludePackagesFromPrefixing = array(); |
|
23 | + protected array $excludeNamespacesFromPrefixing = array(); |
|
24 | + |
|
25 | + protected array $excludeFilePatternsFromPrefixing = array(); |
|
26 | + |
|
27 | + protected array $namespaceReplacementPatterns = array(); |
|
28 | + |
|
29 | + /** @var string[] */ |
|
30 | + protected array $discoveredNamespaces = []; |
|
31 | + |
|
32 | + /** @var string[] */ |
|
33 | + protected array $discoveredClasses = []; |
|
34 | + |
|
35 | + |
|
36 | + /** |
|
37 | + * ChangeEnumerator constructor. |
|
38 | + * @param \BrianHenryIE\Strauss\Composer\Extra\StraussConfig $config |
|
39 | + */ |
|
40 | + public function __construct(StraussConfig $config) |
|
41 | + { |
|
42 | + $this->namespacePrefix = $config->getNamespacePrefix(); |
|
43 | + $this->classmapPrefix = $config->getClassmapPrefix(); |
|
44 | + |
|
45 | + $this->excludePackagesFromPrefixing = $config->getExcludePackagesFromPrefixing(); |
|
46 | + $this->excludeNamespacesFromPrefixing = $config->getExcludeNamespacesFromPrefixing(); |
|
47 | + $this->excludeFilePatternsFromPrefixing = $config->getExcludeFilePatternsFromPrefixing(); |
|
48 | + |
|
49 | + $this->namespaceReplacementPatterns = $config->getNamespaceReplacementPatterns(); |
|
50 | + } |
|
51 | + |
|
52 | + /** |
|
53 | + * TODO: Order by longest string first. (or instead, record classnames with their namespaces) |
|
54 | + * |
|
55 | + * @return string[] |
|
56 | + */ |
|
57 | + public function getDiscoveredNamespaceReplacements(): array |
|
58 | + { |
|
59 | + $discoveredNamespaceReplacements = $this->discoveredNamespaces; |
|
60 | + |
|
61 | + uksort($discoveredNamespaceReplacements, function ($a, $b) { |
|
62 | + return strlen($b) <=> strlen($a); |
|
63 | + }); |
|
64 | + |
|
65 | + return $discoveredNamespaceReplacements; |
|
66 | + } |
|
67 | + |
|
68 | + /** |
|
69 | + * @return string[] |
|
70 | + */ |
|
71 | + public function getDiscoveredClasses(): array |
|
72 | + { |
|
73 | + return array_keys($this->discoveredClasses); |
|
74 | + } |
|
75 | + |
|
76 | + |
|
77 | + /** |
|
78 | + * @param string $dir |
|
79 | + * @param array<string, ComposerPackage> $relativeFilepaths |
|
80 | + */ |
|
81 | + public function findInFiles($dir, $relativeFilepaths) |
|
82 | + { |
|
83 | + |
|
84 | + foreach ($relativeFilepaths as $relativeFilepath => $package) { |
|
85 | + foreach ($this->excludePackagesFromPrefixing as $excludePackagesName) { |
|
86 | + if ($package->getName() === $excludePackagesName) { |
|
87 | + continue 2; |
|
88 | + } |
|
89 | + } |
|
90 | + |
|
91 | + foreach ($this->excludeFilePatternsFromPrefixing as $excludeFilePattern) { |
|
92 | + if (1 === preg_match($excludeFilePattern, $relativeFilepath)) { |
|
93 | + continue 2; |
|
94 | + } |
|
95 | + } |
|
96 | + |
|
97 | + |
|
98 | + $filepath = $dir . $relativeFilepath; |
|
99 | + |
|
100 | + // TODO: use flysystem |
|
101 | + // $contents = $this->filesystem->read($targetFile); |
|
102 | + |
|
103 | + $contents = file_get_contents($filepath); |
|
104 | + |
|
105 | + $this->find($contents); |
|
106 | + } |
|
107 | + } |
|
108 | + |
|
109 | + |
|
110 | + /** |
|
111 | + * TODO: Don't use preg_replace_callback! |
|
112 | + * |
|
113 | + * @param string $contents |
|
114 | + * |
|
115 | + * @return string $contents |
|
116 | + */ |
|
117 | + public function find(string $contents): string |
|
118 | + { |
|
119 | + |
|
120 | + // If the entire file is under one namespace, all we want is the namespace. |
|
121 | + $singleNamespacePattern = '/ |
|
122 | 122 | namespace\s+([0-9A-Za-z_\x7f-\xff\\\\]+)[\s\S]*; # A single namespace in the file.... should return |
123 | 123 | /x'; |
124 | - if (1 === preg_match($singleNamespacePattern, $contents, $matches)) { |
|
125 | - $this->addDiscoveredNamespaceChange($matches[1]); |
|
126 | - return $contents; |
|
127 | - } |
|
124 | + if (1 === preg_match($singleNamespacePattern, $contents, $matches)) { |
|
125 | + $this->addDiscoveredNamespaceChange($matches[1]); |
|
126 | + return $contents; |
|
127 | + } |
|
128 | 128 | |
129 | 129 | |
130 | - // TODO traits |
|
130 | + // TODO traits |
|
131 | 131 | |
132 | - // TODO: Is the ";" in this still correct since it's being taken care of in the regex just above? |
|
133 | - // Looks like with the preceeding regex, it will never match. |
|
132 | + // TODO: Is the ";" in this still correct since it's being taken care of in the regex just above? |
|
133 | + // Looks like with the preceeding regex, it will never match. |
|
134 | 134 | |
135 | 135 | |
136 | - return preg_replace_callback( |
|
137 | - ' |
|
136 | + return preg_replace_callback( |
|
137 | + ' |
|
138 | 138 | ~ # Start the pattern |
139 | 139 | namespace\s+([a-zA-Z0-9_\x7f-\xff\\\\]+)[;{\s\n]{1}[\s\S]*?(?=namespace|$) |
140 | 140 | # Look for a preceeding namespace declaration, |
@@ -152,44 +152,44 @@ discard block |
||
152 | 152 | (?:{|extends|implements|\n|$) # Class declaration can be followed by {, extends, implements |
153 | 153 | # or a new line |
154 | 154 | ~x', // # x: ignore whitespace in regex. |
155 | - function ($matches) { |
|
156 | - |
|
157 | - // If we're inside a namespace other than the global namespace: |
|
158 | - if (1 === preg_match('/^namespace\s+[a-zA-Z0-9_\x7f-\xff\\\\]+[;{\s\n]{1}.*/', $matches[0])) { |
|
159 | - $this->addDiscoveredNamespaceChange($matches[1]); |
|
160 | - return $matches[0]; |
|
161 | - } |
|
162 | - |
|
163 | - if (count($matches) < 3) { |
|
164 | - return $matches[0]; |
|
165 | - } |
|
166 | - |
|
167 | - // TODO: Why is this [2] and not [1] (which seems to be always empty). |
|
168 | - $this->discoveredClasses[$matches[2]] = $matches[2]; |
|
169 | - return $matches[0]; |
|
170 | - }, |
|
171 | - $contents |
|
172 | - ); |
|
173 | - } |
|
174 | - |
|
175 | - protected function addDiscoveredNamespaceChange(string $namespace) |
|
176 | - { |
|
177 | - |
|
178 | - foreach ($this->excludeNamespacesFromPrefixing as $excludeNamespace) { |
|
179 | - if (0 === strpos($namespace, $excludeNamespace)) { |
|
180 | - return; |
|
181 | - } |
|
182 | - } |
|
183 | - |
|
184 | - foreach ($this->namespaceReplacementPatterns as $namespaceReplacementPattern => $replacement) { |
|
185 | - $prefixed = preg_replace($namespaceReplacementPattern, $replacement, $namespace); |
|
186 | - |
|
187 | - if ($prefixed !== $namespace) { |
|
188 | - $this->discoveredNamespaces[$namespace] = $prefixed; |
|
189 | - return; |
|
190 | - } |
|
191 | - } |
|
192 | - |
|
193 | - $this->discoveredNamespaces[$namespace] = $this->namespacePrefix . '\\'. $namespace; |
|
194 | - } |
|
155 | + function ($matches) { |
|
156 | + |
|
157 | + // If we're inside a namespace other than the global namespace: |
|
158 | + if (1 === preg_match('/^namespace\s+[a-zA-Z0-9_\x7f-\xff\\\\]+[;{\s\n]{1}.*/', $matches[0])) { |
|
159 | + $this->addDiscoveredNamespaceChange($matches[1]); |
|
160 | + return $matches[0]; |
|
161 | + } |
|
162 | + |
|
163 | + if (count($matches) < 3) { |
|
164 | + return $matches[0]; |
|
165 | + } |
|
166 | + |
|
167 | + // TODO: Why is this [2] and not [1] (which seems to be always empty). |
|
168 | + $this->discoveredClasses[$matches[2]] = $matches[2]; |
|
169 | + return $matches[0]; |
|
170 | + }, |
|
171 | + $contents |
|
172 | + ); |
|
173 | + } |
|
174 | + |
|
175 | + protected function addDiscoveredNamespaceChange(string $namespace) |
|
176 | + { |
|
177 | + |
|
178 | + foreach ($this->excludeNamespacesFromPrefixing as $excludeNamespace) { |
|
179 | + if (0 === strpos($namespace, $excludeNamespace)) { |
|
180 | + return; |
|
181 | + } |
|
182 | + } |
|
183 | + |
|
184 | + foreach ($this->namespaceReplacementPatterns as $namespaceReplacementPattern => $replacement) { |
|
185 | + $prefixed = preg_replace($namespaceReplacementPattern, $replacement, $namespace); |
|
186 | + |
|
187 | + if ($prefixed !== $namespace) { |
|
188 | + $this->discoveredNamespaces[$namespace] = $prefixed; |
|
189 | + return; |
|
190 | + } |
|
191 | + } |
|
192 | + |
|
193 | + $this->discoveredNamespaces[$namespace] = $this->namespacePrefix . '\\'. $namespace; |
|
194 | + } |
|
195 | 195 | } |
@@ -27,17 +27,17 @@ discard block |
||
27 | 27 | protected array $namespaceReplacementPatterns = array(); |
28 | 28 | |
29 | 29 | /** @var string[] */ |
30 | - protected array $discoveredNamespaces = []; |
|
30 | + protected array $discoveredNamespaces = [ ]; |
|
31 | 31 | |
32 | 32 | /** @var string[] */ |
33 | - protected array $discoveredClasses = []; |
|
33 | + protected array $discoveredClasses = [ ]; |
|
34 | 34 | |
35 | 35 | |
36 | 36 | /** |
37 | 37 | * ChangeEnumerator constructor. |
38 | 38 | * @param \BrianHenryIE\Strauss\Composer\Extra\StraussConfig $config |
39 | 39 | */ |
40 | - public function __construct(StraussConfig $config) |
|
40 | + public function __construct( StraussConfig $config ) |
|
41 | 41 | { |
42 | 42 | $this->namespacePrefix = $config->getNamespacePrefix(); |
43 | 43 | $this->classmapPrefix = $config->getClassmapPrefix(); |
@@ -58,8 +58,8 @@ discard block |
||
58 | 58 | { |
59 | 59 | $discoveredNamespaceReplacements = $this->discoveredNamespaces; |
60 | 60 | |
61 | - uksort($discoveredNamespaceReplacements, function ($a, $b) { |
|
62 | - return strlen($b) <=> strlen($a); |
|
61 | + uksort( $discoveredNamespaceReplacements, function( $a, $b ) { |
|
62 | + return strlen( $b ) <=> strlen( $a ); |
|
63 | 63 | }); |
64 | 64 | |
65 | 65 | return $discoveredNamespaceReplacements; |
@@ -70,7 +70,7 @@ discard block |
||
70 | 70 | */ |
71 | 71 | public function getDiscoveredClasses(): array |
72 | 72 | { |
73 | - return array_keys($this->discoveredClasses); |
|
73 | + return array_keys( $this->discoveredClasses ); |
|
74 | 74 | } |
75 | 75 | |
76 | 76 | |
@@ -78,18 +78,18 @@ discard block |
||
78 | 78 | * @param string $dir |
79 | 79 | * @param array<string, ComposerPackage> $relativeFilepaths |
80 | 80 | */ |
81 | - public function findInFiles($dir, $relativeFilepaths) |
|
81 | + public function findInFiles( $dir, $relativeFilepaths ) |
|
82 | 82 | { |
83 | 83 | |
84 | - foreach ($relativeFilepaths as $relativeFilepath => $package) { |
|
85 | - foreach ($this->excludePackagesFromPrefixing as $excludePackagesName) { |
|
86 | - if ($package->getName() === $excludePackagesName) { |
|
84 | + foreach ( $relativeFilepaths as $relativeFilepath => $package ) { |
|
85 | + foreach ( $this->excludePackagesFromPrefixing as $excludePackagesName ) { |
|
86 | + if ( $package->getName() === $excludePackagesName ) { |
|
87 | 87 | continue 2; |
88 | 88 | } |
89 | 89 | } |
90 | 90 | |
91 | - foreach ($this->excludeFilePatternsFromPrefixing as $excludeFilePattern) { |
|
92 | - if (1 === preg_match($excludeFilePattern, $relativeFilepath)) { |
|
91 | + foreach ( $this->excludeFilePatternsFromPrefixing as $excludeFilePattern ) { |
|
92 | + if ( 1 === preg_match( $excludeFilePattern, $relativeFilepath ) ) { |
|
93 | 93 | continue 2; |
94 | 94 | } |
95 | 95 | } |
@@ -100,9 +100,9 @@ discard block |
||
100 | 100 | // TODO: use flysystem |
101 | 101 | // $contents = $this->filesystem->read($targetFile); |
102 | 102 | |
103 | - $contents = file_get_contents($filepath); |
|
103 | + $contents = file_get_contents( $filepath ); |
|
104 | 104 | |
105 | - $this->find($contents); |
|
105 | + $this->find( $contents ); |
|
106 | 106 | } |
107 | 107 | } |
108 | 108 | |
@@ -114,15 +114,15 @@ discard block |
||
114 | 114 | * |
115 | 115 | * @return string $contents |
116 | 116 | */ |
117 | - public function find(string $contents): string |
|
117 | + public function find( string $contents ): string |
|
118 | 118 | { |
119 | 119 | |
120 | 120 | // If the entire file is under one namespace, all we want is the namespace. |
121 | 121 | $singleNamespacePattern = '/ |
122 | 122 | namespace\s+([0-9A-Za-z_\x7f-\xff\\\\]+)[\s\S]*; # A single namespace in the file.... should return |
123 | 123 | /x'; |
124 | - if (1 === preg_match($singleNamespacePattern, $contents, $matches)) { |
|
125 | - $this->addDiscoveredNamespaceChange($matches[1]); |
|
124 | + if ( 1 === preg_match( $singleNamespacePattern, $contents, $matches ) ) { |
|
125 | + $this->addDiscoveredNamespaceChange( $matches[ 1 ] ); |
|
126 | 126 | return $contents; |
127 | 127 | } |
128 | 128 | |
@@ -152,44 +152,44 @@ discard block |
||
152 | 152 | (?:{|extends|implements|\n|$) # Class declaration can be followed by {, extends, implements |
153 | 153 | # or a new line |
154 | 154 | ~x', // # x: ignore whitespace in regex. |
155 | - function ($matches) { |
|
155 | + function( $matches ) { |
|
156 | 156 | |
157 | 157 | // If we're inside a namespace other than the global namespace: |
158 | - if (1 === preg_match('/^namespace\s+[a-zA-Z0-9_\x7f-\xff\\\\]+[;{\s\n]{1}.*/', $matches[0])) { |
|
159 | - $this->addDiscoveredNamespaceChange($matches[1]); |
|
160 | - return $matches[0]; |
|
158 | + if ( 1 === preg_match( '/^namespace\s+[a-zA-Z0-9_\x7f-\xff\\\\]+[;{\s\n]{1}.*/', $matches[ 0 ] ) ) { |
|
159 | + $this->addDiscoveredNamespaceChange( $matches[ 1 ] ); |
|
160 | + return $matches[ 0 ]; |
|
161 | 161 | } |
162 | 162 | |
163 | - if (count($matches) < 3) { |
|
164 | - return $matches[0]; |
|
163 | + if ( count( $matches ) < 3 ) { |
|
164 | + return $matches[ 0 ]; |
|
165 | 165 | } |
166 | 166 | |
167 | 167 | // TODO: Why is this [2] and not [1] (which seems to be always empty). |
168 | - $this->discoveredClasses[$matches[2]] = $matches[2]; |
|
169 | - return $matches[0]; |
|
168 | + $this->discoveredClasses[ $matches[ 2 ] ] = $matches[ 2 ]; |
|
169 | + return $matches[ 0 ]; |
|
170 | 170 | }, |
171 | 171 | $contents |
172 | 172 | ); |
173 | 173 | } |
174 | 174 | |
175 | - protected function addDiscoveredNamespaceChange(string $namespace) |
|
175 | + protected function addDiscoveredNamespaceChange( string $namespace ) |
|
176 | 176 | { |
177 | 177 | |
178 | - foreach ($this->excludeNamespacesFromPrefixing as $excludeNamespace) { |
|
179 | - if (0 === strpos($namespace, $excludeNamespace)) { |
|
178 | + foreach ( $this->excludeNamespacesFromPrefixing as $excludeNamespace ) { |
|
179 | + if ( 0 === strpos( $namespace, $excludeNamespace ) ) { |
|
180 | 180 | return; |
181 | 181 | } |
182 | 182 | } |
183 | 183 | |
184 | - foreach ($this->namespaceReplacementPatterns as $namespaceReplacementPattern => $replacement) { |
|
185 | - $prefixed = preg_replace($namespaceReplacementPattern, $replacement, $namespace); |
|
184 | + foreach ( $this->namespaceReplacementPatterns as $namespaceReplacementPattern => $replacement ) { |
|
185 | + $prefixed = preg_replace( $namespaceReplacementPattern, $replacement, $namespace ); |
|
186 | 186 | |
187 | - if ($prefixed !== $namespace) { |
|
188 | - $this->discoveredNamespaces[$namespace] = $prefixed; |
|
187 | + if ( $prefixed !== $namespace ) { |
|
188 | + $this->discoveredNamespaces[ $namespace ] = $prefixed; |
|
189 | 189 | return; |
190 | 190 | } |
191 | 191 | } |
192 | 192 | |
193 | - $this->discoveredNamespaces[$namespace] = $this->namespacePrefix . '\\'. $namespace; |
|
193 | + $this->discoveredNamespaces[ $namespace ] = $this->namespacePrefix . '\\' . $namespace; |
|
194 | 194 | } |
195 | 195 | } |
@@ -10,8 +10,7 @@ discard block |
||
10 | 10 | use BrianHenryIE\Strauss\Composer\ComposerPackage; |
11 | 11 | use BrianHenryIE\Strauss\Composer\Extra\StraussConfig; |
12 | 12 | |
13 | -class ChangeEnumerator |
|
14 | -{ |
|
13 | +class ChangeEnumerator { |
|
15 | 14 | |
16 | 15 | protected string $namespacePrefix; |
17 | 16 | protected string $classmapPrefix; |
@@ -37,8 +36,7 @@ discard block |
||
37 | 36 | * ChangeEnumerator constructor. |
38 | 37 | * @param \BrianHenryIE\Strauss\Composer\Extra\StraussConfig $config |
39 | 38 | */ |
40 | - public function __construct(StraussConfig $config) |
|
41 | - { |
|
39 | + public function __construct(StraussConfig $config) { |
|
42 | 40 | $this->namespacePrefix = $config->getNamespacePrefix(); |
43 | 41 | $this->classmapPrefix = $config->getClassmapPrefix(); |
44 | 42 | |
@@ -78,8 +76,7 @@ discard block |
||
78 | 76 | * @param string $dir |
79 | 77 | * @param array<string, ComposerPackage> $relativeFilepaths |
80 | 78 | */ |
81 | - public function findInFiles($dir, $relativeFilepaths) |
|
82 | - { |
|
79 | + public function findInFiles($dir, $relativeFilepaths) { |
|
83 | 80 | |
84 | 81 | foreach ($relativeFilepaths as $relativeFilepath => $package) { |
85 | 82 | foreach ($this->excludePackagesFromPrefixing as $excludePackagesName) { |
@@ -172,8 +169,7 @@ discard block |
||
172 | 169 | ); |
173 | 170 | } |
174 | 171 | |
175 | - protected function addDiscoveredNamespaceChange(string $namespace) |
|
176 | - { |
|
172 | + protected function addDiscoveredNamespaceChange(string $namespace) { |
|
177 | 173 | |
178 | 174 | foreach ($this->excludeNamespacesFromPrefixing as $excludeNamespace) { |
179 | 175 | if (0 === strpos($namespace, $excludeNamespace)) { |
@@ -19,259 +19,259 @@ |
||
19 | 19 | |
20 | 20 | class Compose extends Command |
21 | 21 | { |
22 | - /** @var string */ |
|
23 | - protected string $workingDir; |
|
22 | + /** @var string */ |
|
23 | + protected string $workingDir; |
|
24 | 24 | |
25 | - /** @var StraussConfig */ |
|
26 | - protected StraussConfig $config; |
|
25 | + /** @var StraussConfig */ |
|
26 | + protected StraussConfig $config; |
|
27 | 27 | |
28 | - protected ProjectComposerPackage $projectComposerPackage; |
|
28 | + protected ProjectComposerPackage $projectComposerPackage; |
|
29 | 29 | |
30 | - /** @var Copier */ |
|
31 | - protected Copier $copier; |
|
30 | + /** @var Copier */ |
|
31 | + protected Copier $copier; |
|
32 | 32 | |
33 | - /** @var Prefixer */ |
|
34 | - protected Prefixer $replacer; |
|
35 | - /** |
|
36 | - * @var ChangeEnumerator |
|
37 | - */ |
|
38 | - protected ChangeEnumerator $changeEnumerator; |
|
33 | + /** @var Prefixer */ |
|
34 | + protected Prefixer $replacer; |
|
35 | + /** |
|
36 | + * @var ChangeEnumerator |
|
37 | + */ |
|
38 | + protected ChangeEnumerator $changeEnumerator; |
|
39 | 39 | |
40 | 40 | |
41 | - /** |
|
42 | - * @return void |
|
43 | - */ |
|
44 | - protected function configure() |
|
45 | - { |
|
46 | - $this->setName('compose'); |
|
47 | - $this->setDescription("Copy composer's `require` and prefix their namespace and classnames."); |
|
48 | - $this->setHelp(''); |
|
49 | - } |
|
41 | + /** |
|
42 | + * @return void |
|
43 | + */ |
|
44 | + protected function configure() |
|
45 | + { |
|
46 | + $this->setName('compose'); |
|
47 | + $this->setDescription("Copy composer's `require` and prefix their namespace and classnames."); |
|
48 | + $this->setHelp(''); |
|
49 | + } |
|
50 | 50 | |
51 | - /** |
|
52 | - * @see Command::execute() |
|
53 | - * |
|
54 | - * @param InputInterface $input |
|
55 | - * @param OutputInterface $output |
|
56 | - * @return int |
|
57 | - */ |
|
58 | - protected function execute(InputInterface $input, OutputInterface $output): int |
|
59 | - { |
|
60 | - $workingDir = getcwd() . DIRECTORY_SEPARATOR; |
|
61 | - $this->workingDir = $workingDir; |
|
51 | + /** |
|
52 | + * @see Command::execute() |
|
53 | + * |
|
54 | + * @param InputInterface $input |
|
55 | + * @param OutputInterface $output |
|
56 | + * @return int |
|
57 | + */ |
|
58 | + protected function execute(InputInterface $input, OutputInterface $output): int |
|
59 | + { |
|
60 | + $workingDir = getcwd() . DIRECTORY_SEPARATOR; |
|
61 | + $this->workingDir = $workingDir; |
|
62 | 62 | |
63 | - try { |
|
64 | - $this->loadProjectComposerPackage(); |
|
63 | + try { |
|
64 | + $this->loadProjectComposerPackage(); |
|
65 | 65 | |
66 | - $this->buildDependencyList(); |
|
66 | + $this->buildDependencyList(); |
|
67 | 67 | |
68 | - $this->enumerateFiles(); |
|
68 | + $this->enumerateFiles(); |
|
69 | 69 | |
70 | - $this->copyFiles(); |
|
70 | + $this->copyFiles(); |
|
71 | 71 | |
72 | - $this->determineChanges(); |
|
72 | + $this->determineChanges(); |
|
73 | 73 | |
74 | - $this->performReplacements(); |
|
74 | + $this->performReplacements(); |
|
75 | 75 | |
76 | - $this->addLicenses(); |
|
77 | - |
|
78 | - $this->generateAutoloader(); |
|
76 | + $this->addLicenses(); |
|
77 | + |
|
78 | + $this->generateAutoloader(); |
|
79 | 79 | |
80 | - $this->cleanUp(); |
|
81 | - } catch (Exception $e) { |
|
82 | - $output->write($e->getMessage()); |
|
83 | - return 1; |
|
84 | - } |
|
80 | + $this->cleanUp(); |
|
81 | + } catch (Exception $e) { |
|
82 | + $output->write($e->getMessage()); |
|
83 | + return 1; |
|
84 | + } |
|
85 | 85 | |
86 | - // What should this be?! |
|
87 | - return 0; |
|
88 | - } |
|
86 | + // What should this be?! |
|
87 | + return 0; |
|
88 | + } |
|
89 | 89 | |
90 | 90 | |
91 | - /** |
|
92 | - * 1. Load the composer.json. |
|
93 | - * |
|
94 | - * @throws Exception |
|
95 | - */ |
|
96 | - protected function loadProjectComposerPackage() |
|
97 | - { |
|
91 | + /** |
|
92 | + * 1. Load the composer.json. |
|
93 | + * |
|
94 | + * @throws Exception |
|
95 | + */ |
|
96 | + protected function loadProjectComposerPackage() |
|
97 | + { |
|
98 | 98 | |
99 | - $this->projectComposerPackage = new ProjectComposerPackage($this->workingDir . 'composer.json'); |
|
99 | + $this->projectComposerPackage = new ProjectComposerPackage($this->workingDir . 'composer.json'); |
|
100 | 100 | |
101 | - $config = $this->projectComposerPackage->getStraussConfig(); |
|
101 | + $config = $this->projectComposerPackage->getStraussConfig(); |
|
102 | 102 | |
103 | - $this->config = $config; |
|
104 | - } |
|
103 | + $this->config = $config; |
|
104 | + } |
|
105 | 105 | |
106 | 106 | |
107 | - /** @var ComposerPackage[] */ |
|
108 | - protected array $flatDependencyTree = []; |
|
107 | + /** @var ComposerPackage[] */ |
|
108 | + protected array $flatDependencyTree = []; |
|
109 | 109 | |
110 | - /** |
|
111 | - * 2. Built flat list of packages and dependencies. |
|
112 | - * |
|
113 | - * 2.1 Initiate getting dependencies for the project composer.json. |
|
114 | - * |
|
115 | - * @see Compose::flatDependencyTree |
|
116 | - */ |
|
117 | - protected function buildDependencyList() |
|
118 | - { |
|
110 | + /** |
|
111 | + * 2. Built flat list of packages and dependencies. |
|
112 | + * |
|
113 | + * 2.1 Initiate getting dependencies for the project composer.json. |
|
114 | + * |
|
115 | + * @see Compose::flatDependencyTree |
|
116 | + */ |
|
117 | + protected function buildDependencyList() |
|
118 | + { |
|
119 | 119 | |
120 | - $requiredPackageNames = $this->config->getPackages(); |
|
120 | + $requiredPackageNames = $this->config->getPackages(); |
|
121 | 121 | |
122 | - // Unset PHP, ext-*. |
|
123 | - $removePhpExt = function ($element) { |
|
124 | - return !( 0 === strpos($element, 'ext') || 'php' === $element ); |
|
125 | - }; |
|
122 | + // Unset PHP, ext-*. |
|
123 | + $removePhpExt = function ($element) { |
|
124 | + return !( 0 === strpos($element, 'ext') || 'php' === $element ); |
|
125 | + }; |
|
126 | 126 | |
127 | - $requiredPackageNames = array_filter($requiredPackageNames, $removePhpExt); |
|
127 | + $requiredPackageNames = array_filter($requiredPackageNames, $removePhpExt); |
|
128 | 128 | |
129 | - foreach ($requiredPackageNames as $requiredPackageName) { |
|
130 | - $packageDir = $this->workingDir . 'vendor' .DIRECTORY_SEPARATOR |
|
131 | - . $requiredPackageName . DIRECTORY_SEPARATOR; |
|
129 | + foreach ($requiredPackageNames as $requiredPackageName) { |
|
130 | + $packageDir = $this->workingDir . 'vendor' .DIRECTORY_SEPARATOR |
|
131 | + . $requiredPackageName . DIRECTORY_SEPARATOR; |
|
132 | 132 | |
133 | - $overrideAutoload = isset($this->config->getOverrideAutoload()[$requiredPackageName]) |
|
134 | - ? $this->config->getOverrideAutoload()[$requiredPackageName] |
|
135 | - : null; |
|
133 | + $overrideAutoload = isset($this->config->getOverrideAutoload()[$requiredPackageName]) |
|
134 | + ? $this->config->getOverrideAutoload()[$requiredPackageName] |
|
135 | + : null; |
|
136 | 136 | |
137 | - $requiredComposerPackage = new ComposerPackage($packageDir, $overrideAutoload); |
|
138 | - $this->flatDependencyTree[$requiredComposerPackage->getName()] = $requiredComposerPackage; |
|
139 | - $this->getAllDependencies($requiredComposerPackage); |
|
140 | - } |
|
141 | - } |
|
142 | - |
|
143 | - /** |
|
144 | - * 2.2 Recursive function to get dependencies. |
|
145 | - * |
|
146 | - * @param ComposerPackage $requiredDependency |
|
147 | - */ |
|
148 | - protected function getAllDependencies(ComposerPackage $requiredDependency): void |
|
149 | - { |
|
150 | - $excludedPackagesNames = $this->config->getExcludePackagesFromPrefixing(); |
|
137 | + $requiredComposerPackage = new ComposerPackage($packageDir, $overrideAutoload); |
|
138 | + $this->flatDependencyTree[$requiredComposerPackage->getName()] = $requiredComposerPackage; |
|
139 | + $this->getAllDependencies($requiredComposerPackage); |
|
140 | + } |
|
141 | + } |
|
142 | + |
|
143 | + /** |
|
144 | + * 2.2 Recursive function to get dependencies. |
|
145 | + * |
|
146 | + * @param ComposerPackage $requiredDependency |
|
147 | + */ |
|
148 | + protected function getAllDependencies(ComposerPackage $requiredDependency): void |
|
149 | + { |
|
150 | + $excludedPackagesNames = $this->config->getExcludePackagesFromPrefixing(); |
|
151 | 151 | |
152 | - // Unset PHP, ext-*. |
|
153 | - $removePhpExt = function ($element) { |
|
154 | - return !( 0 === strpos($element, 'ext') || 'php' === $element ); |
|
155 | - }; |
|
152 | + // Unset PHP, ext-*. |
|
153 | + $removePhpExt = function ($element) { |
|
154 | + return !( 0 === strpos($element, 'ext') || 'php' === $element ); |
|
155 | + }; |
|
156 | 156 | |
157 | - $required = array_filter($requiredDependency->getRequiresNames(), $removePhpExt); |
|
157 | + $required = array_filter($requiredDependency->getRequiresNames(), $removePhpExt); |
|
158 | 158 | |
159 | - foreach ($required as $dependencyName) { |
|
160 | - if (in_array($dependencyName, $excludedPackagesNames)) { |
|
161 | - continue; |
|
162 | - } |
|
159 | + foreach ($required as $dependencyName) { |
|
160 | + if (in_array($dependencyName, $excludedPackagesNames)) { |
|
161 | + continue; |
|
162 | + } |
|
163 | 163 | |
164 | - $overrideAutoload = isset($this->config->getOverrideAutoload()[$dependencyName]) |
|
165 | - ? $this->config->getOverrideAutoload()[$dependencyName] |
|
166 | - : null; |
|
164 | + $overrideAutoload = isset($this->config->getOverrideAutoload()[$dependencyName]) |
|
165 | + ? $this->config->getOverrideAutoload()[$dependencyName] |
|
166 | + : null; |
|
167 | 167 | |
168 | - $dependencyComposerPackage = new ComposerPackage( |
|
169 | - $this->workingDir . 'vendor' . DIRECTORY_SEPARATOR |
|
170 | - . $dependencyName . DIRECTORY_SEPARATOR . 'composer.json', |
|
171 | - $overrideAutoload |
|
172 | - ); |
|
168 | + $dependencyComposerPackage = new ComposerPackage( |
|
169 | + $this->workingDir . 'vendor' . DIRECTORY_SEPARATOR |
|
170 | + . $dependencyName . DIRECTORY_SEPARATOR . 'composer.json', |
|
171 | + $overrideAutoload |
|
172 | + ); |
|
173 | 173 | |
174 | - $this->flatDependencyTree[$dependencyName] = $dependencyComposerPackage; |
|
175 | - $this->getAllDependencies($dependencyComposerPackage); |
|
176 | - } |
|
177 | - } |
|
178 | - |
|
179 | - protected FileEnumerator $fileEnumerator; |
|
180 | - |
|
181 | - protected function enumerateFiles() |
|
182 | - { |
|
183 | - |
|
184 | - $this->fileEnumerator = new FileEnumerator( |
|
185 | - $this->flatDependencyTree, |
|
186 | - $this->workingDir, |
|
187 | - $this->config |
|
188 | - ); |
|
174 | + $this->flatDependencyTree[$dependencyName] = $dependencyComposerPackage; |
|
175 | + $this->getAllDependencies($dependencyComposerPackage); |
|
176 | + } |
|
177 | + } |
|
178 | + |
|
179 | + protected FileEnumerator $fileEnumerator; |
|
180 | + |
|
181 | + protected function enumerateFiles() |
|
182 | + { |
|
183 | + |
|
184 | + $this->fileEnumerator = new FileEnumerator( |
|
185 | + $this->flatDependencyTree, |
|
186 | + $this->workingDir, |
|
187 | + $this->config |
|
188 | + ); |
|
189 | 189 | |
190 | - $this->fileEnumerator->compileFileList(); |
|
191 | - } |
|
192 | - |
|
193 | - // 3. Copy autoloaded files for each |
|
194 | - protected function copyFiles() |
|
195 | - { |
|
190 | + $this->fileEnumerator->compileFileList(); |
|
191 | + } |
|
192 | + |
|
193 | + // 3. Copy autoloaded files for each |
|
194 | + protected function copyFiles() |
|
195 | + { |
|
196 | 196 | |
197 | - $this->copier = new Copier( |
|
198 | - $this->fileEnumerator->getAllFilesAndDependencyList(), |
|
199 | - $this->workingDir, |
|
200 | - $this->config->getTargetDirectory() |
|
201 | - ); |
|
202 | - |
|
203 | - $this->copier->prepareTarget(); |
|
204 | - |
|
205 | - $this->copier->copy(); |
|
206 | - } |
|
207 | - |
|
208 | - // 4. Determine namespace and classname changes |
|
209 | - protected function determineChanges() |
|
210 | - { |
|
211 | - |
|
212 | - $this->changeEnumerator = new ChangeEnumerator($this->config); |
|
213 | - |
|
214 | - $relativeTargetDir = $this->config->getTargetDirectory(); |
|
215 | - $phpFiles = $this->fileEnumerator->getPhpFilesAndDependencyList(); |
|
216 | - $this->changeEnumerator->findInFiles($relativeTargetDir, $phpFiles); |
|
217 | - } |
|
218 | - |
|
219 | - // 5. Update namespaces and class names. |
|
220 | - // Replace references to updated namespaces and classnames throughout the dependencies. |
|
221 | - protected function performReplacements() |
|
222 | - { |
|
223 | - $this->replacer = new Prefixer($this->config, $this->workingDir); |
|
224 | - |
|
225 | - $namespaces = $this->changeEnumerator->getDiscoveredNamespaceReplacements(); |
|
226 | - $classes = $this->changeEnumerator->getDiscoveredClasses(); |
|
197 | + $this->copier = new Copier( |
|
198 | + $this->fileEnumerator->getAllFilesAndDependencyList(), |
|
199 | + $this->workingDir, |
|
200 | + $this->config->getTargetDirectory() |
|
201 | + ); |
|
202 | + |
|
203 | + $this->copier->prepareTarget(); |
|
204 | + |
|
205 | + $this->copier->copy(); |
|
206 | + } |
|
207 | + |
|
208 | + // 4. Determine namespace and classname changes |
|
209 | + protected function determineChanges() |
|
210 | + { |
|
211 | + |
|
212 | + $this->changeEnumerator = new ChangeEnumerator($this->config); |
|
213 | + |
|
214 | + $relativeTargetDir = $this->config->getTargetDirectory(); |
|
215 | + $phpFiles = $this->fileEnumerator->getPhpFilesAndDependencyList(); |
|
216 | + $this->changeEnumerator->findInFiles($relativeTargetDir, $phpFiles); |
|
217 | + } |
|
218 | + |
|
219 | + // 5. Update namespaces and class names. |
|
220 | + // Replace references to updated namespaces and classnames throughout the dependencies. |
|
221 | + protected function performReplacements() |
|
222 | + { |
|
223 | + $this->replacer = new Prefixer($this->config, $this->workingDir); |
|
224 | + |
|
225 | + $namespaces = $this->changeEnumerator->getDiscoveredNamespaceReplacements(); |
|
226 | + $classes = $this->changeEnumerator->getDiscoveredClasses(); |
|
227 | 227 | |
228 | - $phpFiles = $this->fileEnumerator->getPhpFilesAndDependencyList(); |
|
228 | + $phpFiles = $this->fileEnumerator->getPhpFilesAndDependencyList(); |
|
229 | 229 | |
230 | - $this->replacer->replaceInFiles($namespaces, $classes, $phpFiles); |
|
231 | - } |
|
230 | + $this->replacer->replaceInFiles($namespaces, $classes, $phpFiles); |
|
231 | + } |
|
232 | 232 | |
233 | - protected function addLicenses(): void |
|
234 | - { |
|
233 | + protected function addLicenses(): void |
|
234 | + { |
|
235 | 235 | |
236 | - $author = $this->projectComposerPackage->getAuthor(); |
|
236 | + $author = $this->projectComposerPackage->getAuthor(); |
|
237 | 237 | |
238 | - $dependencies = $this->flatDependencyTree; |
|
238 | + $dependencies = $this->flatDependencyTree; |
|
239 | 239 | |
240 | - $licenser = new Licenser($this->config, $this->workingDir, $dependencies, $author); |
|
240 | + $licenser = new Licenser($this->config, $this->workingDir, $dependencies, $author); |
|
241 | 241 | |
242 | - $licenser->copyLicenses(); |
|
242 | + $licenser->copyLicenses(); |
|
243 | 243 | |
244 | - $modifiedFiles = $this->replacer->getModifiedFiles(); |
|
245 | - $licenser->addInformationToUpdatedFiles($modifiedFiles); |
|
246 | - } |
|
244 | + $modifiedFiles = $this->replacer->getModifiedFiles(); |
|
245 | + $licenser->addInformationToUpdatedFiles($modifiedFiles); |
|
246 | + } |
|
247 | 247 | |
248 | - /** |
|
249 | - * 6. Generate autoloader. |
|
250 | - */ |
|
251 | - protected function generateAutoloader() |
|
252 | - { |
|
248 | + /** |
|
249 | + * 6. Generate autoloader. |
|
250 | + */ |
|
251 | + protected function generateAutoloader() |
|
252 | + { |
|
253 | 253 | |
254 | - $files = $this->fileEnumerator->getFilesAutoloaders(); |
|
254 | + $files = $this->fileEnumerator->getFilesAutoloaders(); |
|
255 | 255 | |
256 | - $classmap = new Autoload($this->config, $this->workingDir, $files); |
|
256 | + $classmap = new Autoload($this->config, $this->workingDir, $files); |
|
257 | 257 | |
258 | - $classmap->generate(); |
|
259 | - } |
|
258 | + $classmap->generate(); |
|
259 | + } |
|
260 | 260 | |
261 | 261 | |
262 | - /** |
|
263 | - * 7. |
|
264 | - * Delete source files if desired. |
|
265 | - * Delete empty directories in destination. |
|
266 | - */ |
|
267 | - protected function cleanUp() |
|
268 | - { |
|
262 | + /** |
|
263 | + * 7. |
|
264 | + * Delete source files if desired. |
|
265 | + * Delete empty directories in destination. |
|
266 | + */ |
|
267 | + protected function cleanUp() |
|
268 | + { |
|
269 | 269 | |
270 | - $cleanup = new Cleanup($this->config, $this->workingDir); |
|
270 | + $cleanup = new Cleanup($this->config, $this->workingDir); |
|
271 | 271 | |
272 | - $sourceFiles = array_keys($this->fileEnumerator->getAllFilesAndDependencyList()); |
|
272 | + $sourceFiles = array_keys($this->fileEnumerator->getAllFilesAndDependencyList()); |
|
273 | 273 | |
274 | - // This will check the config to check should it delete or not. |
|
275 | - $cleanup->cleanup($sourceFiles); |
|
276 | - } |
|
274 | + // This will check the config to check should it delete or not. |
|
275 | + $cleanup->cleanup($sourceFiles); |
|
276 | + } |
|
277 | 277 | } |
@@ -43,9 +43,9 @@ discard block |
||
43 | 43 | */ |
44 | 44 | protected function configure() |
45 | 45 | { |
46 | - $this->setName('compose'); |
|
47 | - $this->setDescription("Copy composer's `require` and prefix their namespace and classnames."); |
|
48 | - $this->setHelp(''); |
|
46 | + $this->setName( 'compose' ); |
|
47 | + $this->setDescription( "Copy composer's `require` and prefix their namespace and classnames." ); |
|
48 | + $this->setHelp( '' ); |
|
49 | 49 | } |
50 | 50 | |
51 | 51 | /** |
@@ -55,7 +55,7 @@ discard block |
||
55 | 55 | * @param OutputInterface $output |
56 | 56 | * @return int |
57 | 57 | */ |
58 | - protected function execute(InputInterface $input, OutputInterface $output): int |
|
58 | + protected function execute( InputInterface $input, OutputInterface $output ): int |
|
59 | 59 | { |
60 | 60 | $workingDir = getcwd() . DIRECTORY_SEPARATOR; |
61 | 61 | $this->workingDir = $workingDir; |
@@ -78,8 +78,8 @@ discard block |
||
78 | 78 | $this->generateAutoloader(); |
79 | 79 | |
80 | 80 | $this->cleanUp(); |
81 | - } catch (Exception $e) { |
|
82 | - $output->write($e->getMessage()); |
|
81 | + } catch ( Exception $e ) { |
|
82 | + $output->write( $e->getMessage() ); |
|
83 | 83 | return 1; |
84 | 84 | } |
85 | 85 | |
@@ -96,7 +96,7 @@ discard block |
||
96 | 96 | protected function loadProjectComposerPackage() |
97 | 97 | { |
98 | 98 | |
99 | - $this->projectComposerPackage = new ProjectComposerPackage($this->workingDir . 'composer.json'); |
|
99 | + $this->projectComposerPackage = new ProjectComposerPackage( $this->workingDir . 'composer.json' ); |
|
100 | 100 | |
101 | 101 | $config = $this->projectComposerPackage->getStraussConfig(); |
102 | 102 | |
@@ -105,7 +105,7 @@ discard block |
||
105 | 105 | |
106 | 106 | |
107 | 107 | /** @var ComposerPackage[] */ |
108 | - protected array $flatDependencyTree = []; |
|
108 | + protected array $flatDependencyTree = [ ]; |
|
109 | 109 | |
110 | 110 | /** |
111 | 111 | * 2. Built flat list of packages and dependencies. |
@@ -120,23 +120,23 @@ discard block |
||
120 | 120 | $requiredPackageNames = $this->config->getPackages(); |
121 | 121 | |
122 | 122 | // Unset PHP, ext-*. |
123 | - $removePhpExt = function ($element) { |
|
124 | - return !( 0 === strpos($element, 'ext') || 'php' === $element ); |
|
123 | + $removePhpExt = function( $element ) { |
|
124 | + return ! ( 0 === strpos( $element, 'ext' ) || 'php' === $element ); |
|
125 | 125 | }; |
126 | 126 | |
127 | - $requiredPackageNames = array_filter($requiredPackageNames, $removePhpExt); |
|
127 | + $requiredPackageNames = array_filter( $requiredPackageNames, $removePhpExt ); |
|
128 | 128 | |
129 | - foreach ($requiredPackageNames as $requiredPackageName) { |
|
130 | - $packageDir = $this->workingDir . 'vendor' .DIRECTORY_SEPARATOR |
|
129 | + foreach ( $requiredPackageNames as $requiredPackageName ) { |
|
130 | + $packageDir = $this->workingDir . 'vendor' . DIRECTORY_SEPARATOR |
|
131 | 131 | . $requiredPackageName . DIRECTORY_SEPARATOR; |
132 | 132 | |
133 | - $overrideAutoload = isset($this->config->getOverrideAutoload()[$requiredPackageName]) |
|
134 | - ? $this->config->getOverrideAutoload()[$requiredPackageName] |
|
133 | + $overrideAutoload = isset( $this->config->getOverrideAutoload()[ $requiredPackageName ] ) |
|
134 | + ? $this->config->getOverrideAutoload()[ $requiredPackageName ] |
|
135 | 135 | : null; |
136 | 136 | |
137 | - $requiredComposerPackage = new ComposerPackage($packageDir, $overrideAutoload); |
|
138 | - $this->flatDependencyTree[$requiredComposerPackage->getName()] = $requiredComposerPackage; |
|
139 | - $this->getAllDependencies($requiredComposerPackage); |
|
137 | + $requiredComposerPackage = new ComposerPackage( $packageDir, $overrideAutoload ); |
|
138 | + $this->flatDependencyTree[ $requiredComposerPackage->getName() ] = $requiredComposerPackage; |
|
139 | + $this->getAllDependencies( $requiredComposerPackage ); |
|
140 | 140 | } |
141 | 141 | } |
142 | 142 | |
@@ -145,24 +145,24 @@ discard block |
||
145 | 145 | * |
146 | 146 | * @param ComposerPackage $requiredDependency |
147 | 147 | */ |
148 | - protected function getAllDependencies(ComposerPackage $requiredDependency): void |
|
148 | + protected function getAllDependencies( ComposerPackage $requiredDependency ): void |
|
149 | 149 | { |
150 | 150 | $excludedPackagesNames = $this->config->getExcludePackagesFromPrefixing(); |
151 | 151 | |
152 | 152 | // Unset PHP, ext-*. |
153 | - $removePhpExt = function ($element) { |
|
154 | - return !( 0 === strpos($element, 'ext') || 'php' === $element ); |
|
153 | + $removePhpExt = function( $element ) { |
|
154 | + return ! ( 0 === strpos( $element, 'ext' ) || 'php' === $element ); |
|
155 | 155 | }; |
156 | 156 | |
157 | - $required = array_filter($requiredDependency->getRequiresNames(), $removePhpExt); |
|
157 | + $required = array_filter( $requiredDependency->getRequiresNames(), $removePhpExt ); |
|
158 | 158 | |
159 | - foreach ($required as $dependencyName) { |
|
160 | - if (in_array($dependencyName, $excludedPackagesNames)) { |
|
159 | + foreach ( $required as $dependencyName ) { |
|
160 | + if ( in_array( $dependencyName, $excludedPackagesNames ) ) { |
|
161 | 161 | continue; |
162 | 162 | } |
163 | 163 | |
164 | - $overrideAutoload = isset($this->config->getOverrideAutoload()[$dependencyName]) |
|
165 | - ? $this->config->getOverrideAutoload()[$dependencyName] |
|
164 | + $overrideAutoload = isset( $this->config->getOverrideAutoload()[ $dependencyName ] ) |
|
165 | + ? $this->config->getOverrideAutoload()[ $dependencyName ] |
|
166 | 166 | : null; |
167 | 167 | |
168 | 168 | $dependencyComposerPackage = new ComposerPackage( |
@@ -171,8 +171,8 @@ discard block |
||
171 | 171 | $overrideAutoload |
172 | 172 | ); |
173 | 173 | |
174 | - $this->flatDependencyTree[$dependencyName] = $dependencyComposerPackage; |
|
175 | - $this->getAllDependencies($dependencyComposerPackage); |
|
174 | + $this->flatDependencyTree[ $dependencyName ] = $dependencyComposerPackage; |
|
175 | + $this->getAllDependencies( $dependencyComposerPackage ); |
|
176 | 176 | } |
177 | 177 | } |
178 | 178 | |
@@ -209,25 +209,25 @@ discard block |
||
209 | 209 | protected function determineChanges() |
210 | 210 | { |
211 | 211 | |
212 | - $this->changeEnumerator = new ChangeEnumerator($this->config); |
|
212 | + $this->changeEnumerator = new ChangeEnumerator( $this->config ); |
|
213 | 213 | |
214 | 214 | $relativeTargetDir = $this->config->getTargetDirectory(); |
215 | 215 | $phpFiles = $this->fileEnumerator->getPhpFilesAndDependencyList(); |
216 | - $this->changeEnumerator->findInFiles($relativeTargetDir, $phpFiles); |
|
216 | + $this->changeEnumerator->findInFiles( $relativeTargetDir, $phpFiles ); |
|
217 | 217 | } |
218 | 218 | |
219 | 219 | // 5. Update namespaces and class names. |
220 | 220 | // Replace references to updated namespaces and classnames throughout the dependencies. |
221 | 221 | protected function performReplacements() |
222 | 222 | { |
223 | - $this->replacer = new Prefixer($this->config, $this->workingDir); |
|
223 | + $this->replacer = new Prefixer( $this->config, $this->workingDir ); |
|
224 | 224 | |
225 | 225 | $namespaces = $this->changeEnumerator->getDiscoveredNamespaceReplacements(); |
226 | 226 | $classes = $this->changeEnumerator->getDiscoveredClasses(); |
227 | 227 | |
228 | 228 | $phpFiles = $this->fileEnumerator->getPhpFilesAndDependencyList(); |
229 | 229 | |
230 | - $this->replacer->replaceInFiles($namespaces, $classes, $phpFiles); |
|
230 | + $this->replacer->replaceInFiles( $namespaces, $classes, $phpFiles ); |
|
231 | 231 | } |
232 | 232 | |
233 | 233 | protected function addLicenses(): void |
@@ -237,12 +237,12 @@ discard block |
||
237 | 237 | |
238 | 238 | $dependencies = $this->flatDependencyTree; |
239 | 239 | |
240 | - $licenser = new Licenser($this->config, $this->workingDir, $dependencies, $author); |
|
240 | + $licenser = new Licenser( $this->config, $this->workingDir, $dependencies, $author ); |
|
241 | 241 | |
242 | 242 | $licenser->copyLicenses(); |
243 | 243 | |
244 | 244 | $modifiedFiles = $this->replacer->getModifiedFiles(); |
245 | - $licenser->addInformationToUpdatedFiles($modifiedFiles); |
|
245 | + $licenser->addInformationToUpdatedFiles( $modifiedFiles ); |
|
246 | 246 | } |
247 | 247 | |
248 | 248 | /** |
@@ -253,7 +253,7 @@ discard block |
||
253 | 253 | |
254 | 254 | $files = $this->fileEnumerator->getFilesAutoloaders(); |
255 | 255 | |
256 | - $classmap = new Autoload($this->config, $this->workingDir, $files); |
|
256 | + $classmap = new Autoload( $this->config, $this->workingDir, $files ); |
|
257 | 257 | |
258 | 258 | $classmap->generate(); |
259 | 259 | } |
@@ -267,11 +267,11 @@ discard block |
||
267 | 267 | protected function cleanUp() |
268 | 268 | { |
269 | 269 | |
270 | - $cleanup = new Cleanup($this->config, $this->workingDir); |
|
270 | + $cleanup = new Cleanup( $this->config, $this->workingDir ); |
|
271 | 271 | |
272 | - $sourceFiles = array_keys($this->fileEnumerator->getAllFilesAndDependencyList()); |
|
272 | + $sourceFiles = array_keys( $this->fileEnumerator->getAllFilesAndDependencyList() ); |
|
273 | 273 | |
274 | 274 | // This will check the config to check should it delete or not. |
275 | - $cleanup->cleanup($sourceFiles); |
|
275 | + $cleanup->cleanup( $sourceFiles ); |
|
276 | 276 | } |
277 | 277 | } |
@@ -17,8 +17,7 @@ discard block |
||
17 | 17 | use Symfony\Component\Console\Input\InputInterface; |
18 | 18 | use Symfony\Component\Console\Output\OutputInterface; |
19 | 19 | |
20 | -class Compose extends Command |
|
21 | -{ |
|
20 | +class Compose extends Command { |
|
22 | 21 | /** @var string */ |
23 | 22 | protected string $workingDir; |
24 | 23 | |
@@ -41,8 +40,7 @@ discard block |
||
41 | 40 | /** |
42 | 41 | * @return void |
43 | 42 | */ |
44 | - protected function configure() |
|
45 | - { |
|
43 | + protected function configure() { |
|
46 | 44 | $this->setName('compose'); |
47 | 45 | $this->setDescription("Copy composer's `require` and prefix their namespace and classnames."); |
48 | 46 | $this->setHelp(''); |
@@ -93,8 +91,7 @@ discard block |
||
93 | 91 | * |
94 | 92 | * @throws Exception |
95 | 93 | */ |
96 | - protected function loadProjectComposerPackage() |
|
97 | - { |
|
94 | + protected function loadProjectComposerPackage() { |
|
98 | 95 | |
99 | 96 | $this->projectComposerPackage = new ProjectComposerPackage($this->workingDir . 'composer.json'); |
100 | 97 | |
@@ -114,8 +111,7 @@ discard block |
||
114 | 111 | * |
115 | 112 | * @see Compose::flatDependencyTree |
116 | 113 | */ |
117 | - protected function buildDependencyList() |
|
118 | - { |
|
114 | + protected function buildDependencyList() { |
|
119 | 115 | |
120 | 116 | $requiredPackageNames = $this->config->getPackages(); |
121 | 117 | |
@@ -178,8 +174,7 @@ discard block |
||
178 | 174 | |
179 | 175 | protected FileEnumerator $fileEnumerator; |
180 | 176 | |
181 | - protected function enumerateFiles() |
|
182 | - { |
|
177 | + protected function enumerateFiles() { |
|
183 | 178 | |
184 | 179 | $this->fileEnumerator = new FileEnumerator( |
185 | 180 | $this->flatDependencyTree, |
@@ -191,8 +186,7 @@ discard block |
||
191 | 186 | } |
192 | 187 | |
193 | 188 | // 3. Copy autoloaded files for each |
194 | - protected function copyFiles() |
|
195 | - { |
|
189 | + protected function copyFiles() { |
|
196 | 190 | |
197 | 191 | $this->copier = new Copier( |
198 | 192 | $this->fileEnumerator->getAllFilesAndDependencyList(), |
@@ -206,8 +200,7 @@ discard block |
||
206 | 200 | } |
207 | 201 | |
208 | 202 | // 4. Determine namespace and classname changes |
209 | - protected function determineChanges() |
|
210 | - { |
|
203 | + protected function determineChanges() { |
|
211 | 204 | |
212 | 205 | $this->changeEnumerator = new ChangeEnumerator($this->config); |
213 | 206 | |
@@ -218,8 +211,7 @@ discard block |
||
218 | 211 | |
219 | 212 | // 5. Update namespaces and class names. |
220 | 213 | // Replace references to updated namespaces and classnames throughout the dependencies. |
221 | - protected function performReplacements() |
|
222 | - { |
|
214 | + protected function performReplacements() { |
|
223 | 215 | $this->replacer = new Prefixer($this->config, $this->workingDir); |
224 | 216 | |
225 | 217 | $namespaces = $this->changeEnumerator->getDiscoveredNamespaceReplacements(); |
@@ -248,8 +240,7 @@ discard block |
||
248 | 240 | /** |
249 | 241 | * 6. Generate autoloader. |
250 | 242 | */ |
251 | - protected function generateAutoloader() |
|
252 | - { |
|
243 | + protected function generateAutoloader() { |
|
253 | 244 | |
254 | 245 | $files = $this->fileEnumerator->getFilesAutoloaders(); |
255 | 246 | |
@@ -264,8 +255,7 @@ discard block |
||
264 | 255 | * Delete source files if desired. |
265 | 256 | * Delete empty directories in destination. |
266 | 257 | */ |
267 | - protected function cleanUp() |
|
268 | - { |
|
258 | + protected function cleanUp() { |
|
269 | 259 | |
270 | 260 | $cleanup = new Cleanup($this->config, $this->workingDir); |
271 | 261 |
@@ -7,16 +7,16 @@ |
||
7 | 7 | |
8 | 8 | class Application extends BaseApplication |
9 | 9 | { |
10 | - /** |
|
11 | - * @param string $version |
|
12 | - */ |
|
13 | - public function __construct(string $version) |
|
14 | - { |
|
15 | - parent::__construct('strauss', $version); |
|
10 | + /** |
|
11 | + * @param string $version |
|
12 | + */ |
|
13 | + public function __construct(string $version) |
|
14 | + { |
|
15 | + parent::__construct('strauss', $version); |
|
16 | 16 | |
17 | - $composeCommand = new Compose(); |
|
18 | - $this->add($composeCommand); |
|
17 | + $composeCommand = new Compose(); |
|
18 | + $this->add($composeCommand); |
|
19 | 19 | |
20 | - $this->setDefaultCommand('compose'); |
|
21 | - } |
|
20 | + $this->setDefaultCommand('compose'); |
|
21 | + } |
|
22 | 22 | } |
@@ -10,13 +10,13 @@ |
||
10 | 10 | /** |
11 | 11 | * @param string $version |
12 | 12 | */ |
13 | - public function __construct(string $version) |
|
13 | + public function __construct( string $version ) |
|
14 | 14 | { |
15 | - parent::__construct('strauss', $version); |
|
15 | + parent::__construct( 'strauss', $version ); |
|
16 | 16 | |
17 | 17 | $composeCommand = new Compose(); |
18 | - $this->add($composeCommand); |
|
18 | + $this->add( $composeCommand ); |
|
19 | 19 | |
20 | - $this->setDefaultCommand('compose'); |
|
20 | + $this->setDefaultCommand( 'compose' ); |
|
21 | 21 | } |
22 | 22 | } |
@@ -5,13 +5,11 @@ |
||
5 | 5 | use BrianHenryIE\Strauss\Console\Commands\Compose; |
6 | 6 | use Symfony\Component\Console\Application as BaseApplication; |
7 | 7 | |
8 | -class Application extends BaseApplication |
|
9 | -{ |
|
8 | +class Application extends BaseApplication { |
|
10 | 9 | /** |
11 | 10 | * @param string $version |
12 | 11 | */ |
13 | - public function __construct(string $version) |
|
14 | - { |
|
12 | + public function __construct(string $version) { |
|
15 | 13 | parent::__construct('strauss', $version); |
16 | 14 | |
17 | 15 | $composeCommand = new Compose(); |