Bug fixes with Php-Parser

This commit is contained in:
netkas 2024-09-20 16:00:53 -04:00
parent 923117999b
commit be70823a79
30 changed files with 316 additions and 339 deletions

View file

@ -31,27 +31,6 @@
class AstWalker
{
/**
* Returns an array representation of the node recursively
*
* @param array|Node $node
* @return array
*/
public static function serialize(array|Node $node): array
{
if(is_array($node))
{
$serialized = [];
foreach($node as $sub_node)
{
$serialized[] = $sub_node->jsonSerialize();
}
return $serialized;
}
return $node->jsonSerialize();
}
/**
* Returns an array of classes associated with the node recursively
*
@ -112,161 +91,4 @@
return $classes;
}
/**
* Reconstructs nodes from an array representation recursively
*
* @param $value
* @return array|Comment|Node
* @noinspection PhpMissingReturnTypeInspection
* @throws ReflectionException
*/
public static function decodeRecursive($value)
{
if (is_array($value))
{
if (isset($value['nodeType']))
{
if ($value['nodeType'] === 'Comment' || $value['nodeType'] === 'Comment_Doc')
{
return self::decodeComment($value);
}
return self::decodeNode($value);
}
return self::decodeArray($value);
}
return $value;
}
/**
* Decodes an array by recursively decoding each value
*
* @param array $array
* @return array
* @throws ReflectionException
*/
private static function decodeArray(array $array) : array
{
$decoded_array = [];
foreach ($array as $key => $value)
{
$decoded_array[$key] = self::decodeRecursive($value);
}
return $decoded_array;
}
/**
* Returns the node from the node type
*
* @param array $value
* @return Node
* @throws ReflectionException
*/
private static function decodeNode(array $value) : Node
{
$node_type = $value['nodeType'];
if (!is_string($node_type))
{
throw new RuntimeException('Node type must be a string');
}
/** @var Node $node */
$node = self::reflectionClassFromNodeType($node_type)->newInstanceWithoutConstructor();
if (isset($value['attributes'])) {
if (!is_array($value['attributes']))
{
throw new RuntimeException('Attributes must be an array');
}
$node->setAttributes(self::decodeArray($value['attributes']));
}
foreach ($value as $name => $sub_node) {
if ($name === 'nodeType' || $name === 'attributes')
{
continue;
}
$node->$name = self::decodeRecursive($sub_node);
}
return $node;
}
/**
* Returns the comment from the node type
*
* @param array $value
* @return Comment
*/
private static function decodeComment(array $value): Comment
{
$class_name = $value['nodeType'] === 'Comment' ? Comment::class : Comment\Doc::class;
if (!isset($value['text']))
{
throw new RuntimeException('Comment must have text');
}
return new $class_name(
$value['text'],
$value['line'] ?? -1, $value['filePos'] ?? -1, $value['tokenPos'] ?? -1,
$value['endLine'] ?? -1, $value['endFilePos'] ?? -1, $value['endTokenPos'] ?? -1
);
}
/**
* Returns the reflection class from the node type
*
* @param string $node_type
* @return ReflectionClass
* @throws ReflectionException
*/
private static function reflectionClassFromNodeType(string $node_type): ReflectionClass
{
return new ReflectionClass(self::classNameFromNodeType($node_type));
}
/**
* Returns the class name from the node type
*
* @param string $nodeType
* @return string
*/
private static function classNameFromNodeType(string $nodeType): string
{
$class_name = 'ncc\\ThirdParty\\nikic\\PhpParser\\Node\\' . str_replace('_', '\\', $nodeType);
if (class_exists($class_name))
{
return $class_name;
}
$class_name .= '_';
if (class_exists($class_name))
{
return $class_name;
}
throw new RuntimeException("Unknown node type \"$nodeType\"");
}
/**
* Transforms include, include_once, require and require_once statements into function calls.
*
* @param Node|array $stmts The AST node or array of nodes to transform.
* @param string|null $package Optionally. The package name to pass to the transformed function calls.
* @return Node|array The transformed AST node or array of nodes.
*/
public static function transformRequireCalls(Node|array $stmts, ?string $package=null): Node|array
{
$traverser = new NodeTraverser();
$traverser->addVisitor(new ExpressionTraverser($package));
return $traverser->traverse($stmts);
}
}

View file

