Add support for function and constant import (PHP 5.6)

This commit is contained in:
nikic
2014-03-26 22:33:45 +01:00
parent bea89a0bf2
commit 3b7829b011
6 changed files with 1535 additions and 1425 deletions

View File

@@ -138,7 +138,9 @@ top_statement:
| T_NAMESPACE namespace_name ';' { $$ = Stmt\Namespace_[$2, null]; } | T_NAMESPACE namespace_name ';' { $$ = Stmt\Namespace_[$2, null]; }
| T_NAMESPACE namespace_name '{' top_statement_list '}' { $$ = Stmt\Namespace_[$2, $4]; } | T_NAMESPACE namespace_name '{' top_statement_list '}' { $$ = Stmt\Namespace_[$2, $4]; }
| T_NAMESPACE '{' top_statement_list '}' { $$ = Stmt\Namespace_[null, $3]; } | T_NAMESPACE '{' top_statement_list '}' { $$ = Stmt\Namespace_[null, $3]; }
| T_USE use_declarations ';' { $$ = Stmt\Use_[$2]; } | T_USE use_declarations ';' { $$ = Stmt\Use_[$2, Stmt\Use_::TYPE_NORMAL]; }
| T_USE T_FUNCTION use_declarations ';' { $$ = Stmt\Use_[$3, Stmt\Use_::TYPE_FUNCTION]; }
| T_USE T_CONST use_declarations ';' { $$ = Stmt\Use_[$3, Stmt\Use_::TYPE_CONSTANT]; }
| T_CONST constant_declaration_list ';' { $$ = Stmt\Const_[$2]; } | T_CONST constant_declaration_list ';' { $$ = Stmt\Const_[$2]; }
; ;

View File

@@ -5,19 +5,26 @@ namespace PhpParser\Node\Stmt;
use PhpParser\Node\Stmt; use PhpParser\Node\Stmt;
/** /**
* @property int $type Type of alias
* @property UseUse[] $uses Aliases * @property UseUse[] $uses Aliases
*/ */
class Use_ extends Stmt class Use_ extends Stmt
{ {
const TYPE_NORMAL = 1;
const TYPE_FUNCTION = 2;
const TYPE_CONSTANT = 3;
/** /**
* Constructs an alias (use) list node. * Constructs an alias (use) list node.
* *
* @param UseUse[] $uses Aliases * @param UseUse[] $uses Aliases
* @param int $type Type of alias
* @param array $attributes Additional attributes * @param array $attributes Additional attributes
*/ */
public function __construct(array $uses, array $attributes = array()) { public function __construct(array $uses, $type = self::TYPE_NORMAL, array $attributes = array()) {
parent::__construct( parent::__construct(
array( array(
'type' => $type,
'uses' => $uses, 'uses' => $uses,
), ),
$attributes $attributes

File diff suppressed because it is too large Load Diff

View File

@@ -496,7 +496,10 @@ class Standard extends PrettyPrinterAbstract
} }
public function pStmt_Use(Stmt\Use_ $node) { public function pStmt_Use(Stmt\Use_ $node) {
return 'use ' . $this->pCommaSeparated($node->uses) . ';'; return 'use '
. ($node->type === Stmt\Use_::TYPE_FUNCTION ? 'function ' : '')
. ($node->type === Stmt\Use_::TYPE_CONSTANT ? 'const ' : '')
. $this->pCommaSeparated($node->uses) . ';';
} }
public function pStmt_UseUse(Stmt\UseUse $node) { public function pStmt_UseUse(Stmt\UseUse $node) {

View File

@@ -9,9 +9,16 @@ use F\G as H, J;
// evil alias notation - Do Not Use! // evil alias notation - Do Not Use!
use \A; use \A;
use \A as B; use \A as B;
// function and constant aliases
use function foo\bar;
use function foo\bar as baz;
use const foo\BAR;
use const foo\BAR as BAZ;
----- -----
array( array(
0: Stmt_Use( 0: Stmt_Use(
type: 1
uses: array( uses: array(
0: Stmt_UseUse( 0: Stmt_UseUse(
name: Name( name: Name(
@@ -25,6 +32,7 @@ array(
) )
) )
1: Stmt_Use( 1: Stmt_Use(
type: 1
uses: array( uses: array(
0: Stmt_UseUse( 0: Stmt_UseUse(
name: Name( name: Name(
@@ -38,6 +46,7 @@ array(
) )
) )
2: Stmt_Use( 2: Stmt_Use(
type: 1
uses: array( uses: array(
0: Stmt_UseUse( 0: Stmt_UseUse(
name: Name( name: Name(
@@ -59,6 +68,7 @@ array(
) )
) )
3: Stmt_Use( 3: Stmt_Use(
type: 1
uses: array( uses: array(
0: Stmt_UseUse( 0: Stmt_UseUse(
name: Name( name: Name(
@@ -71,6 +81,7 @@ array(
) )
) )
4: Stmt_Use( 4: Stmt_Use(
type: 1
uses: array( uses: array(
0: Stmt_UseUse( 0: Stmt_UseUse(
name: Name( name: Name(
@@ -82,4 +93,60 @@ array(
) )
) )
) )
5: Stmt_Use(
type: 2
uses: array(
0: Stmt_UseUse(
name: Name(
parts: array(
0: foo
1: bar
)
)
alias: bar
)
)
)
6: Stmt_Use(
type: 2
uses: array(
0: Stmt_UseUse(
name: Name(
parts: array(
0: foo
1: bar
)
)
alias: baz
)
)
)
7: Stmt_Use(
type: 3
uses: array(
0: Stmt_UseUse(
name: Name(
parts: array(
0: foo
1: BAR
)
)
alias: BAR
)
)
)
8: Stmt_Use(
type: 3
uses: array(
0: Stmt_UseUse(
name: Name(
parts: array(
0: foo
1: BAR
)
)
alias: BAZ
)
)
)
) )

View File

@@ -0,0 +1,20 @@
Aliases (namespacing)
-----
<?php
use A\B;
use C\D as E;
use F\G as H, J;
use function foo\bar;
use function foo\bar as baz;
use const foo\BAR;
use const foo\BAR as BAZ;
-----
use A\B;
use C\D as E;
use F\G as H, J;
use function foo\bar;
use function foo\bar as baz;
use const foo\BAR;
use const foo\BAR as BAZ;