Skip to content

Commit 550011a

Browse files
authored
Do not prefix native functions and constants (#280)
The issue reported in #278 is not exact or rather it is the expected behaviour. A case where one will not want that behaviour is for a legitimate internal symbol for which there is two solutions: - Patch Roave\BetterReflection (which is a lot of work and for which #177 is open) - Patch the `Reflector` class to account for common cases Since the first solution is, although more viable, a lot of work and more of a long-term plan, I think the second solution for the meantime is the way to go.
1 parent bb5eb48 commit 550011a

12 files changed

+376
-68
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
/fixtures/*/.box_dump/
1010
/fixtures/*/vendor/
1111
/fixtures/set028-symfony/expected-output
12+
/fixtures/set030/expected-output
1213
.phpunit*
1314
/vendor/
1415
/vendor-bin/*/vendor/

Makefile

Lines changed: 44 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -62,29 +62,29 @@ tm: bin/phpunit
6262

6363
.PHONY: e2e
6464
e2e: ## Run end-to-end tests
65-
e2e: e2e_004 e2e_005 e2e_011 e2e_013 e2e_014 e2e_015 e2e_016 e2e_017 e2e_018 e2e_019 e2e_020 e2e_021 e2e_022 e2e_023 e2e_024 e2e_025 e2e_026 e2e_027 e2e_028 e2e_029
65+
e2e: e2e_004 e2e_005 e2e_011 e2e_013 e2e_014 e2e_015 e2e_016 e2e_017 e2e_018 e2e_019 e2e_020 e2e_021 e2e_022 e2e_023 e2e_024 e2e_025 e2e_026 e2e_027 e2e_028 e2e_029 e2e_030
6666

6767
PHPSCOPER=bin/php-scoper.phar
6868

6969
.PHONY: e2e_004
7070
e2e_004: ## Run end-to-end tests for the fixture set 004 — Source code case
71-
e2e_004: bin/php-scoper.phar
71+
e2e_004: $(PHPSCOPER)
7272
$(PHPBIN) $(BOX) compile --no-parallel --working-dir fixtures/set004
7373

7474
php build/set004/bin/greet.phar > build/set004/output
7575
diff fixtures/set004/expected-output build/set004/output
7676

7777
.PHONY: e2e_005
7878
e2e_005: ## Run end-to-end tests for the fixture set 005 — Third-party code case
79-
e2e_005: bin/php-scoper.phar fixtures/set005/vendor
79+
e2e_005: $(PHPSCOPER) fixtures/set005/vendor
8080
$(PHPBIN) $(BOX) compile --no-parallel --working-dir fixtures/set005
8181

8282
php build/set005/bin/greet.phar > build/set005/output
8383
diff fixtures/set005/expected-output build/set005/output
8484

8585
.PHONY: e2e_011
8686
e2e_011: ## Run end-to-end tests for the fixture set 011 — Whitelist case
87-
e2e_011: bin/php-scoper.phar fixtures/set011/vendor
87+
e2e_011: $(PHPSCOPER) fixtures/set011/vendor
8888
$(PHPBIN) $(BOX) compile --no-parallel --working-dir fixtures/set011
8989
cp -R fixtures/set011/tests/ build/set011/tests/
9090

@@ -93,31 +93,31 @@ e2e_011: bin/php-scoper.phar fixtures/set011/vendor
9393

9494
.PHONY: e2e_013
9595
e2e_013: # Run end-to-end tests for the fixture set 013 — The init command
96-
e2e_013: bin/php-scoper.phar
96+
e2e_013: $(PHPSCOPER)
9797
rm -rf build/set013
9898
cp -R fixtures/set013 build/set013
9999
$(PHPSCOPER) init --working-dir=build/set013 --no-interaction
100100
diff src/scoper.inc.php.tpl build/set013/scoper.inc.php
101101

102102
.PHONY: e2e_014
103103
e2e_014: ## Run end-to-end tests for the fixture set 014 — Source code case with PSR-0
104-
e2e_014: bin/php-scoper.phar
104+
e2e_014: $(PHPSCOPER)
105105
$(PHPBIN) $(BOX) compile --no-parallel --working-dir fixtures/set014
106106

107107
php build/set014/bin/greet.phar > build/set014/output
108108
diff fixtures/set014/expected-output build/set014/output
109109

110110
.PHONY: e2e_015
111111
e2e_015: ## Run end-to-end tests for the fixture set 015 — Third-party code case with PSR-0
112-
e2e_015: bin/php-scoper.phar fixtures/set015/vendor
112+
e2e_015: $(PHPSCOPER) fixtures/set015/vendor
113113
$(PHPBIN) $(BOX) compile --no-parallel --working-dir fixtures/set015
114114

115115
php build/set015/bin/greet.phar > build/set015/output
116116
diff fixtures/set015/expected-output build/set015/output
117117

118118
.PHONY: e2e_016
119119
e2e_016: ## Run end-to-end tests for the fixture set 016 — Symfony Finder
120-
e2e_016: bin/php-scoper.phar fixtures/set016-symfony-finder/vendor
120+
e2e_016: $(PHPSCOPER) fixtures/set016-symfony-finder/vendor
121121
$(PHPBIN) $(PHPSCOPER) add-prefix \
122122
--working-dir=fixtures/set016-symfony-finder \
123123
--output-dir=../../build/set016-symfony-finder \
@@ -132,7 +132,7 @@ e2e_016: bin/php-scoper.phar fixtures/set016-symfony-finder/vendor
132132

133133
.PHONY: e2e_017
134134
e2e_017: ## Run end-to-end tests for the fixture set 017 — Symfony DependencyInjection
135-
e2e_017: bin/php-scoper.phar fixtures/set017-symfony-di/vendor
135+
e2e_017: $(PHPSCOPER) fixtures/set017-symfony-di/vendor
136136
$(PHPBIN) $(PHPSCOPER) add-prefix \
137137
--working-dir=fixtures/set017-symfony-di \
138138
--output-dir=../../build/set017-symfony-di \
@@ -147,7 +147,7 @@ e2e_017: bin/php-scoper.phar fixtures/set017-symfony-di/vendor
147147

148148
.PHONY: e2e_018
149149
e2e_018: ## Run end-to-end tests for the fixture set 018 — Nikic PHP-Parser
150-
e2e_018: bin/php-scoper.phar fixtures/set018-nikic-parser/vendor
150+
e2e_018: $(PHPSCOPER) fixtures/set018-nikic-parser/vendor
151151
$(PHPBIN) $(PHPSCOPER) add-prefix \
152152
--working-dir=fixtures/set018-nikic-parser \
153153
--prefix=_Prefixed \
@@ -162,7 +162,7 @@ e2e_018: bin/php-scoper.phar fixtures/set018-nikic-parser/vendor
162162

163163
.PHONY: e2e_019
164164
e2e_019: ## Run end-to-end tests for the fixture set 019 — Symfony Console
165-
e2e_019: bin/php-scoper.phar fixtures/set019-symfony-console/vendor
165+
e2e_019: $(PHPSCOPER) fixtures/set019-symfony-console/vendor
166166
$(PHPBIN) $(PHPSCOPER) add-prefix --working-dir=fixtures/set019-symfony-console \
167167
--prefix=_Prefixed \
168168
--output-dir=../../build/set019-symfony-console \
@@ -177,7 +177,7 @@ e2e_019: bin/php-scoper.phar fixtures/set019-symfony-console/vendor
177177

178178
.PHONY: e2e_020
179179
e2e_020: ## Run end-to-end tests for the fixture set 020 — Infection
180-
e2e_020: bin/php-scoper.phar fixtures/set020-infection/vendor clover.xml
180+
e2e_020: $(PHPSCOPER) fixtures/set020-infection/vendor clover.xml
181181
$(PHPBIN) $(PHPSCOPER) add-prefix --working-dir=fixtures/set020-infection \
182182
--output-dir=../../build/set020-infection \
183183
--force \
@@ -198,7 +198,7 @@ e2e_020: bin/php-scoper.phar fixtures/set020-infection/vendor clover.xml
198198

199199
.PHONY: e2e_021
200200
e2e_021: ## Run end-to-end tests for the fixture set 020 — Composer
201-
e2e_021: bin/php-scoper.phar fixtures/set021-composer/vendor
201+
e2e_021: $(PHPSCOPER) fixtures/set021-composer/vendor
202202
$(PHPBIN) $(PHPSCOPER) add-prefix --working-dir=fixtures/set021-composer \
203203
--output-dir=../../build/set021-composer \
204204
--force \
@@ -218,7 +218,7 @@ e2e_021: bin/php-scoper.phar fixtures/set021-composer/vendor
218218

219219
.PHONY: e2e_022
220220
e2e_022: ## Run end-to-end tests for the fixture set 022 — Whitelist the project code with namespace whitelisting
221-
e2e_022: bin/php-scoper.phar fixtures/set022/vendor
221+
e2e_022: $(PHPSCOPER) fixtures/set022/vendor
222222
$(PHPBIN) $(BOX) compile --no-parallel --working-dir fixtures/set022
223223
cp -R fixtures/set022/tests/ build/set022/tests/
224224

@@ -228,7 +228,7 @@ e2e_022: bin/php-scoper.phar fixtures/set022/vendor
228228

229229
.PHONY: e2e_023
230230
e2e_023: ## Run end-to-end tests for the fixture set 023 — Whitelisting a whole third-party component with namespace whitelisting
231-
e2e_023: bin/php-scoper.phar fixtures/set023/vendor
231+
e2e_023: $(PHPSCOPER) fixtures/set023/vendor
232232
$(PHPBIN) $(PHPSCOPER) add-prefix --working-dir=fixtures/set023 \
233233
--output-dir=../../build/set023 \
234234
--force \
@@ -241,7 +241,7 @@ e2e_023: bin/php-scoper.phar fixtures/set023/vendor
241241

242242
.PHONY: e2e_024
243243
e2e_024: ## Run end-to-end tests for the fixture set 024 — Whitelisting user functions registered in the global namespace
244-
e2e_024: bin/php-scoper.phar fixtures/set024/vendor
244+
e2e_024: $(PHPSCOPER) fixtures/set024/vendor
245245
$(PHPBIN) $(PHPSCOPER) add-prefix \
246246
--working-dir=fixtures/set024 \
247247
--output-dir=../../build/set024 \
@@ -256,7 +256,7 @@ e2e_024: bin/php-scoper.phar fixtures/set024/vendor
256256

257257
.PHONY: e2e_025
258258
e2e_025: ## Run end-to-end tests for the fixture set 025 — Whitelisting a vendor function
259-
e2e_025: bin/php-scoper.phar fixtures/set025/vendor
259+
e2e_025: $(PHPSCOPER) fixtures/set025/vendor
260260
$(PHPBIN) $(PHPSCOPER) add-prefix \
261261
--working-dir=fixtures/set025 \
262262
--output-dir=../../build/set025 \
@@ -270,7 +270,7 @@ e2e_025: bin/php-scoper.phar fixtures/set025/vendor
270270

271271
.PHONY: e2e_026
272272
e2e_026: ## Run end-to-end tests for the fixture set 026 — Whitelisting classes and functions with pattern matching
273-
e2e_026: bin/php-scoper.phar fixtures/set026/vendor
273+
e2e_026: $(PHPSCOPER) fixtures/set026/vendor
274274
$(PHPBIN) $(PHPSCOPER) add-prefix \
275275
--working-dir=fixtures/set026 \
276276
--output-dir=../../build/set026 \
@@ -284,7 +284,7 @@ e2e_026: bin/php-scoper.phar fixtures/set026/vendor
284284

285285
.PHONY: e2e_027
286286
e2e_027: ## Run end-to-end tests for the fixture set 027 — Laravel
287-
e2e_027: bin/php-scoper.phar fixtures/set027-laravel/vendor
287+
e2e_027: $(PHPSCOPER) fixtures/set027-laravel/vendor
288288
php $(PHPSCOPER) add-prefix \
289289
--working-dir=fixtures/set027-laravel \
290290
--output-dir=../../build/set027-laravel \
@@ -299,7 +299,7 @@ e2e_027: bin/php-scoper.phar fixtures/set027-laravel/vendor
299299

300300
.PHONY: e2e_028
301301
e2e_028: ## Run end-to-end tests for the fixture set 028 — Symfony
302-
e2e_028: bin/php-scoper.phar fixtures/set028-symfony/vendor
302+
e2e_028: $(PHPSCOPER) fixtures/set028-symfony/vendor
303303
php $(PHPSCOPER) add-prefix \
304304
--working-dir=fixtures/set028-symfony \
305305
--output-dir=../../build/set028-symfony \
@@ -318,7 +318,7 @@ e2e_028: bin/php-scoper.phar fixtures/set028-symfony/vendor
318318

319319
.PHONY: e2e_029
320320
e2e_029: ## Run end-to-end tests for the fixture set 029 — EasyRdf
321-
e2e_029: bin/php-scoper fixtures/set029-easy-rdf/vendor
321+
e2e_029: $(PHPSCOPER) fixtures/set029-easy-rdf/vendor
322322
php $(PHPSCOPER) add-prefix \
323323
--working-dir=fixtures/set029-easy-rdf \
324324
--output-dir=../../build/set029-easy-rdf \
@@ -333,6 +333,25 @@ e2e_029: bin/php-scoper fixtures/set029-easy-rdf/vendor
333333
php build/set029-easy-rdf/main.php > build/set029-easy-rdf/output
334334

335335
diff fixtures/set029-easy-rdf/expected-output build/set029-easy-rdf/output
336+
diff fixtures/set028-symfony/expected-output build/set028-symfony/output
337+
338+
.PHONY: e2e_030
339+
e2e_030: ## Run end-to-end tests for the fixture set 039 — global function whitelisting
340+
e2e_030: $(PHPSCOPER) fixtures/set030/vendor
341+
php $(PHPSCOPER) add-prefix \
342+
--working-dir=fixtures/set030 \
343+
--output-dir=../../build/set030 \
344+
--no-config \
345+
--force \
346+
--no-interaction \
347+
--stop-on-failure
348+
349+
php fixtures/set030/main.php > fixtures/set030/expected-output
350+
351+
composer --working-dir=build/set030 dump-autoload --no-dev
352+
php build/set030/main.php > build/set030/output
353+
354+
diff fixtures/set030/expected-output build/set030/output
336355

337356
.PHONY: tb
338357
BLACKFIRE=blackfire
@@ -439,6 +458,10 @@ fixtures/set029-easy-rdf/vendor: fixtures/set029-easy-rdf/composer.lock
439458
composer --working-dir=fixtures/set029-easy-rdf install --no-dev
440459
touch $@
441460

461+
fixtures/set030/vendor: fixtures/set030/composer.json
462+
composer --working-dir=fixtures/set030 install --no-dev
463+
touch $@
464+
442465
composer.lock: composer.json
443466
@echo composer.lock is not up to date.
444467

fixtures/set030/composer.json

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
{
2+
"autoload": {
3+
"files": [
4+
"src/functions.php"
5+
]
6+
},
7+
"bin": "main.php"
8+
}

fixtures/set030/expected-output

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
ok
2+
ok

fixtures/set030/main.php

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
$autoload = __DIR__.'/vendor/scoper-autoload.php';
6+
7+
if (false === file_exists($autoload)) {
8+
$autoload = __DIR__.'/vendor/autoload.php';
9+
}
10+
11+
require_once $autoload;
12+
13+
echo foo() ? 'ok' : 'ko';
14+
echo PHP_EOL;
15+
echo bar() ? 'ok' : 'ko';
16+
echo PHP_EOL;

fixtures/set030/src/functions.php

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
function foo(): bool {
6+
return true;
7+
}
8+
9+
if (!function_exists('bar')) {
10+
function bar(): bool {
11+
return true;
12+
}
13+
}
14+
15+
if (function_exists('baz')) {
16+
baz();
17+
}

src/Console/ApplicationFactory.php

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@
2929
use PhpParser\Parser;
3030
use PhpParser\ParserFactory;
3131
use Roave\BetterReflection\Reflector\ClassReflector;
32-
use Roave\BetterReflection\Reflector\FunctionReflector;
3332
use Roave\BetterReflection\SourceLocator\Ast\Locator;
3433
use Roave\BetterReflection\SourceLocator\Type\MemoizingSourceLocator;
3534
use Roave\BetterReflection\SourceLocator\Type\PhpInternalSourceLocator;
@@ -97,9 +96,6 @@ protected static function createReflector(): Reflector
9796
);
9897
$classReflector = new ClassReflector($sourceLocator);
9998

100-
return new Reflector(
101-
$classReflector,
102-
new FunctionReflector($sourceLocator, $classReflector)
103-
);
99+
return new Reflector($classReflector);
104100
}
105101
}

0 commit comments

Comments
 (0)