xref: /php-ast/tests/metadata.phpt (revision 260678d4)
1--TEST--
2AST metadata
3--FILE--
4<?php
5
6$metadata = ast\get_metadata();
7foreach ($metadata as $data) {
8    $flags = [];
9    foreach ($data->flags as $flag) {
10        $flags[] = substr($flag, strrpos($flag, '\\') + 1);
11    }
12    $metadataHasFlags = count($flags) > 0;
13    $kindUsesFlags = ast\kind_uses_flags($data->kind);
14    if ($metadataHasFlags != $kindUsesFlags) {
15        echo "kind_uses_flags for $data->name is unexpectedly " . var_export($kindUsesFlags, true) . "\n";
16    }
17
18    echo "$data->name: ";
19    if ($data->flagsCombinable) {
20        echo "(combinable) ";
21    }
22    echo "[", implode(", ", $flags), "]\n";
23}
24
25// NOTE: AST_PARAM has overlapping flag values for MODIFIER_PUBLIC and PARAM_REF in php 7.4.
26// To work around this, MODIFIER_* were omitted from get_metadata in 7.4 and older.
27?>
28--EXPECT--
29AST_ARG_LIST: []
30AST_LIST: []
31AST_ARRAY: [ARRAY_SYNTAX_LIST, ARRAY_SYNTAX_LONG, ARRAY_SYNTAX_SHORT]
32AST_ENCAPS_LIST: []
33AST_EXPR_LIST: []
34AST_STMT_LIST: []
35AST_IF: []
36AST_SWITCH_LIST: []
37AST_CATCH_LIST: []
38AST_PARAM_LIST: []
39AST_CLOSURE_USES: []
40AST_PROP_DECL: (combinable) [MODIFIER_PUBLIC, MODIFIER_PROTECTED, MODIFIER_PRIVATE, MODIFIER_STATIC, MODIFIER_ABSTRACT, MODIFIER_FINAL, MODIFIER_READONLY]
41AST_CONST_DECL: []
42AST_CLASS_CONST_DECL: (combinable) [MODIFIER_PUBLIC, MODIFIER_PROTECTED, MODIFIER_PRIVATE, MODIFIER_STATIC, MODIFIER_ABSTRACT, MODIFIER_FINAL, MODIFIER_READONLY]
43AST_NAME_LIST: []
44AST_TRAIT_ADAPTATIONS: []
45AST_USE: [USE_NORMAL, USE_FUNCTION, USE_CONST]
46AST_TYPE_UNION: []
47AST_TYPE_INTERSECTION: []
48AST_ATTRIBUTE_LIST: []
49AST_ATTRIBUTE_GROUP: []
50AST_MATCH_ARM_LIST: []
51AST_NAME: [NAME_FQ, NAME_NOT_FQ, NAME_RELATIVE]
52AST_CLOSURE_VAR: [CLOSURE_USE_REF]
53AST_NULLABLE_TYPE: []
54AST_FUNC_DECL: (combinable) [MODIFIER_PUBLIC, MODIFIER_PROTECTED, MODIFIER_PRIVATE, MODIFIER_STATIC, MODIFIER_ABSTRACT, MODIFIER_FINAL, MODIFIER_READONLY, FUNC_RETURNS_REF, FUNC_GENERATOR]
55AST_CLOSURE: (combinable) [MODIFIER_PUBLIC, MODIFIER_PROTECTED, MODIFIER_PRIVATE, MODIFIER_STATIC, MODIFIER_ABSTRACT, MODIFIER_FINAL, MODIFIER_READONLY, FUNC_RETURNS_REF, FUNC_GENERATOR]
56AST_METHOD: (combinable) [MODIFIER_PUBLIC, MODIFIER_PROTECTED, MODIFIER_PRIVATE, MODIFIER_STATIC, MODIFIER_ABSTRACT, MODIFIER_FINAL, MODIFIER_READONLY, FUNC_RETURNS_REF, FUNC_GENERATOR]
57AST_ARROW_FUNC: (combinable) [MODIFIER_PUBLIC, MODIFIER_PROTECTED, MODIFIER_PRIVATE, MODIFIER_STATIC, MODIFIER_ABSTRACT, MODIFIER_FINAL, MODIFIER_READONLY, FUNC_RETURNS_REF, FUNC_GENERATOR]
58AST_CLASS: (combinable) [CLASS_ABSTRACT, CLASS_FINAL, CLASS_TRAIT, CLASS_INTERFACE, CLASS_ANONYMOUS, CLASS_ENUM, CLASS_READONLY]
59AST_MAGIC_CONST: [MAGIC_LINE, MAGIC_FILE, MAGIC_DIR, MAGIC_NAMESPACE, MAGIC_FUNCTION, MAGIC_METHOD, MAGIC_CLASS, MAGIC_TRAIT]
60AST_TYPE: [TYPE_NULL, TYPE_FALSE, TYPE_TRUE, TYPE_BOOL, TYPE_LONG, TYPE_DOUBLE, TYPE_STRING, TYPE_ARRAY, TYPE_OBJECT, TYPE_CALLABLE, TYPE_VOID, TYPE_ITERABLE, TYPE_STATIC, TYPE_MIXED, TYPE_NEVER]
61AST_CALLABLE_CONVERT: []
62AST_VAR: (combinable) [ENCAPS_VAR_DOLLAR_CURLY_VAR_VAR, ENCAPS_VAR_DOLLAR_CURLY]
63AST_CONST: []
64AST_UNPACK: []
65AST_CAST: [TYPE_NULL, TYPE_FALSE, TYPE_TRUE, TYPE_BOOL, TYPE_LONG, TYPE_DOUBLE, TYPE_STRING, TYPE_ARRAY, TYPE_OBJECT, TYPE_CALLABLE, TYPE_VOID, TYPE_ITERABLE, TYPE_STATIC, TYPE_MIXED, TYPE_NEVER]
66AST_EMPTY: []
67AST_ISSET: []
68AST_SHELL_EXEC: []
69AST_CLONE: []
70AST_EXIT: []
71AST_PRINT: []
72AST_INCLUDE_OR_EVAL: [EXEC_EVAL, EXEC_INCLUDE, EXEC_INCLUDE_ONCE, EXEC_REQUIRE, EXEC_REQUIRE_ONCE]
73AST_UNARY_OP: [UNARY_BOOL_NOT, UNARY_BITWISE_NOT, UNARY_MINUS, UNARY_PLUS, UNARY_SILENCE]
74AST_PRE_INC: []
75AST_PRE_DEC: []
76AST_POST_INC: []
77AST_POST_DEC: []
78AST_YIELD_FROM: []
79AST_GLOBAL: []
80AST_UNSET: []
81AST_RETURN: []
82AST_LABEL: []
83AST_REF: []
84AST_HALT_COMPILER: []
85AST_ECHO: []
86AST_THROW: []
87AST_GOTO: []
88AST_BREAK: []
89AST_CONTINUE: []
90AST_CLASS_NAME: []
91AST_CLASS_CONST_GROUP: (combinable) [MODIFIER_PUBLIC, MODIFIER_PROTECTED, MODIFIER_PRIVATE, MODIFIER_STATIC, MODIFIER_ABSTRACT, MODIFIER_FINAL, MODIFIER_READONLY]
92AST_DIM: (combinable) [DIM_ALTERNATIVE_SYNTAX, ENCAPS_VAR_DOLLAR_CURLY]
93AST_PROP: []
94AST_NULLSAFE_PROP: []
95AST_STATIC_PROP: []
96AST_CALL: []
97AST_CLASS_CONST: []
98AST_ASSIGN: []
99AST_ASSIGN_REF: []
100AST_ASSIGN_OP: [BINARY_BITWISE_OR, BINARY_BITWISE_AND, BINARY_BITWISE_XOR, BINARY_CONCAT, BINARY_ADD, BINARY_SUB, BINARY_MUL, BINARY_DIV, BINARY_MOD, BINARY_POW, BINARY_SHIFT_LEFT, BINARY_SHIFT_RIGHT, BINARY_COALESCE]
101AST_BINARY_OP: [BINARY_BITWISE_OR, BINARY_BITWISE_AND, BINARY_BITWISE_XOR, BINARY_CONCAT, BINARY_ADD, BINARY_SUB, BINARY_MUL, BINARY_DIV, BINARY_MOD, BINARY_POW, BINARY_SHIFT_LEFT, BINARY_SHIFT_RIGHT, BINARY_COALESCE, BINARY_BOOL_AND, BINARY_BOOL_OR, BINARY_BOOL_XOR, BINARY_IS_IDENTICAL, BINARY_IS_NOT_IDENTICAL, BINARY_IS_EQUAL, BINARY_IS_NOT_EQUAL, BINARY_IS_SMALLER, BINARY_IS_SMALLER_OR_EQUAL, BINARY_IS_GREATER, BINARY_IS_GREATER_OR_EQUAL, BINARY_SPACESHIP]
102AST_ARRAY_ELEM: [ARRAY_ELEM_REF]
103AST_NEW: []
104AST_INSTANCEOF: []
105AST_YIELD: []
106AST_STATIC: []
107AST_WHILE: []
108AST_DO_WHILE: []
109AST_IF_ELEM: []
110AST_SWITCH: []
111AST_SWITCH_CASE: []
112AST_DECLARE: []
113AST_PROP_ELEM: []
114AST_PROP_GROUP: (combinable) [MODIFIER_PUBLIC, MODIFIER_PROTECTED, MODIFIER_PRIVATE, MODIFIER_STATIC, MODIFIER_ABSTRACT, MODIFIER_FINAL, MODIFIER_READONLY]
115AST_CONST_ELEM: []
116AST_USE_TRAIT: []
117AST_TRAIT_PRECEDENCE: []
118AST_METHOD_REFERENCE: []
119AST_NAMESPACE: []
120AST_USE_ELEM: [USE_NORMAL, USE_FUNCTION, USE_CONST]
121AST_TRAIT_ALIAS: (combinable) [MODIFIER_PUBLIC, MODIFIER_PROTECTED, MODIFIER_PRIVATE, MODIFIER_STATIC, MODIFIER_ABSTRACT, MODIFIER_FINAL, MODIFIER_READONLY]
122AST_GROUP_USE: [USE_NORMAL, USE_FUNCTION, USE_CONST]
123AST_ATTRIBUTE: []
124AST_MATCH: []
125AST_MATCH_ARM: []
126AST_NAMED_ARG: []
127AST_METHOD_CALL: []
128AST_NULLSAFE_METHOD_CALL: []
129AST_STATIC_CALL: []
130AST_CONDITIONAL: (combinable) [PARENTHESIZED_CONDITIONAL]
131AST_TRY: []
132AST_CATCH: []
133AST_FOR: []
134AST_FOREACH: []
135AST_ENUM_CASE: []
136AST_PARAM: (combinable) [PARAM_REF, PARAM_VARIADIC, PARAM_MODIFIER_PUBLIC, PARAM_MODIFIER_PROTECTED, PARAM_MODIFIER_PRIVATE]