-
-
Notifications
You must be signed in to change notification settings - Fork 117
/
PhpExtension.php
57 lines (48 loc) · 2.12 KB
/
PhpExtension.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
<?php
namespace Phpactor\Extension\Php;
use Phpactor\Container\Container;
use Phpactor\Container\ContainerBuilder;
use Phpactor\Container\Extension;
use Phpactor\Extension\Php\Model\ChainResolver;
use Phpactor\Extension\Php\Model\ComposerPhpVersionResolver;
use Phpactor\Extension\Php\Model\ConstantPhpVersionResolver;
use Phpactor\Extension\Php\Model\PhpVersionResolver;
use Phpactor\Extension\Php\Model\RuntimePhpVersionResolver;
use Phpactor\Extension\FilePathResolver\FilePathResolverExtension;
use Phpactor\Extension\Php\Status\PhpStatusProvider;
use Phpactor\MapResolver\Resolver;
class PhpExtension implements Extension
{
const PARAM_VERSION = 'php.version';
public function load(ContainerBuilder $container): void
{
$container->register(ChainResolver::class, function (Container $container) {
$pathResolver = $container->get(FilePathResolverExtension::SERVICE_FILE_PATH_RESOLVER);
$composerPath = $pathResolver->resolve('%project_root%/composer.json');
return new ChainResolver(
new ConstantPhpVersionResolver($container->getParameter(self::PARAM_VERSION)),
new ComposerPhpVersionResolver($composerPath),
new RuntimePhpVersionResolver()
);
});
$container->register(PhpVersionResolver::class, function (Container $container) {
return $container->get(ChainResolver::class);
});
$container->register(PhpStatusProvider::class, function (Container $container) {
return new PhpStatusProvider($container->get(ChainResolver::class));
}, []);
}
public function configure(Resolver $schema): void
{
$schema->setDefaults([
self::PARAM_VERSION => null
]);
$schema->setDescriptions([
self::PARAM_VERSION => <<<'EOT'
Consider this value to be the project\'s version of PHP (e.g. `7.4`). If omitted
it will check `composer.json` (by the configured platform then the PHP requirement) before
falling back to the PHP version of the current process.
EOT
]);
}
}