mirror of
https://github.com/nikic/PHP-Parser.git
synced 2025-01-17 15:18:17 +01:00
4b497045e0
The Lexer now only provides the tokens to the parser, while the parser is responsible for determining which attributes are placed on notes. This only needs to be done when the attributes are actually needed, rather than for all tokens. This removes the usedAttributes lexer option (and lexer options entirely). The attributes are now enabled unconditionally. They have less overhead now, and the need to explicitly enable them for some use cases (e.g. formatting-preserving printing) doesn't seem like a good tradeoff anymore. There are some additional changes to the Lexer interface that should be done after this, and the docs / upgrading guide haven't been adjusted yet.
71 lines
2.3 KiB
PHP
71 lines
2.3 KiB
PHP
<?php declare(strict_types=1);
|
|
|
|
namespace PhpParser;
|
|
|
|
use PhpParser\Parser\Php7;
|
|
use PhpParser\Parser\Php8;
|
|
|
|
class ParserFactory {
|
|
public const PREFER_PHP7 = 1;
|
|
public const ONLY_PHP7 = 3;
|
|
|
|
/**
|
|
* Creates a Parser instance, according to the provided kind.
|
|
*
|
|
* @param int $kind One of ::PREFER_PHP7 or ::ONLY_PHP7
|
|
* @param Lexer|null $lexer Lexer to use. Defaults to emulative lexer when not specified
|
|
*
|
|
* @return Parser The parser instance
|
|
*
|
|
* @deprecated Use createForVersion(), createForNewestSupportedVersion() or createForHostVersion() instead.
|
|
*/
|
|
public function create(int $kind, ?Lexer $lexer = null): Parser {
|
|
if (null === $lexer) {
|
|
$lexer = new Lexer\Emulative();
|
|
}
|
|
switch ($kind) {
|
|
case self::PREFER_PHP7:
|
|
case self::ONLY_PHP7:
|
|
return new Parser\Php7($lexer);
|
|
default:
|
|
throw new \LogicException(
|
|
'Kind must be one of ::PREFER_PHP7 or ::ONLY_PHP7'
|
|
);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Create a parser targeting the given version on a best-effort basis. The parser will generally
|
|
* accept code for the newest supported version, but will try to accommodate code that becomes
|
|
* invalid in newer versions or changes in interpretation.
|
|
*/
|
|
public function createForVersion(PhpVersion $version): Parser {
|
|
if ($version->isHostVersion()) {
|
|
$lexer = new Lexer();
|
|
} else {
|
|
$lexer = new Lexer\Emulative($version);
|
|
}
|
|
if ($version->id >= 80000) {
|
|
return new Php8($lexer, $version);
|
|
}
|
|
return new Php7($lexer, $version);
|
|
}
|
|
|
|
/**
|
|
* Create a parser targeting the newest version supported by this library. Code for older
|
|
* versions will be accepted if there have been no relevant backwards-compatibility breaks in
|
|
* PHP.
|
|
*/
|
|
public function createForNewestSupportedVersion(): Parser {
|
|
return $this->createForVersion(PhpVersion::getNewestSupported());
|
|
}
|
|
|
|
/**
|
|
* Create a parser targeting the host PHP version, that is the PHP version we're currently
|
|
* running on. This parser will not use any token emulation.
|
|
*/
|
|
public function createForHostVersion(): Parser {
|
|
return $this->createForVersion(PhpVersion::getHostVersion());
|
|
}
|
|
}
|