Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Support for php-parser 5 #85

Merged
merged 5 commits into from
May 11, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 9 additions & 8 deletions .github/workflows/tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,15 @@ jobs:
- name: Checkout code
uses: actions/checkout@v2

- name: Setup PHP
uses: shivammathur/setup-php@v2
with:
php-version: ${{ matrix.php-version }}
extensions: dom, curl, libxml, mbstring, zip, pcntl, pdo, sqlite, pdo_sqlite, gd
coverage: none
ini-values: "memory_limit=-1"
tools: composer

- name: Determine composer cache directory
id: determine-composer-cache-directory
run: 'echo "::set-output name=directory::$(composer config cache-dir)"'
Expand All @@ -55,14 +64,6 @@ jobs:
key: dependencies-os-${{ matrix.os }}-php-${{ matrix.php-version }}-laravel-${{ matrix.laravel-version }}-composer-${{ hashFiles('**/composer.lock') }}
restore-keys: dependencies-os-${{ matrix.os }}-php-${{ matrix.php-version }}-laravel-${{ matrix.laravel-version }}-composer-

- name: Setup PHP
uses: shivammathur/setup-php@v2
with:
php-version: ${{ matrix.php-version }}
extensions: dom, curl, libxml, mbstring, zip, pcntl, pdo, sqlite, pdo_sqlite, gd
coverage: none
ini-values: "memory_limit=-1"

- name: Setup problem matchers for PHP
run: echo "::add-matcher::${{ runner.tool_cache }}/php.json"

Expand Down
2 changes: 1 addition & 1 deletion composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
}
],
"require": {
"nikic/php-parser": "^4.11"
"nikic/php-parser": "^5.0"
},
"require-dev": {
"laravel/laravel": "^6.0 || ^7.0 || ^8.0 || ^9.0",
Expand Down
5 changes: 1 addition & 4 deletions src/Endpoints/PHP/Extends_.php
Original file line number Diff line number Diff line change
Expand Up @@ -30,10 +30,7 @@ protected function get()
return $this->file->astQuery()
->class()
->extends
->remember('formatted_extends', function ($node) {
$parts = $node->parts ?? null;
return $parts ? join('\\', $parts) : null;
})
->remember('formatted_extends', fn ($node) => $node->name)
->recall('formatted_extends')
->first();
}
Expand Down
4 changes: 1 addition & 3 deletions src/Endpoints/PHP/Implements_.php
Original file line number Diff line number Diff line change
Expand Up @@ -37,9 +37,7 @@ protected function get()
->class()
->implements
->get()
->map(function ($name) {
return implode('\\', $name->parts);
})->toArray();
->map(fn ($node) => $node->name)->toArray();
}

protected function set($newImplements)
Expand Down
7 changes: 2 additions & 5 deletions src/Endpoints/PHP/Namespace_.php
Original file line number Diff line number Diff line change
Expand Up @@ -37,10 +37,7 @@ protected function get()
{
return $this->file->astQuery()
->namespace()
->remember('formatted_namespace', function ($node) {
$parts = $node->name->parts ?? null;
return $parts ? join('\\', $parts) : null;
})
->remember('formatted_namespace', fn ($node) => $node->name)
->recall('formatted_namespace')
->first();
}
Expand All @@ -53,7 +50,7 @@ protected function set(string $newNamespace)

if ($namespace) {
// Modifying existing namespace
$namespace->name->parts = explode("\\", $newNamespace);
$namespace->name->name = $newNamespace;
} else {
// Add a namespace
$ast = $this->file->ast();
Expand Down
1 change: 0 additions & 1 deletion src/Endpoints/PHP/UseTrait.php
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,6 @@ protected function get()
->class()
->traitUse()
->name()
->parts
->get()
->toArray();

Expand Down
2 changes: 1 addition & 1 deletion src/Endpoints/PHP/Use_.php
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ protected function get()
->uses
->get()
->map(function ($useStatement) {
$base = join('\\', $useStatement->name->parts);
$base = $useStatement->name;
return $base . ($useStatement->alias ? ' as ' . $useStatement->alias : '');
})->toArray();
}
Expand Down
2 changes: 0 additions & 2 deletions src/PHPFile.php
Original file line number Diff line number Diff line change
Expand Up @@ -50,8 +50,6 @@ class PHPFile

protected $tokens;

protected $lexer;

protected $directives = [];

