attributes.test 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178
  1. Attributes
  2. -----
  3. <?php
  4. #[A]
  5. class X {
  6. #[A]
  7. public function m(#[A] & $p) {}
  8. #[A]
  9. public
  10. $prop;
  11. #[A]
  12. const
  13. X = 42;
  14. }
  15. #[A]
  16. trait X {}
  17. #[A]
  18. interface X {}
  19. #[A]
  20. function f() {}
  21. new #[A] class {};
  22. #[A] function() {};
  23. #[A] fn()
  24. => 42;
  25. -----
  26. $attrGroup = new Node\AttributeGroup([
  27. new Node\Attribute(new Node\Name('B'), []),
  28. ]);
  29. $stmts[0]->attrGroups[] = $attrGroup;
  30. $stmts[0]->stmts[0]->attrGroups[] = $attrGroup;
  31. $stmts[0]->stmts[0]->params[0]->attrGroups[] = $attrGroup;
  32. $stmts[0]->stmts[1]->attrGroups[] = $attrGroup;
  33. $stmts[0]->stmts[2]->attrGroups[] = $attrGroup;
  34. $stmts[1]->attrGroups[] = $attrGroup;
  35. $stmts[2]->attrGroups[] = $attrGroup;
  36. $stmts[3]->attrGroups[] = $attrGroup;
  37. $stmts[4]->expr->class->attrGroups[] = $attrGroup;
  38. $stmts[5]->expr->attrGroups[] = $attrGroup;
  39. $stmts[6]->expr->attrGroups[] = $attrGroup;
  40. -----
  41. <?php
  42. #[A]
  43. #[B]
  44. class X {
  45. #[A]
  46. #[B]
  47. public function m(#[A] #[B] & $p) {}
  48. #[A]
  49. #[B]
  50. public
  51. $prop;
  52. #[A]
  53. #[B]
  54. const
  55. X = 42;
  56. }
  57. #[A]
  58. #[B]
  59. trait X {}
  60. #[A]
  61. #[B]
  62. interface X {}
  63. #[A]
  64. #[B]
  65. function f() {}
  66. new #[A] #[B] class {};
  67. #[A] #[B] function() {};
  68. #[A] #[B] fn()
  69. => 42;
  70. -----
  71. <?php
  72. class X {
  73. public function m() {}
  74. public
  75. $prop;
  76. const
  77. X = 42;
  78. }
  79. trait X {}
  80. interface X {}
  81. function f() {}
  82. new class {};
  83. function() {};
  84. fn()
  85. => 42;
  86. -----
  87. $attrGroup = new Node\AttributeGroup([
  88. new Node\Attribute(new Node\Name('A'), []),
  89. ]);
  90. $attrGroup2 = new Node\AttributeGroup([
  91. new Node\Attribute(new Node\Name('B'), []),
  92. ]);
  93. $stmts[0]->attrGroups[] = $attrGroup;
  94. $stmts[0]->attrGroups[] = $attrGroup2;
  95. $stmts[0]->stmts[0]->attrGroups[] = $attrGroup;
  96. $stmts[0]->stmts[0]->attrGroups[] = $attrGroup2;
  97. $stmts[0]->stmts[1]->attrGroups[] = $attrGroup;
  98. $stmts[0]->stmts[2]->attrGroups[] = $attrGroup;
  99. $stmts[1]->attrGroups[] = $attrGroup;
  100. $stmts[2]->attrGroups[] = $attrGroup;
  101. $stmts[3]->attrGroups[] = $attrGroup;
  102. $stmts[4]->expr->class->attrGroups[] = $attrGroup;
  103. $stmts[5]->expr->attrGroups[] = $attrGroup;
  104. $stmts[6]->expr->attrGroups[] = $attrGroup;
  105. -----
  106. <?php
  107. #[A]
  108. #[B]
  109. class X {
  110. #[A]
  111. #[B]
  112. public function m() {}
  113. #[A]
  114. public
  115. $prop;
  116. #[A]
  117. const
  118. X = 42;
  119. }
  120. #[A]
  121. trait X {}
  122. #[A]
  123. interface X {}
  124. #[A]
  125. function f() {}
  126. new #[A] class {};
  127. #[A] function() {};
  128. #[A] fn()
  129. => 42;
  130. -----
  131. <?php
  132. #[ A, B]
  133. class X {};
  134. #[
  135. A,
  136. B,
  137. ]
  138. class X {};
  139. -----
  140. $attr = new Node\Attribute(new Node\Name('C'), []);
  141. $stmts[0]->attrGroups[0]->attrs[] = $attr;
  142. $stmts[1]->attrGroups[0]->attrs[] = $attr;
  143. -----
  144. <?php
  145. #[ A, B, C]
  146. class X {};
  147. #[
  148. A,
  149. B,
  150. C,
  151. ]
  152. class X {};