@ -30,7 +30,9 @@
use ncc\Exceptions\PathNotFoundException;
use ncc\Extensions\ZiProto\ZiProto;
use ncc\Objects\Package\Component;
use ncc\ThirdParty\nikic\PhpParser\NodeDumper;
use ncc\ThirdParty\nikic\PhpParser\ParserFactory;
use ncc\ThirdParty\nikic\PhpParser\PhpVersion;
use ncc\Utilities\Base64;
use ncc\Utilities\Console;
use ncc\Utilities\Functions;
@ -52,12 +54,8 @@
try
{
$stmts = (new ParserFactory())->create(ParserFactory::PREFER_PHP7)->parse(IO::fread($file_path));
$stmts = AstWalker::transformRequireCalls(
$stmts, $this->getProjectManager()->getProjectConfiguration()->getAssembly()->getPackage()
);
$component = new Component($component_name, ZiProto::encode($stmts), ComponentDataType::AST);
$stmts = ((new ParserFactory())->createForNewestSupportedVersion())->parse(IO::fread($file_path));
$component = new Component($component_name, ZiProto::encode(Serializer::nodesToArray($stmts)), ComponentDataType::AST);
$component->addFlag(ComponentFlags::PHP_AST->value);
$pointer = $package_writer->addComponent($component);

View file

@ -0,0 +1,151 @@
<?php
/*
* Copyright (c) Nosial 2022-2024, all rights reserved.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy of this software and
* associated documentation files (the "Software"), to deal in the Software without restriction, including without
* limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
* Software, and to permit persons to whom the Software is furnished to do so, subject to the following
* conditions:
*
* The above copyright notice and this permission notice shall be included in all copies or substantial portions
* of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
* INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
* PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
* LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE.
*
*/
namespace ncc\Classes\PhpExtension;
use ncc\ThirdParty\nikic\PhpParser\Comment;
use ncc\ThirdParty\nikic\PhpParser\Node;
use ncc\ThirdParty\nikic\PhpParser\NodeAbstract;
use ReflectionClass;
use RuntimeException;
use function is_array;
use function is_string;
class Serializer
{
/** @var ReflectionClass<Node>[] Node type to reflection class map */
private static array $reflectionClassCache;
/**
* @param NodeAbstract[] $nodeAbstracts
* @return array
*/
public static function nodesToArray(array $nodeAbstracts): array
{
$serialized = [];
foreach ($nodeAbstracts as $nodeAbstract)
{
$serialized[] = $nodeAbstract->jsonSerialize();
}
return $serialized;
}
/**
* @param array $nodeAbstracts
* @return NodeAbstract[]
*/
public static function arrayToNodes(array $nodeAbstracts): array
{
return self::decodeRecursive($nodeAbstracts);
}
/**
* @param mixed $value
* @return mixed
*/
private static function decodeRecursive($value) {
if (is_array($value)) {
if (isset($value['nodeType'])) {
if ($value['nodeType'] === 'Comment' || $value['nodeType'] === 'Comment_Doc') {
return self::decodeComment($value);
}
return self::decodeNode($value);
}
return self::decodeArray($value);
}
return $value;
}
private static function decodeArray(array $array): array {
$decodedArray = [];
foreach ($array as $key => $value) {
$decodedArray[$key] = self::decodeRecursive($value);
}
return $decodedArray;
}
private static function decodeNode(array $value): Node {
$nodeType = $value['nodeType'];
if (!is_string($nodeType)) {
throw new RuntimeException('Node type must be a string');
}
$reflectionClass = self::reflectionClassFromNodeType($nodeType);
$node = $reflectionClass->newInstanceWithoutConstructor();
if (isset($value['attributes'])) {
if (!is_array($value['attributes'])) {
throw new RuntimeException('Attributes must be an array');
}
$node->setAttributes(self::decodeArray($value['attributes']));
}
foreach ($value as $name => $subNode) {
if ($name === 'nodeType' || $name === 'attributes') {
continue;
}
$node->$name = self::decodeRecursive($subNode);
}
return $node;
}
private static function decodeComment(array $value): Comment {
$className = $value['nodeType'] === 'Comment' ? Comment::class : Comment\Doc::class;
if (!isset($value['text'])) {
throw new RuntimeException('Comment must have text');
}
return new $className(
$value['text'],
$value['line'] ?? -1, $value['filePos'] ?? -1, $value['tokenPos'] ?? -1,
$value['endLine'] ?? -1, $value['endFilePos'] ?? -1, $value['endTokenPos'] ?? -1
);
}
private static function reflectionClassFromNodeType(string $nodeType): ReflectionClass {
if (!isset(self::$reflectionClassCache[$nodeType])) {
$className = self::classNameFromNodeType($nodeType);
self::$reflectionClassCache[$nodeType] = new ReflectionClass($className);
}
return self::$reflectionClassCache[$nodeType];
}
/** @return class-string<Node> */
private static function classNameFromNodeType(string $nodeType): string {
$className = '\\ncc\\ThirdParty\\nikic\\PhpParser\\Node\\' . strtr($nodeType, '_', '\\');
if (class_exists($className)) {
return $className;
}
$className .= '_';
if (class_exists($className)) {
return $className;
}
throw new RuntimeException("Unknown node type \"$nodeType\"");
}
}

View file

@ -162,7 +162,7 @@
}
}
throw new RuntimeException('Importing from a package name is not supported yet');
throw new RuntimeException(sprintf('Failed to import package "%s" because it does not exist', $package));
}
/**

View file

@ -27,6 +27,7 @@
use Exception;
use InvalidArgumentException;
use ncc\Classes\PhpExtension\AstWalker;
use ncc\Classes\PhpExtension\Serializer;
use ncc\Enums\Flags\ComponentFlags;
use ncc\Enums\LogLevel;
use ncc\Enums\Options\ComponentDecodeOptions;
@ -177,12 +178,15 @@
{
try
{
$decodedData = base64_decode($this->data);
$ast = Serializer::arrayToNodes((array)$decodedData);
if(in_array(ComponentDecodeOptions::AS_FILE->value, $options, true))
{
return (new Standard())->prettyPrintFile(AstWalker::decodeRecursive(base64_decode($this->data)));
return (new Standard())->prettyPrintFile($ast);
}
return (new Standard())->prettyPrint(AstWalker::decodeRecursive(base64_decode($this->data)));
return (new Standard())->prettyPrint($ast);
}
catch(Exception $e)
{
@ -197,12 +201,15 @@
{
try
{
$decodedData = ZiProto::decode($this->data);
$ast = Serializer::arrayToNodes($decodedData);
if(in_array(ComponentDecodeOptions::AS_FILE->value, $options, true))
{
return (new Standard())->prettyPrintFile(AstWalker::decodeRecursive(ZiProto::decode($this->data)));
return (new Standard())->prettyPrintFile($ast);
}
return (new Standard())->prettyPrint(AstWalker::decodeRecursive(ZiProto::decode($this->data)));
return (new Standard())->prettyPrint($ast);
}
catch(Exception $e)
{

View file

@ -7,10 +7,10 @@ namespace ncc\ThirdParty\nikic\PhpParser\Builder;
use ncc\ThirdParty\nikic\PhpParser;
use PhpParser\BuilderHelpers;
use PhpParser\Modifiers;
use ncc\ThirdParty\nikic\PhpParser\Node;
use ncc\ThirdParty\nikic\PhpParser\Node\Const_;
use ncc\ThirdParty\nikic\PhpParser\Node\Identifier;
use ncc\ThirdParty\nikic\PhpParser\Node\Stmt;
use PhpParser\Node;
use PhpParser\Node\Const_;
use PhpParser\Node\Identifier;
use PhpParser\Node\Stmt;
class ClassConst implements PhpParser\Builder {
protected int $flags = 0;

View file

@ -5,9 +5,9 @@ namespace ncc\ThirdParty\nikic\PhpParser\Builder;
use ncc\ThirdParty\nikic\PhpParser;
use PhpParser\BuilderHelpers;
use PhpParser\Modifiers;
use ncc\ThirdParty\nikic\PhpParser\Node;
use ncc\ThirdParty\nikic\PhpParser\Node\Name;
use ncc\ThirdParty\nikic\PhpParser\Node\Stmt;
use PhpParser\Node;
use PhpParser\Node\Name;
use PhpParser\Node\Stmt;
class Class_ extends Declaration {
protected string $name;

View file

@ -12,7 +12,7 @@ abstract class Declaration implements PhpParser\Builder {
/**
* Adds a statement.
*
* @param \ncc\ThirdParty\nikic\PhpParser\Node\Stmt|PhpParser\Builder $stmt The statement to add
* @param PhpParser\Node\Stmt|PhpParser\Builder $stmt The statement to add
*
* @return $this The builder instance (for fluid interface)
*/
@ -21,7 +21,7 @@ abstract class Declaration implements PhpParser\Builder {
/**
* Adds multiple statements.
*
* @param (\ncc\ThirdParty\nikic\PhpParser\Node\Stmt|PhpParser\Builder)[] $stmts The statements to add
* @param (PhpParser\Node\Stmt|PhpParser\Builder)[] $stmts The statements to add
*
* @return $this The builder instance (for fluid interface)
*/

View file

@ -6,9 +6,9 @@ namespace ncc\ThirdParty\nikic\PhpParser\Builder;
use ncc\ThirdParty\nikic\PhpParser;
use PhpParser\BuilderHelpers;
use ncc\ThirdParty\nikic\PhpParser\Node;
use ncc\ThirdParty\nikic\PhpParser\Node\Identifier;
use ncc\ThirdParty\nikic\PhpParser\Node\Stmt;
use PhpParser\Node;
use PhpParser\Node\Identifier;
use PhpParser\Node\Stmt;
class EnumCase implements PhpParser\Builder {
/** @var Identifier|string */

View file

@ -4,10 +4,10 @@ namespace ncc\ThirdParty\nikic\PhpParser\Builder;
use ncc\ThirdParty\nikic\PhpParser;
use PhpParser\BuilderHelpers;
use ncc\ThirdParty\nikic\PhpParser\Node;
use ncc\ThirdParty\nikic\PhpParser\Node\Identifier;
use ncc\ThirdParty\nikic\PhpParser\Node\Name;
use ncc\ThirdParty\nikic\PhpParser\Node\Stmt;
use PhpParser\Node;
use PhpParser\Node\Identifier;
use PhpParser\Node\Name;
use PhpParser\Node\Stmt;
class Enum_ extends Declaration {
protected string $name;

View file

@ -4,8 +4,8 @@ namespace ncc\ThirdParty\nikic\PhpParser\Builder;
use ncc\ThirdParty\nikic\PhpParser;
use PhpParser\BuilderHelpers;
use ncc\ThirdParty\nikic\PhpParser\Node;
use ncc\ThirdParty\nikic\PhpParser\Node\Stmt;
use PhpParser\Node;
use PhpParser\Node\Stmt;
class Function_ extends FunctionLike {
protected string $name;

View file

@ -4,9 +4,9 @@ namespace ncc\ThirdParty\nikic\PhpParser\Builder;
use ncc\ThirdParty\nikic\PhpParser;
use PhpParser\BuilderHelpers;
use ncc\ThirdParty\nikic\PhpParser\Node;
use ncc\ThirdParty\nikic\PhpParser\Node\Name;
use ncc\ThirdParty\nikic\PhpParser\Node\Stmt;
use PhpParser\Node;
use PhpParser\Node\Name;
use PhpParser\Node\Stmt;
class Interface_ extends Declaration {
protected string $name;

View file

@ -5,8 +5,8 @@ namespace ncc\ThirdParty\nikic\PhpParser\Builder;
use ncc\ThirdParty\nikic\PhpParser;
use PhpParser\BuilderHelpers;
use PhpParser\Modifiers;
use ncc\ThirdParty\nikic\PhpParser\Node;
use ncc\ThirdParty\nikic\PhpParser\Node\Stmt;
use PhpParser\Node;
use PhpParser\Node\Stmt;
class Method extends FunctionLike {
protected string $name;

View file

@ -4,8 +4,8 @@ namespace ncc\ThirdParty\nikic\PhpParser\Builder;
use ncc\ThirdParty\nikic\PhpParser;
use PhpParser\BuilderHelpers;
use ncc\ThirdParty\nikic\PhpParser\Node;
use ncc\ThirdParty\nikic\PhpParser\Node\Stmt;
use PhpParser\Node;
use PhpParser\Node\Stmt;
class Namespace_ extends Declaration {
private ?Node\Name $name;

View file

@ -5,7 +5,7 @@ namespace ncc\ThirdParty\nikic\PhpParser\Builder;
use ncc\ThirdParty\nikic\PhpParser;
use PhpParser\BuilderHelpers;
use PhpParser\Modifiers;
use ncc\ThirdParty\nikic\PhpParser\Node;
use PhpParser\Node;
class Param implements PhpParser\Builder {
protected string $name;

View file

@ -5,11 +5,11 @@ namespace ncc\ThirdParty\nikic\PhpParser\Builder;
use ncc\ThirdParty\nikic\PhpParser;
use PhpParser\BuilderHelpers;
use PhpParser\Modifiers;
use ncc\ThirdParty\nikic\PhpParser\Node;
use ncc\ThirdParty\nikic\PhpParser\Node\Identifier;
use ncc\ThirdParty\nikic\PhpParser\Node\Name;
use ncc\ThirdParty\nikic\PhpParser\Node\Stmt;
use ncc\ThirdParty\nikic\PhpParser\Node\ComplexType;
use PhpParser\Node;
use PhpParser\Node\Identifier;
use PhpParser\Node\Name;
use PhpParser\Node\Stmt;
use PhpParser\Node\ComplexType;
class Property implements PhpParser\Builder {
protected string $name;

View file

@ -135,9 +135,9 @@ class TraitUseAdaptation implements Builder {
public function getNode(): Node {
switch ($this->type) {
case self::TYPE_ALIAS:
return new \ncc\ThirdParty\nikic\PhpParser\Node\Stmt\TraitUseAdaptation\Alias($this->trait, $this->method, $this->modifier, $this->alias);
return new Stmt\TraitUseAdaptation\Alias($this->trait, $this->method, $this->modifier, $this->alias);
case self::TYPE_PRECEDENCE:
return new \ncc\ThirdParty\nikic\PhpParser\Node\Stmt\TraitUseAdaptation\Precedence($this->trait, $this->method, $this->insteadof);
return new Stmt\TraitUseAdaptation\Precedence($this->trait, $this->method, $this->insteadof);
default:
throw new \LogicException('Type of adaptation is not defined');
}

View file

@ -4,8 +4,8 @@ namespace ncc\ThirdParty\nikic\PhpParser\Builder;
use ncc\ThirdParty\nikic\PhpParser;
use PhpParser\BuilderHelpers;
use ncc\ThirdParty\nikic\PhpParser\Node;
use ncc\ThirdParty\nikic\PhpParser\Node\Stmt;
use PhpParser\Node;
use PhpParser\Node\Stmt;
class Trait_ extends Declaration {
protected string $name;

View file

@ -17,8 +17,8 @@ class BuilderFactory {
* @param string|Name $name Name of the attribute
* @param array $args Attribute named arguments
*/
public function attribute($name, array $args = []): ncc\ThirdParty\nikic\PhpParser\Node\Attribute {
return new ncc\ThirdParty\nikic\PhpParser\Node\Attribute(
public function attribute($name, array $args = []): Node\Attribute {
return new Node\Attribute(
BuilderHelpers::normalizeName($name),
$this->args($args)
);
@ -27,12 +27,12 @@ class BuilderFactory {
/**
* Creates a namespace builder.
*
* @param null|string|ncc\ThirdParty\nikic\PhpParser\Node\Name $name Name of the namespace
* @param null|string|Node\Name $name Name of the namespace
*
* @return ncc\ThirdParty\nikic\PhpParser\Builder\Namespace_ The created namespace builder
* @return Builder\Namespace_ The created namespace builder
*/
public function namespace($name): ncc\ThirdParty\nikic\PhpParser\Builder\Namespace_ {
return new ncc\ThirdParty\nikic\PhpParser\Builder\Namespace_($name);
public function namespace($name): Builder\Namespace_ {
return new Builder\Namespace_($name);
}
/**
@ -40,10 +40,10 @@ class BuilderFactory {
*
* @param string $name Name of the class
*
* @return ncc\ThirdParty\nikic\PhpParser\Builder\Class_ The created class builder
* @return Builder\Class_ The created class builder
*/
public function class(string $name): ncc\ThirdParty\nikic\PhpParser\Builder\Class_ {
return new ncc\ThirdParty\nikic\PhpParser\Builder\Class_($name);
public function class(string $name): Builder\Class_ {
return new Builder\Class_($name);
}
/**
@ -51,10 +51,10 @@ class BuilderFactory {
*
* @param string $name Name of the interface
*
* @return ncc\ThirdParty\nikic\PhpParser\Builder\Interface_ The created interface builder
* @return Builder\Interface_ The created interface builder
*/
public function interface(string $name): ncc\ThirdParty\nikic\PhpParser\Builder\Interface_ {
return new ncc\ThirdParty\nikic\PhpParser\Builder\Interface_($name);
public function interface(string $name): Builder\Interface_ {
return new Builder\Interface_($name);
}
/**
@ -62,10 +62,10 @@ class BuilderFactory {
*
* @param string $name Name of the trait
*
* @return ncc\ThirdParty\nikic\PhpParser\Builder\Trait_ The created trait builder
* @return Builder\Trait_ The created trait builder
*/
public function trait(string $name): ncc\ThirdParty\nikic\PhpParser\Builder\Trait_ {
return new ncc\ThirdParty\nikic\PhpParser\Builder\Trait_($name);
public function trait(string $name): Builder\Trait_ {
return new Builder\Trait_($name);
}
/**
@ -73,38 +73,38 @@ class BuilderFactory {
*
* @param string $name Name of the enum
*
* @return ncc\ThirdParty\nikic\PhpParser\Builder\Enum_ The created enum builder
* @return Builder\Enum_ The created enum builder
*/
public function enum(string $name): ncc\ThirdParty\nikic\PhpParser\Builder\Enum_ {
return new ncc\ThirdParty\nikic\PhpParser\Builder\Enum_($name);
public function enum(string $name): Builder\Enum_ {
return new Builder\Enum_($name);
}
/**
* Creates a trait use builder.
*
* @param ncc\ThirdParty\nikic\PhpParser\Node\Name|string ...$traits Trait names
* @param Node\Name|string ...$traits Trait names
*
* @return ncc\ThirdParty\nikic\PhpParser\Builder\TraitUse The created trait use builder
* @return Builder\TraitUse The created trait use builder
*/
public function useTrait(...$traits): ncc\ThirdParty\nikic\PhpParser\Builder\TraitUse {
return new ncc\ThirdParty\nikic\PhpParser\Builder\TraitUse(...$traits);
public function useTrait(...$traits): Builder\TraitUse {
return new Builder\TraitUse(...$traits);
}
/**
* Creates a trait use adaptation builder.
*
* @param ncc\ThirdParty\nikic\PhpParser\Node\Name|string|null $trait Trait name
* @param ncc\ThirdParty\nikic\PhpParser\Node\Identifier|string $method Method name
* @param Node\Name|string|null $trait Trait name
* @param Node\Identifier|string $method Method name
*
* @return ncc\ThirdParty\nikic\PhpParser\Builder\TraitUseAdaptation The created trait use adaptation builder
* @return Builder\TraitUseAdaptation The created trait use adaptation builder
*/
public function traitUseAdaptation($trait, $method = null): ncc\ThirdParty\nikic\PhpParser\Builder\TraitUseAdaptation {
public function traitUseAdaptation($trait, $method = null): Builder\TraitUseAdaptation {
if ($method === null) {
$method = $trait;
$trait = null;
}
return new ncc\ThirdParty\nikic\PhpParser\Builder\TraitUseAdaptation($trait, $method);
return new Builder\TraitUseAdaptation($trait, $method);
}
/**
@ -112,10 +112,10 @@ class BuilderFactory {
*
* @param string $name Name of the method
*
* @return ncc\ThirdParty\nikic\PhpParser\Builder\Method The created method builder
* @return Builder\Method The created method builder
*/
public function method(string $name): ncc\ThirdParty\nikic\PhpParser\Builder\Method {
return new ncc\ThirdParty\nikic\PhpParser\Builder\Method($name);
public function method(string $name): Builder\Method {
return new Builder\Method($name);
}
/**
@ -123,10 +123,10 @@ class BuilderFactory {
*
* @param string $name Name of the parameter
*
* @return ncc\ThirdParty\nikic\PhpParser\Builder\Param The created parameter builder
* @return Builder\Param The created parameter builder
*/
public function param(string $name): ncc\ThirdParty\nikic\PhpParser\Builder\Param {
return new ncc\ThirdParty\nikic\PhpParser\Builder\Param($name);
public function param(string $name): Builder\Param {
return new Builder\Param($name);
}
/**
@ -134,10 +134,10 @@ class BuilderFactory {
*
* @param string $name Name of the property
*
* @return ncc\ThirdParty\nikic\PhpParser\Builder\Property The created property builder
* @return Builder\Property The created property builder
*/
public function property(string $name): ncc\ThirdParty\nikic\PhpParser\Builder\Property {
return new ncc\ThirdParty\nikic\PhpParser\Builder\Property($name);
public function property(string $name): Builder\Property {
return new Builder\Property($name);
}
/**
@ -145,55 +145,55 @@ class BuilderFactory {
*
* @param string $name Name of the function
*
* @return ncc\ThirdParty\nikic\PhpParser\Builder\Function_ The created function builder
* @return Builder\Function_ The created function builder
*/
public function function(string $name): ncc\ThirdParty\nikic\PhpParser\Builder\Function_ {
return new ncc\ThirdParty\nikic\PhpParser\Builder\Function_($name);
public function function(string $name): Builder\Function_ {
return new Builder\Function_($name);
}
/**
* Creates a namespace/class use builder.
*
* @param ncc\ThirdParty\nikic\PhpParser\Node\Name|string $name Name of the entity (namespace or class) to alias
* @param Node\Name|string $name Name of the entity (namespace or class) to alias
*
* @return ncc\ThirdParty\nikic\PhpParser\Builder\Use_ The created use builder
* @return Builder\Use_ The created use builder
*/
public function use($name): ncc\ThirdParty\nikic\PhpParser\Builder\Use_ {
return new ncc\ThirdParty\nikic\PhpParser\Builder\Use_($name, Use_::TYPE_NORMAL);
public function use($name): Builder\Use_ {
return new Builder\Use_($name, Use_::TYPE_NORMAL);
}
/**
* Creates a function use builder.
*
* @param ncc\ThirdParty\nikic\PhpParser\Node\Name|string $name Name of the function to alias
* @param Node\Name|string $name Name of the function to alias
*
* @return ncc\ThirdParty\nikic\PhpParser\Builder\Use_ The created use function builder
* @return Builder\Use_ The created use function builder
*/
public function useFunction($name): ncc\ThirdParty\nikic\PhpParser\Builder\Use_ {
return new ncc\ThirdParty\nikic\PhpParser\Builder\Use_($name, Use_::TYPE_FUNCTION);
public function useFunction($name): Builder\Use_ {
return new Builder\Use_($name, Use_::TYPE_FUNCTION);
}
/**
* Creates a constant use builder.
*
* @param ncc\ThirdParty\nikic\PhpParser\Node\Name|string $name Name of the const to alias
* @param Node\Name|string $name Name of the const to alias
*
* @return ncc\ThirdParty\nikic\PhpParser\Builder\Use_ The created use const builder
* @return Builder\Use_ The created use const builder
*/
public function useConst($name): ncc\ThirdParty\nikic\PhpParser\Builder\Use_ {
return new ncc\ThirdParty\nikic\PhpParser\Builder\Use_($name, Use_::TYPE_CONSTANT);
public function useConst($name): Builder\Use_ {
return new Builder\Use_($name, Use_::TYPE_CONSTANT);
}
/**
* Creates a class constant builder.
*
* @param string|Identifier $name Name
* @param ncc\ThirdParty\nikic\PhpParser\Node\Expr|bool|null|int|float|string|array $value Value
* @param Node\Expr|bool|null|int|float|string|array $value Value
*
* @return ncc\ThirdParty\nikic\PhpParser\Builder\ClassConst The created use const builder
* @return Builder\ClassConst The created use const builder
*/
public function classConst($name, $value): ncc\ThirdParty\nikic\PhpParser\Builder\ClassConst {
return new ncc\ThirdParty\nikic\PhpParser\Builder\ClassConst($name, $value);
public function classConst($name, $value): Builder\ClassConst {
return new Builder\ClassConst($name, $value);
}
/**
@ -201,10 +201,10 @@ class BuilderFactory {
*
* @param string|Identifier $name Name
*
* @return ncc\ThirdParty\nikic\PhpParser\Builder\EnumCase The created use const builder
* @return Builder\EnumCase The created use const builder
*/
public function enumCase($name): ncc\ThirdParty\nikic\PhpParser\Builder\EnumCase {
return new ncc\ThirdParty\nikic\PhpParser\Builder\EnumCase($name);
public function enumCase($name): Builder\EnumCase {
return new Builder\EnumCase($name);
}
/**

View file

@ -215,12 +215,12 @@ final class BuilderHelpers {
* Normalizes a value: Converts nulls, booleans, integers,
* floats, strings and arrays into their respective nodes
*
* @param ncc\ThirdParty\nikic\PhpParser\Node\Expr|bool|null|int|float|string|array|\UnitEnum $value The value to normalize
* @param Node\Expr|bool|null|int|float|string|array|\UnitEnum $value The value to normalize
*
* @return Expr The normalized value
*/
public static function normalizeValue($value): Expr {
if ($value instanceof ncc\ThirdParty\nikic\PhpParser\Node\Expr) {
if ($value instanceof Node\Expr) {
return $value;
}
@ -254,12 +254,12 @@ final class BuilderHelpers {
foreach ($value as $itemKey => $itemValue) {
// for consecutive, numeric keys don't generate keys
if (null !== $lastKey && ++$lastKey === $itemKey) {
$items[] = new ncc\ThirdParty\nikic\PhpParser\Node\ArrayItem(
$items[] = new Node\ArrayItem(
self::normalizeValue($itemValue)
);
} else {
$lastKey = null;
$items[] = new ncc\ThirdParty\nikic\PhpParser\Node\ArrayItem(
$items[] = new Node\ArrayItem(
self::normalizeValue($itemValue),
self::normalizeValue($itemKey)
);
@ -298,20 +298,20 @@ final class BuilderHelpers {
/**
* Normalizes a attribute: Converts attribute to the Attribute Group if needed.
*
* @param ncc\ThirdParty\nikic\PhpParser\Node\Attribute|ncc\ThirdParty\nikic\PhpParser\Node\AttributeGroup $attribute
* @param Node\Attribute|Node\AttributeGroup $attribute
*
* @return ncc\ThirdParty\nikic\PhpParser\Node\AttributeGroup The Attribute Group
* @return Node\AttributeGroup The Attribute Group
*/
public static function normalizeAttribute($attribute): ncc\ThirdParty\nikic\PhpParser\Node\AttributeGroup {
if ($attribute instanceof ncc\ThirdParty\nikic\PhpParser\Node\AttributeGroup) {
public static function normalizeAttribute($attribute): Node\AttributeGroup {
if ($attribute instanceof Node\AttributeGroup) {
return $attribute;
}
if (!($attribute instanceof ncc\ThirdParty\nikic\PhpParser\Node\Attribute)) {
if (!($attribute instanceof Node\Attribute)) {
throw new \LogicException('Attribute must be an instance of PhpParser\Node\Attribute or PhpParser\Node\AttributeGroup');
}
return new ncc\ThirdParty\nikic\PhpParser\Node\AttributeGroup([$attribute]);
return new Node\AttributeGroup([$attribute]);
}
/**

View file

@ -3,8 +3,7 @@
namespace ncc\ThirdParty\nikic\PhpParser\Internal;
if (\PHP_VERSION_ID >= 80000) {
class TokenPolyfill extends \PhpToken {
}
class_alias(\PhpToken::class, TokenPolyfill::class);
return;
}

View file

@ -260,7 +260,7 @@ class NodeTraverser implements NodeTraverserInterface {
}
private function ensureReplacementReasonable(Node $old, Node $new): void {
if ($old instanceof ncc\ThirdParty\nikic\PhpParser\Node\Stmt && $new instanceof ncc\ThirdParty\nikic\PhpParser\Node\Expr) {
if ($old instanceof Node\Stmt && $new instanceof Node\Expr) {
throw new \LogicException(
"Trying to replace statement ({$old->getType()}) " .
"with expression ({$new->getType()}). Are you missing a " .
@ -268,7 +268,7 @@ class NodeTraverser implements NodeTraverserInterface {
);
}
if ($old instanceof ncc\ThirdParty\nikic\PhpParser\Node\Expr && $new instanceof ncc\ThirdParty\nikic\PhpParser\Node\Stmt) {
if ($old instanceof Node\Expr && $new instanceof Node\Stmt) {
throw new \LogicException(
"Trying to replace expression ({$old->getType()}) " .
"with statement ({$new->getType()})"

View file

@ -156,7 +156,7 @@ class NameResolver extends NodeVisitorAbstract {
$adaptation->trait = $this->resolveClassName($adaptation->trait);
}
if ($adaptation instanceof \ncc\ThirdParty\nikic\PhpParser\Node\Stmt\TraitUseAdaptation\Precedence) {
if ($adaptation instanceof Stmt\TraitUseAdaptation\Precedence) {
foreach ($adaptation->insteadof as &$insteadof) {
$insteadof = $this->resolveClassName($insteadof);
}

View file

@ -10,7 +10,7 @@ interface Parser {
* @param ErrorHandler|null $errorHandler Error handler to use for lexer/parser errors, defaults
* to ErrorHandler\Throwing.
*
* @return ncc\ThirdParty\nikic\PhpParser\Node\Stmt[]|null Array of statements (or null non-throwing error handler is used and
* @return Node\Stmt[]|null Array of statements (or null non-throwing error handler is used and
* the parser was unable to recover from an error).
*/
public function parse(string $code, ?ErrorHandler $errorHandler = null): ?array;

View file

@ -2027,19 +2027,19 @@ class Php7 extends \ncc\ThirdParty\nikic\PhpParser\ParserAbstract
$self->semStack[$stackPos-(2-1)][] = $self->semStack[$stackPos-(2-2)]; $self->semValue = $self->semStack[$stackPos-(2-1)];
},
357 => static function ($self, $stackPos) {
$self->semValue = new \ncc\ThirdParty\nikic\PhpParser\Node\Stmt\TraitUseAdaptation\Precedence($self->semStack[$stackPos-(4-1)][0], $self->semStack[$stackPos-(4-1)][1], $self->semStack[$stackPos-(4-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos]));
$self->semValue = new Stmt\TraitUseAdaptation\Precedence($self->semStack[$stackPos-(4-1)][0], $self->semStack[$stackPos-(4-1)][1], $self->semStack[$stackPos-(4-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos]));
},
358 => static function ($self, $stackPos) {
$self->semValue = new \ncc\ThirdParty\nikic\PhpParser\Node\Stmt\TraitUseAdaptation\Alias($self->semStack[$stackPos-(5-1)][0], $self->semStack[$stackPos-(5-1)][1], $self->semStack[$stackPos-(5-3)], $self->semStack[$stackPos-(5-4)], $self->getAttributes($self->tokenStartStack[$stackPos-(5-1)], $self->tokenEndStack[$stackPos]));
$self->semValue = new Stmt\TraitUseAdaptation\Alias($self->semStack[$stackPos-(5-1)][0], $self->semStack[$stackPos-(5-1)][1], $self->semStack[$stackPos-(5-3)], $self->semStack[$stackPos-(5-4)], $self->getAttributes($self->tokenStartStack[$stackPos-(5-1)], $self->tokenEndStack[$stackPos]));
},
359 => static function ($self, $stackPos) {
$self->semValue = new \ncc\ThirdParty\nikic\PhpParser\Node\Stmt\TraitUseAdaptation\Alias($self->semStack[$stackPos-(4-1)][0], $self->semStack[$stackPos-(4-1)][1], $self->semStack[$stackPos-(4-3)], null, $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos]));
$self->semValue = new Stmt\TraitUseAdaptation\Alias($self->semStack[$stackPos-(4-1)][0], $self->semStack[$stackPos-(4-1)][1], $self->semStack[$stackPos-(4-3)], null, $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos]));
},
360 => static function ($self, $stackPos) {
$self->semValue = new \ncc\ThirdParty\nikic\PhpParser\Node\Stmt\TraitUseAdaptation\Alias($self->semStack[$stackPos-(4-1)][0], $self->semStack[$stackPos-(4-1)][1], null, $self->semStack[$stackPos-(4-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos]));
$self->semValue = new Stmt\TraitUseAdaptation\Alias($self->semStack[$stackPos-(4-1)][0], $self->semStack[$stackPos-(4-1)][1], null, $self->semStack[$stackPos-(4-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos]));
},
361 => static function ($self, $stackPos) {
$self->semValue = new \ncc\ThirdParty\nikic\PhpParser\Node\Stmt\TraitUseAdaptation\Alias($self->semStack[$stackPos-(4-1)][0], $self->semStack[$stackPos-(4-1)][1], null, $self->semStack[$stackPos-(4-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos]));
$self->semValue = new Stmt\TraitUseAdaptation\Alias($self->semStack[$stackPos-(4-1)][0], $self->semStack[$stackPos-(4-1)][1], null, $self->semStack[$stackPos-(4-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos]));
},
362 => static function ($self, $stackPos) {
$self->semValue = array($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)]);

View file

@ -2042,19 +2042,19 @@ class Php8 extends \ncc\ThirdParty\nikic\PhpParser\ParserAbstract
$self->semStack[$stackPos-(2-1)][] = $self->semStack[$stackPos-(2-2)]; $self->semValue = $self->semStack[$stackPos-(2-1)];
},
358 => static function ($self, $stackPos) {
$self->semValue = new \ncc\ThirdParty\nikic\PhpParser\Node\Stmt\TraitUseAdaptation\Precedence($self->semStack[$stackPos-(4-1)][0], $self->semStack[$stackPos-(4-1)][1], $self->semStack[$stackPos-(4-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos]));
$self->semValue = new Stmt\TraitUseAdaptation\Precedence($self->semStack[$stackPos-(4-1)][0], $self->semStack[$stackPos-(4-1)][1], $self->semStack[$stackPos-(4-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos]));
},
359 => static function ($self, $stackPos) {
$self->semValue = new \ncc\ThirdParty\nikic\PhpParser\Node\Stmt\TraitUseAdaptation\Alias($self->semStack[$stackPos-(5-1)][0], $self->semStack[$stackPos-(5-1)][1], $self->semStack[$stackPos-(5-3)], $self->semStack[$stackPos-(5-4)], $self->getAttributes($self->tokenStartStack[$stackPos-(5-1)], $self->tokenEndStack[$stackPos]));
$self->semValue = new Stmt\TraitUseAdaptation\Alias($self->semStack[$stackPos-(5-1)][0], $self->semStack[$stackPos-(5-1)][1], $self->semStack[$stackPos-(5-3)], $self->semStack[$stackPos-(5-4)], $self->getAttributes($self->tokenStartStack[$stackPos-(5-1)], $self->tokenEndStack[$stackPos]));
},
360 => static function ($self, $stackPos) {
$self->semValue = new \ncc\ThirdParty\nikic\PhpParser\Node\Stmt\TraitUseAdaptation\Alias($self->semStack[$stackPos-(4-1)][0], $self->semStack[$stackPos-(4-1)][1], $self->semStack[$stackPos-(4-3)], null, $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos]));
$self->semValue = new Stmt\TraitUseAdaptation\Alias($self->semStack[$stackPos-(4-1)][0], $self->semStack[$stackPos-(4-1)][1], $self->semStack[$stackPos-(4-3)], null, $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos]));
},
361 => static function ($self, $stackPos) {
$self->semValue = new \ncc\ThirdParty\nikic\PhpParser\Node\Stmt\TraitUseAdaptation\Alias($self->semStack[$stackPos-(4-1)][0], $self->semStack[$stackPos-(4-1)][1], null, $self->semStack[$stackPos-(4-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos]));
$self->semValue = new Stmt\TraitUseAdaptation\Alias($self->semStack[$stackPos-(4-1)][0], $self->semStack[$stackPos-(4-1)][1], null, $self->semStack[$stackPos-(4-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos]));
},
362 => static function ($self, $stackPos) {
$self->semValue = new \ncc\ThirdParty\nikic\PhpParser\Node\Stmt\TraitUseAdaptation\Alias($self->semStack[$stackPos-(4-1)][0], $self->semStack[$stackPos-(4-1)][1], null, $self->semStack[$stackPos-(4-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos]));
$self->semValue = new Stmt\TraitUseAdaptation\Alias($self->semStack[$stackPos-(4-1)][0], $self->semStack[$stackPos-(4-1)][1], null, $self->semStack[$stackPos-(4-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos]));
},
363 => static function ($self, $stackPos) {
$self->semValue = array($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)]);

View file

@ -174,7 +174,7 @@ abstract class ParserAbstract implements Parser {
* @param ErrorHandler|null $errorHandler Error handler to use for lexer/parser errors, defaults
* to ErrorHandler\Throwing.
*
* @return ncc\ThirdParty\nikic\PhpParser\Node\Stmt[]|null Array of statements (or null non-throwing error handler is used and
* @return Node\Stmt[]|null Array of statements (or null non-throwing error handler is used and
* the parser was unable to recover from an error).
*/
public function parse(string $code, ?ErrorHandler $errorHandler = null): ?array {
@ -555,8 +555,8 @@ abstract class ParserAbstract implements Parser {
/**
* Moves statements of semicolon-style namespaces into $ns->stmts and checks various error conditions.
*
* @param ncc\ThirdParty\nikic\PhpParser\Node\Stmt[] $stmts
* @return ncc\ThirdParty\nikic\PhpParser\Node\Stmt[]
* @param Node\Stmt[] $stmts
* @return Node\Stmt[]
*/
protected function handleNamespaces(array $stmts): array {
$hasErrored = false;
@ -569,10 +569,10 @@ abstract class ParserAbstract implements Parser {
// For braced namespaces we only have to check that there are no invalid statements between the namespaces
$afterFirstNamespace = false;
foreach ($stmts as $stmt) {
if ($stmt instanceof ncc\ThirdParty\nikic\PhpParser\Node\Stmt\Namespace_) {
if ($stmt instanceof Node\Stmt\Namespace_) {
$afterFirstNamespace = true;
} elseif (!$stmt instanceof ncc\ThirdParty\nikic\PhpParser\Node\Stmt\HaltCompiler
&& !$stmt instanceof ncc\ThirdParty\nikic\PhpParser\Node\Stmt\Nop
} elseif (!$stmt instanceof Node\Stmt\HaltCompiler
&& !$stmt instanceof Node\Stmt\Nop
&& $afterFirstNamespace && !$hasErrored) {
$this->emitError(new Error(
'No code may exist outside of namespace {}', $stmt->getAttributes()));
@ -586,7 +586,7 @@ abstract class ParserAbstract implements Parser {
$targetStmts = &$resultStmts;
$lastNs = null;
foreach ($stmts as $stmt) {
if ($stmt instanceof ncc\ThirdParty\nikic\PhpParser\Node\Stmt\Namespace_) {
if ($stmt instanceof Node\Stmt\Namespace_) {
if ($lastNs !== null) {
$this->fixupNamespaceAttributes($lastNs);
}
@ -600,7 +600,7 @@ abstract class ParserAbstract implements Parser {
$targetStmts = &$resultStmts;
}
$lastNs = $stmt;
} elseif ($stmt instanceof ncc\ThirdParty\nikic\PhpParser\Node\Stmt\HaltCompiler) {
} elseif ($stmt instanceof Node\Stmt\HaltCompiler) {
// __halt_compiler() is not moved into the namespace
$resultStmts[] = $stmt;
} else {
@ -614,7 +614,7 @@ abstract class ParserAbstract implements Parser {
}
}
private function fixupNamespaceAttributes(ncc\ThirdParty\nikic\PhpParser\Node\Stmt\Namespace_ $stmt): void {
private function fixupNamespaceAttributes(Node\Stmt\Namespace_ $stmt): void {
// We moved the statements into the namespace node, as such the end of the namespace node
// needs to be extended to the end of the statements.
if (empty($stmt->stmts)) {
@ -659,7 +659,7 @@ abstract class ParserAbstract implements Parser {
$style = null;
$hasNotAllowedStmts = false;
foreach ($stmts as $i => $stmt) {
if ($stmt instanceof ncc\ThirdParty\nikic\PhpParser\Node\Stmt\Namespace_) {
if ($stmt instanceof Node\Stmt\Namespace_) {
$currentStyle = null === $stmt->stmts ? 'semicolon' : 'brace';
if (null === $style) {
$style = $currentStyle;
@ -681,14 +681,14 @@ abstract class ParserAbstract implements Parser {
}
/* declare(), __halt_compiler() and nops can be used before a namespace declaration */
if ($stmt instanceof ncc\ThirdParty\nikic\PhpParser\Node\Stmt\Declare_
|| $stmt instanceof ncc\ThirdParty\nikic\PhpParser\Node\Stmt\HaltCompiler
|| $stmt instanceof ncc\ThirdParty\nikic\PhpParser\Node\Stmt\Nop) {
if ($stmt instanceof Node\Stmt\Declare_
|| $stmt instanceof Node\Stmt\HaltCompiler
|| $stmt instanceof Node\Stmt\Nop) {
continue;
}
/* There may be a hashbang line at the very start of the file */
if ($i === 0 && $stmt instanceof ncc\ThirdParty\nikic\PhpParser\Node\Stmt\InlineHTML && preg_match('/\A#!.*\r?\n\z/', $stmt->value)) {
if ($i === 0 && $stmt instanceof Node\Stmt\InlineHTML && preg_match('/\A#!.*\r?\n\z/', $stmt->value)) {
continue;
}
@ -709,7 +709,7 @@ abstract class ParserAbstract implements Parser {
return $name;
}
return new ncc\ThirdParty\nikic\PhpParser\Node\Identifier($lowerName, $name->getAttributes());
return new Node\Identifier($lowerName, $name->getAttributes());
}
/**
@ -860,7 +860,7 @@ abstract class ParserAbstract implements Parser {
return new String_($contents, $attributes);
} else {
assert(count($contents) > 0);
if (!$contents[0] instanceof ncc\ThirdParty\nikic\PhpParser\Node\InterpolatedStringPart) {
if (!$contents[0] instanceof Node\InterpolatedStringPart) {
// If there is no leading encapsed string part, pretend there is an empty one
$this->stripIndentation(
'', $indentLen, $indentChar, true, false, $contents[0]->getAttributes()
@ -869,7 +869,7 @@ abstract class ParserAbstract implements Parser {
$newContents = [];
foreach ($contents as $i => $part) {
if ($part instanceof ncc\ThirdParty\nikic\PhpParser\Node\InterpolatedStringPart) {
if ($part instanceof Node\InterpolatedStringPart) {
$isLast = $i === \count($contents) - 1;
$part->value = $this->stripIndentation(
$part->value, $indentLen, $indentChar,
@ -977,13 +977,13 @@ abstract class ParserAbstract implements Parser {
protected function fixupArrayDestructuring(Array_ $node): Expr\List_ {
$this->createdArrays->detach($node);
return new Expr\List_(array_map(function (ncc\ThirdParty\nikic\PhpParser\Node\ArrayItem $item) {
return new Expr\List_(array_map(function (Node\ArrayItem $item) {
if ($item->value instanceof Expr\Error) {
// We used Error as a placeholder for empty elements, which are legal for destructuring.
return null;
}
if ($item->value instanceof Array_) {
return new ncc\ThirdParty\nikic\PhpParser\Node\ArrayItem(
return new Node\ArrayItem(
$this->fixupArrayDestructuring($item->value),
$item->key, $item->byRef, $item->getAttributes());
}
@ -1196,7 +1196,7 @@ abstract class ParserAbstract implements Parser {
}
}
/** @param array<ncc\ThirdParty\nikic\PhpParser\Node\Arg|ncc\ThirdParty\nikic\PhpParser\Node\VariadicPlaceholder> $args */
/** @param array<Node\Arg|Node\VariadicPlaceholder> $args */
private function isSimpleExit(array $args): bool {
if (\count($args) === 0) {
return true;
@ -1210,7 +1210,7 @@ abstract class ParserAbstract implements Parser {
}
/**
* @param array<ncc\ThirdParty\nikic\PhpParser\Node\Arg|ncc\ThirdParty\nikic\PhpParser\Node\VariadicPlaceholder> $args
* @param array<Node\Arg|Node\VariadicPlaceholder> $args
* @param array<string, mixed> $attrs
*/
protected function createExitExpr(string $name, int $namePos, array $args, array $attrs): Expr {

View file

@ -815,12 +815,12 @@ class Standard extends PrettyPrinterAbstract {
: ' {' . $this->pStmts($node->adaptations) . $this->nl . '}');
}
protected function pStmt_TraitUseAdaptation_Precedence(\ncc\ThirdParty\nikic\PhpParser\Node\Stmt\TraitUseAdaptation\Precedence $node): string {
protected function pStmt_TraitUseAdaptation_Precedence(Stmt\TraitUseAdaptation\Precedence $node): string {
return $this->p($node->trait) . '::' . $node->method
. ' insteadof ' . $this->pCommaSeparated($node->insteadof) . ';';
}
protected function pStmt_TraitUseAdaptation_Alias(\ncc\ThirdParty\nikic\PhpParser\Node\Stmt\TraitUseAdaptation\Alias $node): string {
protected function pStmt_TraitUseAdaptation_Alias(Stmt\TraitUseAdaptation\Alias $node): string {
return (null !== $node->trait ? $this->p($node->trait) . '::' : '')
. $node->method . ' as'
. (null !== $node->newModifier ? ' ' . rtrim($this->pModifiers($node->newModifier), ' ') : '')

View file

@ -122,7 +122,7 @@ abstract class PrettyPrinterAbstract implements PrettyPrinter {
/** @var TokenStream|null Original tokens for use in format-preserving pretty print */
protected ?TokenStream $origTokens;
/** @var ncc\ThirdParty\nikic\PhpParser\Internal\Differ<Node> Differ for node lists */
/** @var Internal\Differ<Node> Differ for node lists */
protected Differ $nodeListDiffer;
/** @var array<string, bool> Map determining whether a certain character is a label character */
protected array $labelCharMap;
@ -1069,7 +1069,7 @@ abstract class PrettyPrinterAbstract implements PrettyPrinter {
}
break;
case self::FIXUP_ENCAPSED:
if (!$subNode instanceof ncc\ThirdParty\nikic\PhpParser\Node\InterpolatedStringPart
if (!$subNode instanceof Node\InterpolatedStringPart
&& !$this->origTokens->haveBraces($subStartPos, $subEndPos)
) {
return '{' . $this->p($subNode) . '}';
@ -1115,7 +1115,7 @@ abstract class PrettyPrinterAbstract implements PrettyPrinter {
* @return bool Whether parentheses are required
*/
protected function callLhsRequiresParens(Node $node): bool {
return !($node instanceof ncc\ThirdParty\nikic\PhpParser\Node\Name
return !($node instanceof Node\Name
|| $node instanceof Expr\Variable
|| $node instanceof Expr\ArrayDimFetch
|| $node instanceof Expr\FuncCall
@ -1147,7 +1147,7 @@ abstract class PrettyPrinterAbstract implements PrettyPrinter {
*/
protected function staticDereferenceLhsRequiresParens(Node $node): bool {
return !($node instanceof Expr\Variable
|| $node instanceof ncc\ThirdParty\nikic\PhpParser\Node\Name
|| $node instanceof Node\Name
|| $node instanceof Expr\ArrayDimFetch
|| $node instanceof Expr\PropertyFetch
|| $node instanceof Expr\NullsafePropertyFetch
@ -1169,7 +1169,7 @@ abstract class PrettyPrinterAbstract implements PrettyPrinter {
* @return bool Whether parentheses are required
*/
protected function newOperandRequiresParens(Node $node): bool {
if ($node instanceof ncc\ThirdParty\nikic\PhpParser\Node\Name || $node instanceof Expr\Variable) {
if ($node instanceof Node\Name || $node instanceof Expr\Variable) {
return false;
}
if ($node instanceof Expr\ArrayDimFetch || $node instanceof Expr\PropertyFetch ||
@ -1272,7 +1272,7 @@ abstract class PrettyPrinterAbstract implements PrettyPrinter {
return;
}
$this->nodeListDiffer = new ncc\ThirdParty\nikic\PhpParser\Internal\Differ(function ($a, $b) {
$this->nodeListDiffer = new Internal\Differ(function ($a, $b) {
if ($a instanceof Node && $b instanceof Node) {
return $a === $b->getAttribute('origNode');
}
@ -1516,7 +1516,7 @@ abstract class PrettyPrinterAbstract implements PrettyPrinter {
Stmt\Property::class . '->props' => ', ',
Stmt\StaticVar::class . '->vars' => ', ',
Stmt\TraitUse::class . '->traits' => ', ',
\ncc\ThirdParty\nikic\PhpParser\Node\Stmt\TraitUseAdaptation\Precedence::class . '->insteadof' => ', ',
Stmt\TraitUseAdaptation\Precedence::class . '->insteadof' => ', ',
Stmt\Unset_::class . '->vars' => ', ',
Stmt\UseUse::class . '->uses' => ', ',
MatchArm::class . '->conds' => ', ',

View file

@ -5,7 +5,7 @@ namespace ncc\ThirdParty\nikic\PhpParser;
/**
* A PHP token. On PHP 8.0 this extends from PhpToken.
*/
class Token extends ncc\ThirdParty\nikic\PhpParser\Internal\TokenPolyfill {
class Token extends Internal\TokenPolyfill {
/** Get (exclusive) zero-based end position of the token. */
public function getEndPos(): int {
return $this->pos + \strlen($this->text);