Skip to content

Commit

Permalink
Do not prefix native functions and constants (#280)
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
theofidry authored Nov 4, 2018
1 parent bb5eb48 commit 550011a
Show file tree
Hide file tree
Showing 12 changed files with 376 additions and 68 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
/fixtures/*/.box_dump/
/fixtures/*/vendor/
/fixtures/set028-symfony/expected-output
/fixtures/set030/expected-output
.phpunit*
/vendor/
/vendor-bin/*/vendor/
Expand Down
65 changes: 44 additions & 21 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -62,29 +62,29 @@ tm: bin/phpunit

.PHONY: e2e
e2e: ## Run end-to-end tests
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: 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

PHPSCOPER=bin/php-scoper.phar

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

diff fixtures/set029-easy-rdf/expected-output build/set029-easy-rdf/output
diff fixtures/set028-symfony/expected-output build/set028-symfony/output

.PHONY: e2e_030
e2e_030: ## Run end-to-end tests for the fixture set 039 — global function whitelisting
e2e_030: $(PHPSCOPER) fixtures/set030/vendor
php $(PHPSCOPER) add-prefix \
--working-dir=fixtures/set030 \
--output-dir=../../build/set030 \
--no-config \
--force \
--no-interaction \
--stop-on-failure

php fixtures/set030/main.php > fixtures/set030/expected-output

composer --working-dir=build/set030 dump-autoload --no-dev
php build/set030/main.php > build/set030/output

diff fixtures/set030/expected-output build/set030/output

.PHONY: tb
BLACKFIRE=blackfire
Expand Down Expand Up @@ -439,6 +458,10 @@ fixtures/set029-easy-rdf/vendor: fixtures/set029-easy-rdf/composer.lock
composer --working-dir=fixtures/set029-easy-rdf install --no-dev
touch $@

fixtures/set030/vendor: fixtures/set030/composer.json
composer --working-dir=fixtures/set030 install --no-dev
touch $@

composer.lock: composer.json
@echo composer.lock is not up to date.

Expand Down
8 changes: 8 additions & 0 deletions fixtures/set030/composer.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
{
"autoload": {
"files": [
"src/functions.php"
]
},
"bin": "main.php"
}
2 changes: 2 additions & 0 deletions fixtures/set030/expected-output
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
ok
ok
16 changes: 16 additions & 0 deletions fixtures/set030/main.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
<?php

declare(strict_types=1);

$autoload = __DIR__.'/vendor/scoper-autoload.php';

if (false === file_exists($autoload)) {
$autoload = __DIR__.'/vendor/autoload.php';
}

require_once $autoload;

echo foo() ? 'ok' : 'ko';
echo PHP_EOL;
echo bar() ? 'ok' : 'ko';
echo PHP_EOL;
17 changes: 17 additions & 0 deletions fixtures/set030/src/functions.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
<?php

declare(strict_types=1);

function foo(): bool {
return true;
}

if (!function_exists('bar')) {
function bar(): bool {
return true;
}
}

if (function_exists('baz')) {
baz();
}
6 changes: 1 addition & 5 deletions src/Console/ApplicationFactory.php
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,6 @@
use PhpParser\Parser;
use PhpParser\ParserFactory;
use Roave\BetterReflection\Reflector\ClassReflector;
use Roave\BetterReflection\Reflector\FunctionReflector;
use Roave\BetterReflection\SourceLocator\Ast\Locator;
use Roave\BetterReflection\SourceLocator\Type\MemoizingSourceLocator;
use Roave\BetterReflection\SourceLocator\Type\PhpInternalSourceLocator;
Expand Down Expand Up @@ -97,9 +96,6 @@ protected static function createReflector(): Reflector
);
$classReflector = new ClassReflector($sourceLocator);

return new Reflector(
$classReflector,
new FunctionReflector($sourceLocator, $classReflector)
);
return new Reflector($classReflector);
}
}
Loading

0 comments on commit 550011a

Please sign in to comment.