public function __construct(
Expand Down
3 changes: 2 additions & 1 deletion src/Support/AST/ShallowNodeFinder.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

namespace Archetype\Support\AST;

use PhpParser\Node;
use PhpParser\NodeFinder;

class ShallowNodeFinder extends NodeFinder
Expand All @@ -27,7 +28,7 @@ public function findInstanceOf($node, string $class) : array
})->filter()->flatten()->toArray();
}

public function findFirstInstanceOf($node, string $class)
public function findFirstInstanceOf($node, string $class): ?Node
{
return collect($this->findInstanceOf($node, $class))->first();
}
Expand Down
8 changes: 4 additions & 4 deletions src/Support/PSR2PrettyPrinter.php
Original file line number Diff line number Diff line change
Expand Up @@ -18,13 +18,13 @@ public function __construct($options = [])
}

// Fix empty line before class definition
protected function pStmt_Class(Class_ $node)
protected function pStmt_Class(Class_ $node): string
{
return $this->pClassCommon($node, ' ' . $node->name);
}

// Fix empty line before class definition
protected function pStmt_ClassMethod(ClassMethod $node)
protected function pStmt_ClassMethod(ClassMethod $node): string
{
return $this->pAttrGroups($node->attrGroups)
. $this->pModifiers($node->flags)
Expand All @@ -36,7 +36,7 @@ protected function pStmt_ClassMethod(ClassMethod $node)
: ';');
}

protected function pExpr_Array(Array_ $node)
protected function pExpr_Array(Array_ $node): string
{
$stmts = $this->pCommaSeparatedMultiline($node->items, true);
$lineBreaked = $stmts ? $stmts . $this->nl : $stmts;
Expand All @@ -48,7 +48,7 @@ protected function pExpr_Array(Array_ $node)
*
* @param [type] $nodes
*/
protected function pClassCommon(Class_ $node, $afterClassToken)
protected function pClassCommon(Class_ $node, $afterClassToken): string
{
return $this->pModifiers($node->flags)
. 'class' . $afterClassToken
Expand Down
21 changes: 6 additions & 15 deletions src/Traits/HasIO.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
use PhpParser\Error as PHPParserError;
use PhpParser\NodeTraverser;
use PhpParser\NodeVisitor\CloningVisitor;
use PhpParser\ParserFactory;

trait HasIO
{
Expand Down Expand Up @@ -88,23 +89,13 @@ public function preview()

public function parse()
{
$this->lexer = new \PhpParser\Lexer\Emulative([
'usedAttributes' => [
'comments',
'startLine', 'endLine',
'startTokenPos', 'endTokenPos',
],
]);

$parser = new \PhpParser\Parser\Php7($this->lexer);

//$parser = (new ParserFactory)->create(ParserFactory::PREFER_PHP7);
$traverser = new NodeTraverser();
$traverser->addVisitor(new CloningVisitor());

$parser = (new ParserFactory)->createForNewestSupportedVersion();

$traverser = new NodeTraverser(new CloningVisitor());

try {
$this->originalAst = $parser->parse($this->contents());
$this->tokens = $this->lexer->getTokens();
$this->tokens = $parser->getTokens();
} catch (PHPParserError $error) {
// rethrow with extra information
throw new FileParseError($this->input->absolutePath(), $error);
Expand Down
4 changes: 2 additions & 2 deletions tests/Unit/Support/AST/ASTQueryBuilderTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -99,15 +99,15 @@
PHPFile::fromString('class Cool extends Ice {}')
->astQuery()
->class()
->where(fn($query) => $query->where('extends->parts', ['Ice'])->get())
->where(fn($query) => $query->where('extends->name', 'Ice')->get())
->assertMatchCount(1);
});

test('unresolved where closures with matches are considered truthy', function() {
PHPFile::fromString('class Cool extends Ice {}')
->astQuery()
->class()
->where(fn($query) => $query->where('extends->parts', ['Ice']))
->where(fn($query) => $query->where('extends->name', 'Ice'))
->assertMatchCount(1);
});

Expand Down
2 changes: 1 addition & 1 deletion tests/Unit/Support/AST/PrettyPrintingTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ public function sleeping()
CODE;

it('two line breaks separate methods', function() {
$parser = (new ParserFactory)->create(ParserFactory::PREFER_PHP7);
$parser = (new ParserFactory)->createForNewestSupportedVersion();
$prettyPrinter = new PSR2PrettyPrinter;

$stmts = $parser->parse(CODE);
Expand Down
Loading