@flarum/cli 2.0.0-beta.8 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (663) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +178 -48
  3. package/bin/run +2 -1
  4. package/bin/splitsh-lite-darwin +0 -0
  5. package/bin/splitsh-lite-linux +0 -0
  6. package/boilerplate/skeleton/extension/.gitattributes +16 -14
  7. package/boilerplate/skeleton/extension/.github/workflows/backend.yml +2 -6
  8. package/boilerplate/skeleton/extension/.github/workflows/frontend.yml +5 -6
  9. package/boilerplate/skeleton/extension/.github/workflows/phpstan.yml +12 -0
  10. package/boilerplate/skeleton/extension/LICENSE.md +1 -1
  11. package/boilerplate/skeleton/extension/README.md +1 -1
  12. package/boilerplate/skeleton/extension/composer.json +13 -7
  13. package/boilerplate/skeleton/extension/extend.php +2 -2
  14. package/boilerplate/skeleton/extension/gitignore +1 -0
  15. package/boilerplate/skeleton/extension/js/admin.ts +2 -0
  16. package/boilerplate/skeleton/extension/js/forum.ts +2 -0
  17. package/boilerplate/skeleton/extension/js/jest.config.cjs +1 -0
  18. package/boilerplate/skeleton/extension/js/package.json +11 -4
  19. package/boilerplate/skeleton/extension/js/src/admin/extend.js +8 -0
  20. package/boilerplate/skeleton/extension/js/src/admin/extend.ts +8 -0
  21. package/boilerplate/skeleton/extension/js/src/admin/index.js +2 -0
  22. package/boilerplate/skeleton/extension/js/src/admin/index.ts +7 -0
  23. package/boilerplate/skeleton/extension/js/src/common/extend.js +5 -0
  24. package/boilerplate/skeleton/extension/js/src/common/extend.ts +5 -0
  25. package/boilerplate/skeleton/extension/js/src/common/index.ts +5 -0
  26. package/boilerplate/skeleton/extension/js/src/forum/extend.js +8 -0
  27. package/boilerplate/skeleton/extension/js/src/forum/extend.ts +8 -0
  28. package/boilerplate/skeleton/extension/js/src/forum/index.js +2 -0
  29. package/boilerplate/skeleton/extension/js/src/forum/index.ts +7 -0
  30. package/boilerplate/skeleton/extension/js/tests/unit/.gitkeep +0 -0
  31. package/boilerplate/skeleton/extension/js/tsconfig.json +10 -2
  32. package/boilerplate/skeleton/extension/js/tsconfig.test.json +10 -0
  33. package/boilerplate/skeleton/extension/locale/en.yml +1 -1
  34. package/boilerplate/skeleton/extension/phpstan.neon +12 -0
  35. package/boilerplate/skeleton/extension/tests/phpunit.integration.xml +6 -7
  36. package/boilerplate/skeleton/extension/tests/phpunit.unit.xml +5 -10
  37. package/boilerplate/stubs/backend/advanced-api-resource.php +85 -0
  38. package/boilerplate/stubs/backend/api-resource.php +73 -0
  39. package/boilerplate/stubs/backend/command.php +2 -2
  40. package/boilerplate/stubs/backend/controller.php +19 -0
  41. package/boilerplate/stubs/backend/event-listener.php +1 -1
  42. package/boilerplate/stubs/backend/filter.php +25 -0
  43. package/boilerplate/stubs/backend/handler/command.php +6 -20
  44. package/boilerplate/stubs/backend/handler/handler.php +6 -14
  45. package/boilerplate/stubs/backend/integration-test.php +10 -7
  46. package/boilerplate/stubs/backend/job.php +6 -11
  47. package/boilerplate/stubs/backend/mail-driver.php +36 -0
  48. package/boilerplate/stubs/backend/middleware.php +19 -0
  49. package/boilerplate/stubs/backend/model.php +1 -1
  50. package/boilerplate/stubs/backend/notification-blueprint.php +42 -0
  51. package/boilerplate/stubs/backend/notification-driver.php +32 -0
  52. package/boilerplate/stubs/backend/policy.php +1 -1
  53. package/boilerplate/stubs/backend/post-type.php +35 -0
  54. package/boilerplate/stubs/backend/repository.php +2 -10
  55. package/boilerplate/stubs/backend/search/driver.php +13 -0
  56. package/boilerplate/stubs/backend/search/searcher.php +41 -0
  57. package/boilerplate/stubs/backend/service-provider.php +1 -1
  58. package/boilerplate/stubs/backend/validator.php +1 -1
  59. package/boilerplate/stubs/frontend/component.js +1 -1
  60. package/boilerplate/stubs/frontend/forum-page.js +68 -0
  61. package/boilerplate/stubs/frontend/gambit/boolean.js +12 -0
  62. package/boilerplate/stubs/frontend/gambit/key-value.js +16 -0
  63. package/boilerplate/stubs/frontend/modal.js +1 -1
  64. package/boilerplate/stubs/frontend/model.js +1 -1
  65. package/boilerplate/stubs/frontend/notification.js +22 -0
  66. package/boilerplate/stubs/frontend/post-type.js +13 -0
  67. package/boilerplate/stubs/migration.php +1 -1
  68. package/boilerplate/stubs/views/email/html/information.blade.php +8 -0
  69. package/boilerplate/stubs/views/email/html/notification.blade.php +8 -0
  70. package/boilerplate/stubs/views/email/plain/information.blade.php +7 -0
  71. package/boilerplate/stubs/views/email/plain/notification.blade.php +6 -0
  72. package/lib/base-command.d.ts +22 -6
  73. package/lib/base-command.js +114 -56
  74. package/lib/boilersmith/io.d.ts +33 -11
  75. package/lib/boilersmith/io.js +32 -17
  76. package/lib/boilersmith/paths.d.ts +3 -3
  77. package/lib/boilersmith/paths.js +7 -7
  78. package/lib/boilersmith/scaffolding/audit-step-factory.js +12 -12
  79. package/lib/boilersmith/scaffolding/infra-step-factory.js +2 -2
  80. package/lib/boilersmith/scaffolding/init-step-factory.js +5 -5
  81. package/lib/boilersmith/scaffolding/module.d.ts +30 -10
  82. package/lib/boilersmith/scaffolding/module.js +61 -19
  83. package/lib/boilersmith/scaffolding/scaffolder.d.ts +4 -1
  84. package/lib/boilersmith/scaffolding/scaffolder.js +33 -33
  85. package/lib/boilersmith/scaffolding/template-param.d.ts +2 -2
  86. package/lib/boilersmith/scaffolding/template-param.js +2 -2
  87. package/lib/boilersmith/step-manager.d.ts +15 -11
  88. package/lib/boilersmith/step-manager.js +45 -29
  89. package/lib/boilersmith/steps/stub-base.js +4 -4
  90. package/lib/boilersmith/utils/clone-and-fill.js +1 -1
  91. package/lib/boilersmith/utils/commit-async.d.ts +2 -0
  92. package/lib/boilersmith/utils/commit-async.js +15 -0
  93. package/lib/boilersmith/utils/json-leaf-paths.d.ts +2 -2
  94. package/lib/boilersmith/utils/read-tpl.js +2 -2
  95. package/lib/commands/audit/infra.d.ts +2 -5
  96. package/lib/commands/audit/infra.js +31 -9
  97. package/lib/commands/infra.d.ts +2 -10
  98. package/lib/commands/infra.js +20 -14
  99. package/lib/commands/init.d.ts +2 -5
  100. package/lib/commands/init.js +7 -5
  101. package/lib/commands/make/backend/{api-serializer.d.ts → api-resource.d.ts} +2 -5
  102. package/lib/commands/make/backend/api-resource.js +26 -0
  103. package/lib/commands/make/backend/command.d.ts +1 -4
  104. package/lib/commands/make/backend/command.js +3 -4
  105. package/lib/commands/make/backend/{api-controller.d.ts → controller.d.ts} +2 -5
  106. package/lib/commands/make/backend/controller.js +31 -0
  107. package/lib/commands/make/backend/event-listener.d.ts +1 -4
  108. package/lib/commands/make/backend/event-listener.js +2 -3
  109. package/lib/commands/make/backend/{api-serializer-attributes.d.ts → filter.d.ts} +3 -6
  110. package/lib/commands/make/backend/filter.js +26 -0
  111. package/lib/commands/make/backend/handler.d.ts +2 -5
  112. package/lib/commands/make/backend/handler.js +8 -11
  113. package/lib/commands/make/backend/integration-test.d.ts +1 -4
  114. package/lib/commands/make/backend/integration-test.js +4 -6
  115. package/lib/commands/make/backend/job.d.ts +1 -4
  116. package/lib/commands/make/backend/job.js +2 -2
  117. package/lib/commands/make/backend/mail-driver.d.ts +12 -0
  118. package/lib/commands/make/backend/mail-driver.js +29 -0
  119. package/lib/commands/make/backend/middleware.d.ts +11 -0
  120. package/lib/commands/make/backend/middleware.js +26 -0
  121. package/lib/commands/make/backend/migration.d.ts +1 -4
  122. package/lib/commands/make/backend/migration.js +10 -4
  123. package/lib/commands/make/backend/model.d.ts +6 -7
  124. package/lib/commands/make/backend/model.js +69 -449
  125. package/lib/commands/make/backend/notification-blueprint.d.ts +12 -0
  126. package/lib/commands/make/backend/notification-blueprint.js +29 -0
  127. package/lib/commands/make/backend/notification-driver.d.ts +12 -0
  128. package/lib/commands/make/backend/notification-driver.js +29 -0
  129. package/lib/commands/make/backend/policy.d.ts +1 -4
  130. package/lib/commands/make/backend/policy.js +2 -3
  131. package/lib/commands/make/backend/post-type.d.ts +12 -0
  132. package/lib/commands/make/backend/post-type.js +29 -0
  133. package/lib/commands/make/backend/repository.d.ts +1 -4
  134. package/lib/commands/make/backend/repository.js +1 -1
  135. package/lib/commands/make/backend/route.d.ts +1 -4
  136. package/lib/commands/make/backend/route.js +2 -3
  137. package/lib/commands/make/backend/search-driver.d.ts +11 -0
  138. package/lib/commands/make/backend/search-driver.js +51 -0
  139. package/lib/commands/make/backend/service-provider.d.ts +1 -4
  140. package/lib/commands/make/backend/service-provider.js +3 -4
  141. package/lib/commands/make/backend/validator.d.ts +1 -4
  142. package/lib/commands/make/backend/validator.js +2 -2
  143. package/lib/commands/make/frontend/component.d.ts +4 -5
  144. package/lib/commands/make/frontend/component.js +7 -2
  145. package/lib/commands/make/frontend/forum-page.d.ts +11 -0
  146. package/lib/commands/make/frontend/forum-page.js +92 -0
  147. package/lib/commands/make/frontend/gambit.d.ts +11 -0
  148. package/lib/commands/make/frontend/gambit.js +30 -0
  149. package/lib/commands/make/frontend/modal.d.ts +1 -4
  150. package/lib/commands/make/frontend/modal.js +3 -2
  151. package/lib/commands/make/frontend/model.d.ts +6 -7
  152. package/lib/commands/make/frontend/model.js +27 -28
  153. package/lib/commands/make/frontend/notification.d.ts +12 -0
  154. package/lib/commands/make/frontend/notification.js +62 -0
  155. package/lib/commands/make/frontend/post-type.d.ts +12 -0
  156. package/lib/commands/make/frontend/post-type.js +59 -0
  157. package/lib/commands/make/locale.d.ts +11 -0
  158. package/lib/commands/make/locale.js +27 -0
  159. package/lib/commands/make/model.d.ts +12 -0
  160. package/lib/commands/make/model.js +29 -0
  161. package/lib/commands/make/notification.d.ts +11 -0
  162. package/lib/commands/make/notification.js +33 -0
  163. package/lib/commands/make/post-type.d.ts +11 -0
  164. package/lib/commands/make/post-type.js +31 -0
  165. package/lib/commands/monorepo/create.d.ts +12 -0
  166. package/lib/commands/monorepo/create.js +20 -0
  167. package/lib/commands/monorepo/split.d.ts +12 -0
  168. package/lib/commands/monorepo/split.js +19 -0
  169. package/lib/commands/update/js-imports.d.ts +1 -4
  170. package/lib/commands/update/js-imports.js +2 -3
  171. package/lib/commands/upgrade/2.0.d.ts +17 -0
  172. package/lib/commands/upgrade/2.0.js +113 -0
  173. package/lib/help.js +2 -2
  174. package/lib/providers/php-provider.d.ts +7 -1
  175. package/lib/providers/php-provider.js +18 -5
  176. package/lib/steps/extenders/{api-serializer.d.ts → api-resource.d.ts} +1 -1
  177. package/lib/steps/extenders/api-resource.js +38 -0
  178. package/lib/steps/extenders/base.d.ts +1 -1
  179. package/lib/steps/extenders/base.js +13 -1
  180. package/lib/steps/extenders/console-command.js +1 -1
  181. package/lib/steps/extenders/event.js +1 -1
  182. package/lib/steps/extenders/mail-driver.d.ts +5 -0
  183. package/lib/steps/extenders/mail-driver.js +58 -0
  184. package/lib/steps/extenders/middleware.d.ts +5 -0
  185. package/lib/steps/extenders/middleware.js +57 -0
  186. package/lib/steps/extenders/notification-driver.d.ts +5 -0
  187. package/lib/steps/extenders/notification-driver.js +58 -0
  188. package/lib/steps/extenders/notification-type.d.ts +5 -0
  189. package/lib/steps/extenders/notification-type.js +55 -0
  190. package/lib/steps/extenders/policy.js +1 -1
  191. package/lib/steps/extenders/post-type.d.ts +5 -0
  192. package/lib/steps/extenders/post-type.js +42 -0
  193. package/lib/steps/extenders/route.js +11 -2
  194. package/lib/steps/extenders/search-driver.d.ts +5 -0
  195. package/lib/steps/extenders/search-driver.js +38 -0
  196. package/lib/steps/extenders/search-filter.d.ts +5 -0
  197. package/lib/steps/extenders/search-filter.js +67 -0
  198. package/lib/steps/extenders/service-provider.js +1 -1
  199. package/lib/steps/gen-ext-scaffolder.d.ts +4 -4
  200. package/lib/steps/gen-ext-scaffolder.js +264 -58
  201. package/lib/steps/js/base.d.ts +14 -5
  202. package/lib/steps/js/base.js +101 -27
  203. package/lib/steps/js/model.d.ts +4 -7
  204. package/lib/steps/js/model.js +45 -19
  205. package/lib/steps/js/notification.d.ts +7 -0
  206. package/lib/steps/js/notification.js +58 -0
  207. package/lib/steps/js/post-type.d.ts +8 -0
  208. package/lib/steps/js/post-type.js +60 -0
  209. package/lib/steps/js/routes.d.ts +7 -0
  210. package/lib/steps/js/routes.js +63 -0
  211. package/lib/steps/js/search-driver-locale.d.ts +8 -0
  212. package/lib/steps/js/search-driver-locale.js +36 -0
  213. package/lib/steps/js/search-gambit.d.ts +7 -0
  214. package/lib/steps/js/search-gambit.js +51 -0
  215. package/lib/steps/locale/base.d.ts +32 -0
  216. package/lib/steps/locale/base.js +97 -0
  217. package/lib/steps/misc/composer.js +2 -2
  218. package/lib/steps/misc/git.d.ts +1 -1
  219. package/lib/steps/misc/git.js +3 -3
  220. package/lib/steps/misc/npm.d.ts +11 -0
  221. package/lib/steps/misc/npm.js +19 -0
  222. package/lib/steps/misc/yarn.js +2 -2
  223. package/lib/steps/monorepo/create.d.ts +19 -0
  224. package/lib/steps/monorepo/create.js +187 -0
  225. package/lib/steps/monorepo/split.d.ts +14 -0
  226. package/lib/steps/monorepo/split.js +99 -0
  227. package/lib/steps/stubs/backend/advanced-api-resource.d.ts +13 -0
  228. package/lib/steps/stubs/backend/advanced-api-resource.js +81 -0
  229. package/lib/steps/stubs/backend/{api-serializer.d.ts → api-resource.d.ts} +2 -2
  230. package/lib/steps/stubs/backend/{api-serializer.js → api-resource.js} +12 -9
  231. package/lib/steps/stubs/backend/command.d.ts +2 -21
  232. package/lib/steps/stubs/backend/command.js +15 -1
  233. package/lib/steps/stubs/backend/{api-controller.d.ts → controller.d.ts} +4 -14
  234. package/lib/steps/stubs/backend/controller.js +40 -0
  235. package/lib/steps/stubs/backend/event-listener.d.ts +1 -1
  236. package/lib/steps/stubs/backend/event-listener.js +3 -1
  237. package/lib/steps/stubs/backend/filter.d.ts +8 -0
  238. package/lib/steps/stubs/backend/filter.js +44 -0
  239. package/lib/steps/stubs/backend/handler-command.d.ts +2 -27
  240. package/lib/steps/stubs/backend/handler-command.js +3 -1
  241. package/lib/steps/stubs/backend/handler.d.ts +1 -1
  242. package/lib/steps/stubs/backend/handler.js +5 -1
  243. package/lib/steps/stubs/backend/integration-test.d.ts +1 -1
  244. package/lib/steps/stubs/backend/integration-test.js +1 -4
  245. package/lib/steps/stubs/backend/job.d.ts +1 -1
  246. package/lib/steps/stubs/backend/job.js +1 -0
  247. package/lib/steps/stubs/backend/mail-driver.d.ts +7 -0
  248. package/lib/steps/stubs/backend/mail-driver.js +30 -0
  249. package/lib/steps/stubs/backend/middleware.d.ts +22 -0
  250. package/lib/steps/stubs/backend/middleware.js +31 -0
  251. package/lib/steps/stubs/backend/migration.js +6 -3
  252. package/lib/steps/stubs/backend/model.d.ts +2 -24
  253. package/lib/steps/stubs/backend/model.js +3 -5
  254. package/lib/steps/stubs/backend/notification-blueprint.d.ts +7 -0
  255. package/lib/steps/stubs/backend/notification-blueprint.js +44 -0
  256. package/lib/steps/stubs/backend/notification-driver.d.ts +7 -0
  257. package/lib/steps/stubs/backend/notification-driver.js +30 -0
  258. package/lib/steps/stubs/backend/policy.d.ts +1 -1
  259. package/lib/steps/stubs/backend/policy.js +3 -1
  260. package/lib/steps/stubs/backend/post-type.d.ts +7 -0
  261. package/lib/steps/stubs/backend/post-type.js +44 -0
  262. package/lib/steps/stubs/backend/repository.d.ts +1 -1
  263. package/lib/steps/stubs/backend/repository.js +3 -1
  264. package/lib/steps/stubs/backend/search-driver-searcher.d.ts +24 -0
  265. package/lib/steps/stubs/backend/search-driver-searcher.js +32 -0
  266. package/lib/steps/stubs/backend/search-driver.d.ts +8 -0
  267. package/lib/steps/stubs/backend/search-driver.js +49 -0
  268. package/lib/steps/stubs/backend/service-provider.d.ts +1 -1
  269. package/lib/steps/stubs/backend/service-provider.js +1 -0
  270. package/lib/steps/stubs/backend/validator.d.ts +1 -1
  271. package/lib/steps/stubs/backend/validator.js +1 -0
  272. package/lib/steps/stubs/flarum-base.js +1 -1
  273. package/lib/steps/stubs/frontend/component.d.ts +0 -5
  274. package/lib/steps/stubs/frontend/component.js +1 -0
  275. package/lib/steps/stubs/frontend/forum-page.d.ts +25 -0
  276. package/lib/steps/stubs/frontend/forum-page.js +37 -0
  277. package/lib/steps/stubs/frontend/gambit.d.ts +7 -0
  278. package/lib/steps/stubs/frontend/gambit.js +50 -0
  279. package/lib/steps/stubs/frontend/modal.d.ts +0 -5
  280. package/lib/steps/stubs/frontend/modal.js +1 -0
  281. package/lib/steps/stubs/frontend/model.d.ts +8 -1
  282. package/lib/steps/stubs/frontend/model.js +6 -0
  283. package/lib/steps/stubs/frontend/notification.d.ts +11 -0
  284. package/lib/steps/stubs/frontend/notification.js +48 -0
  285. package/lib/steps/stubs/frontend/post-type.d.ts +11 -0
  286. package/lib/steps/stubs/frontend/post-type.js +48 -0
  287. package/lib/steps/stubs/js-base.js +12 -5
  288. package/lib/steps/stubs/php-base.js +13 -9
  289. package/lib/steps/update/js-imports.js +9 -3
  290. package/lib/steps/upgrade/twopointoh/backend/email-views.d.ts +18 -0
  291. package/lib/steps/upgrade/twopointoh/backend/email-views.js +81 -0
  292. package/lib/steps/upgrade/twopointoh/backend/filesystem.d.ts +8 -0
  293. package/lib/steps/upgrade/twopointoh/backend/filesystem.js +40 -0
  294. package/lib/steps/upgrade/twopointoh/backend/intervention-image.d.ts +8 -0
  295. package/lib/steps/upgrade/twopointoh/backend/intervention-image.js +44 -0
  296. package/lib/steps/upgrade/twopointoh/backend/json-api.d.ts +12 -0
  297. package/lib/steps/upgrade/twopointoh/backend/json-api.js +111 -0
  298. package/lib/steps/upgrade/twopointoh/backend/mailer.d.ts +8 -0
  299. package/lib/steps/upgrade/twopointoh/backend/mailer.js +37 -0
  300. package/lib/steps/upgrade/twopointoh/backend/misc.d.ts +8 -0
  301. package/lib/steps/upgrade/twopointoh/backend/misc.js +42 -0
  302. package/lib/steps/upgrade/twopointoh/backend/phpunit.d.ts +8 -0
  303. package/lib/steps/upgrade/twopointoh/backend/phpunit.js +52 -0
  304. package/lib/steps/upgrade/twopointoh/backend/search.d.ts +28 -0
  305. package/lib/steps/upgrade/twopointoh/backend/search.js +200 -0
  306. package/lib/steps/upgrade/twopointoh/base.d.ts +58 -0
  307. package/lib/steps/upgrade/twopointoh/base.js +284 -0
  308. package/lib/steps/upgrade/twopointoh/dependencies.d.ts +10 -0
  309. package/lib/steps/upgrade/twopointoh/dependencies.js +108 -0
  310. package/lib/steps/upgrade/twopointoh/frontend/code-splitting/usage-of-lazy-modules.d.ts +26 -0
  311. package/lib/steps/upgrade/twopointoh/frontend/code-splitting/usage-of-lazy-modules.js +418 -0
  312. package/lib/steps/upgrade/twopointoh/frontend/export-registry/compat.d.ts +12 -0
  313. package/lib/steps/upgrade/twopointoh/frontend/export-registry/compat.js +75 -0
  314. package/lib/steps/upgrade/twopointoh/frontend/export-registry/import-ext.d.ts +13 -0
  315. package/lib/steps/upgrade/twopointoh/frontend/export-registry/import-ext.js +126 -0
  316. package/lib/steps/upgrade/twopointoh/frontend/format.d.ts +8 -0
  317. package/lib/steps/upgrade/twopointoh/frontend/format.js +32 -0
  318. package/lib/steps/upgrade/twopointoh/frontend/misc.d.ts +17 -0
  319. package/lib/steps/upgrade/twopointoh/frontend/misc.js +433 -0
  320. package/lib/steps/upgrade/twopointoh/infra.d.ts +10 -0
  321. package/lib/steps/upgrade/twopointoh/infra.js +51 -0
  322. package/lib/steps/upgrade/twopointoh/less.d.ts +12 -0
  323. package/lib/steps/upgrade/twopointoh/less.js +217 -0
  324. package/lib/utils/add-extenders.d.ts +2 -0
  325. package/lib/utils/add-extenders.js +115 -0
  326. package/lib/utils/ast.d.ts +22 -0
  327. package/lib/utils/ast.js +235 -0
  328. package/lib/utils/composer.d.ts +2 -1
  329. package/lib/utils/migration.js +3 -1
  330. package/lib/utils/model-name.d.ts +1 -0
  331. package/lib/utils/model-name.js +7 -3
  332. package/lib/utils/monorepo.d.ts +24 -0
  333. package/lib/utils/monorepo.js +24 -0
  334. package/lib/utils/validation.d.ts +6 -1
  335. package/lib/utils/validation.js +15 -0
  336. package/oclif.manifest.json +1 -1
  337. package/package.json +27 -14
  338. package/php-subsystem/composer.json +11 -9
  339. package/php-subsystem/composer.lock +66 -71
  340. package/php-subsystem/index.php +41 -6
  341. package/php-subsystem/src/CustomPrettyPrinter.php +1 -1
  342. package/php-subsystem/src/ExtenderUtil.php +7 -13
  343. package/php-subsystem/src/NodeUtil.php +72 -0
  344. package/php-subsystem/src/NodeVisitors/AddExtender.php +28 -12
  345. package/php-subsystem/src/NodeVisitors/AddUses.php +24 -0
  346. package/php-subsystem/src/NodeVisitors/ChangeSignatures.php +200 -0
  347. package/php-subsystem/src/NodeVisitors/ReplaceUses.php +175 -0
  348. package/php-subsystem/src/Upgrade/Replacement.php +51 -0
  349. package/php-subsystem/src/Upgrade/ReplacementResult.php +17 -0
  350. package/php-subsystem/src/Upgrade/TwoPointOh/EmailViews.php +94 -0
  351. package/php-subsystem/src/Upgrade/TwoPointOh/Filesystem.php +88 -0
  352. package/php-subsystem/src/Upgrade/TwoPointOh/InterventionImage.php +86 -0
  353. package/php-subsystem/src/Upgrade/TwoPointOh/JsonApi.php +186 -0
  354. package/php-subsystem/src/Upgrade/TwoPointOh/Misc.php +564 -0
  355. package/php-subsystem/src/Upgrade/TwoPointOh/PhpUnit.php +241 -0
  356. package/php-subsystem/src/Upgrade/TwoPointOh/Search.php +589 -0
  357. package/php-subsystem/vendor/autoload.php +18 -0
  358. package/php-subsystem/vendor/bin/php-parse +119 -0
  359. package/php-subsystem/vendor/composer/ClassLoader.php +166 -32
  360. package/php-subsystem/vendor/composer/InstalledVersions.php +350 -209
  361. package/php-subsystem/vendor/composer/autoload_classmap.php +1 -1
  362. package/php-subsystem/vendor/composer/autoload_namespaces.php +1 -1
  363. package/php-subsystem/vendor/composer/autoload_psr4.php +1 -1
  364. package/php-subsystem/vendor/composer/autoload_real.php +3 -22
  365. package/php-subsystem/vendor/composer/installed.json +56 -61
  366. package/php-subsystem/vendor/composer/installed.php +29 -30
  367. package/php-subsystem/vendor/composer/platform_check.php +2 -2
  368. package/php-subsystem/vendor/nikic/php-parser/README.md +21 -13
  369. package/php-subsystem/vendor/nikic/php-parser/bin/php-parse +12 -11
  370. package/php-subsystem/vendor/nikic/php-parser/composer.json +41 -39
  371. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Builder/ClassConst.php +58 -11
  372. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Builder/Class_.php +54 -25
  373. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Builder/Declaration.php +11 -4
  374. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Builder/EnumCase.php +87 -0
  375. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Builder/Enum_.php +116 -0
  376. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Builder/FunctionLike.php +8 -9
  377. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Builder/Function_.php +22 -5
  378. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Builder/Interface_.php +26 -7
  379. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Builder/Method.php +31 -13
  380. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Builder/Namespace_.php +5 -5
  381. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Builder/Param.php +69 -26
  382. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Builder/Property.php +47 -18
  383. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Builder/TraitUse.php +6 -5
  384. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Builder/TraitUseAdaptation.php +25 -28
  385. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Builder/Trait_.php +31 -8
  386. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Builder/Use_.php +8 -8
  387. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Builder.php +2 -3
  388. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/BuilderFactory.php +85 -70
  389. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/BuilderHelpers.php +119 -71
  390. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Comment/Doc.php +1 -2
  391. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Comment.php +35 -67
  392. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/ConstExprEvaluationException.php +3 -3
  393. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/ConstExprEvaluator.php +17 -9
  394. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Error.php +24 -33
  395. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/ErrorHandler/Collecting.php +6 -9
  396. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/ErrorHandler/Throwing.php +2 -3
  397. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/ErrorHandler.php +2 -3
  398. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Internal/DiffElem.php +11 -7
  399. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Internal/Differ.php +36 -22
  400. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Internal/PrintableNewAnonClassNode.php +24 -14
  401. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Internal/TokenPolyfill.php +237 -0
  402. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Internal/TokenStream.php +63 -69
  403. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/JsonDecoder.php +15 -10
  404. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Lexer/Emulative.php +74 -92
  405. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/AttributeEmulator.php +11 -18
  406. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/EnumTokenEmulator.php +10 -15
  407. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/ExplicitOctalEmulator.php +45 -0
  408. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/KeywordEmulator.php +19 -25
  409. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/MatchTokenEmulator.php +6 -10
  410. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/NullsafeTokenEmulator.php +22 -29
  411. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/ReadonlyFunctionTokenEmulator.php +31 -0
  412. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/ReadonlyTokenEmulator.php +31 -0
  413. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/ReverseEmulator.php +6 -5
  414. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/TokenEmulator.php +10 -5
  415. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Lexer.php +70 -491
  416. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Modifiers.php +69 -0
  417. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/NameContext.php +23 -24
  418. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Arg.php +13 -14
  419. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/ArrayItem.php +43 -0
  420. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Attribute.php +9 -10
  421. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/AttributeGroup.php +5 -7
  422. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/ClosureUse.php +36 -0
  423. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/ComplexType.php +13 -0
  424. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Const_.php +12 -13
  425. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/DeclareItem.php +37 -0
  426. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ArrayDimFetch.php +10 -11
  427. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ArrayItem.php +1 -39
  428. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Array_.php +11 -11
  429. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ArrowFunction.php +35 -30
  430. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Assign.php +9 -10
  431. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/BitwiseAnd.php +2 -3
  432. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/BitwiseOr.php +2 -3
  433. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/BitwiseXor.php +2 -3
  434. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Coalesce.php +2 -3
  435. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Concat.php +2 -3
  436. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Div.php +2 -3
  437. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Minus.php +2 -3
  438. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Mod.php +2 -3
  439. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Mul.php +2 -3
  440. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Plus.php +2 -3
  441. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Pow.php +2 -3
  442. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/ShiftLeft.php +2 -3
  443. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/ShiftRight.php +2 -3
  444. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp.php +7 -8
  445. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignRef.php +9 -10
  446. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/BitwiseAnd.php +4 -5
  447. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/BitwiseOr.php +4 -5
  448. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/BitwiseXor.php +4 -5
  449. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/BooleanAnd.php +4 -5
  450. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/BooleanOr.php +4 -5
  451. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Coalesce.php +4 -5
  452. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Concat.php +4 -5
  453. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Div.php +4 -5
  454. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Equal.php +4 -5
  455. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Greater.php +4 -5
  456. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/GreaterOrEqual.php +4 -5
  457. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Identical.php +4 -5
  458. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/LogicalAnd.php +4 -5
  459. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/LogicalOr.php +4 -5
  460. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/LogicalXor.php +4 -5
  461. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Minus.php +4 -5
  462. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Mod.php +4 -5
  463. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Mul.php +4 -5
  464. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/NotEqual.php +4 -5
  465. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/NotIdentical.php +4 -5
  466. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Plus.php +4 -5
  467. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Pow.php +4 -5
  468. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/ShiftLeft.php +4 -5
  469. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/ShiftRight.php +4 -5
  470. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Smaller.php +4 -5
  471. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/SmallerOrEqual.php +4 -5
  472. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Spaceship.php +4 -5
  473. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp.php +8 -11
  474. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BitwiseNot.php +7 -8
  475. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BooleanNot.php +7 -8
  476. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/CallLike.php +35 -0
  477. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Array_.php +2 -3
  478. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Bool_.php +2 -3
  479. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Double.php +5 -6
  480. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Int_.php +2 -3
  481. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Object_.php +2 -3
  482. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/String_.php +2 -3
  483. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Unset_.php +2 -3
  484. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast.php +5 -6
  485. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ClassConstFetch.php +12 -12
  486. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Clone_.php +7 -8
  487. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Closure.php +34 -27
  488. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ClosureUse.php +1 -32
  489. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ConstFetch.php +7 -8
  490. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Empty_.php +7 -8
  491. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Error.php +5 -6
  492. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ErrorSuppress.php +7 -8
  493. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Eval_.php +7 -8
  494. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Exit_.php +10 -11
  495. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/FuncCall.php +15 -12
  496. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Include_.php +13 -14
  497. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Instanceof_.php +11 -11
  498. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Isset_.php +7 -8
  499. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/List_.php +12 -8
  500. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Match_.php +8 -7
  501. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/MethodCall.php +18 -13
  502. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/New_.php +17 -12
  503. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/NullsafeMethodCall.php +18 -13
  504. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/NullsafePropertyFetch.php +10 -10
  505. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/PostDec.php +7 -8
  506. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/PostInc.php +7 -8
  507. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/PreDec.php +6 -7
  508. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/PreInc.php +7 -8
  509. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Print_.php +7 -8
  510. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/PropertyFetch.php +10 -10
  511. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ShellExec.php +9 -9
  512. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/StaticCall.php +19 -14
  513. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/StaticPropertyFetch.php +11 -11
  514. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Ternary.php +12 -13
  515. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Throw_.php +6 -7
  516. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/UnaryMinus.php +7 -8
  517. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/UnaryPlus.php +7 -8
  518. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Variable.php +6 -7
  519. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/YieldFrom.php +7 -8
  520. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Yield_.php +10 -11
  521. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Expr.php +1 -2
  522. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/FunctionLike.php +6 -9
  523. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Identifier.php +13 -13
  524. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/InterpolatedStringPart.php +32 -0
  525. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/IntersectionType.php +27 -0
  526. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/MatchArm.php +8 -9
  527. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Name/FullyQualified.php +8 -9
  528. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Name/Relative.php +8 -9
  529. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Name.php +80 -53
  530. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/NullableType.php +10 -11
  531. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Param.php +47 -23
  532. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/PropertyItem.php +37 -0
  533. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/DNumber.php +1 -68
  534. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/Encapsed.php +1 -29
  535. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/EncapsedStringPart.php +1 -28
  536. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/Float_.php +78 -0
  537. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/Int_.php +82 -0
  538. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/InterpolatedString.php +34 -0
  539. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/LNumber.php +1 -71
  540. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Class_.php +4 -5
  541. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Dir.php +4 -5
  542. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/File.php +4 -5
  543. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Function_.php +4 -5
  544. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Line.php +4 -5
  545. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Method.php +4 -5
  546. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Namespace_.php +4 -5
  547. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Trait_.php +4 -5
  548. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst.php +4 -5
  549. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/String_.php +44 -24
  550. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar.php +1 -2
  551. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/StaticVar.php +39 -0
  552. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Block.php +29 -0
  553. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Break_.php +8 -9
  554. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Case_.php +10 -11
  555. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Catch_.php +11 -12
  556. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/ClassConst.php +33 -27
  557. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/ClassLike.php +15 -15
  558. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/ClassMethod.php +66 -71
  559. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Class_.php +48 -61
  560. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Const_.php +7 -8
  561. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Continue_.php +8 -9
  562. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/DeclareDeclare.php +1 -32
  563. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Declare_.php +12 -12
  564. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Do_.php +9 -10
  565. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Echo_.php +7 -8
  566. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/ElseIf_.php +9 -10
  567. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Else_.php +7 -8
  568. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/EnumCase.php +11 -12
  569. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Enum_.php +17 -13
  570. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Expression.php +7 -8
  571. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Finally_.php +7 -8
  572. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/For_.php +19 -15
  573. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Foreach_.php +20 -17
  574. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Function_.php +31 -27
  575. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Global_.php +7 -8
  576. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Goto_.php +7 -8
  577. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/GroupUse.php +16 -14
  578. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/HaltCompiler.php +7 -8
  579. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/If_.php +18 -15
  580. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/InlineHTML.php +7 -8
  581. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Interface_.php +13 -10
  582. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Label.php +7 -8
  583. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Namespace_.php +11 -12
  584. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Nop.php +4 -5
  585. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Property.php +35 -36
  586. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/PropertyProperty.php +1 -32
  587. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Return_.php +8 -9
  588. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/StaticVar.php +1 -35
  589. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Static_.php +8 -8
  590. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Switch_.php +9 -10
  591. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/TraitUse.php +8 -9
  592. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/TraitUseAdaptation/Alias.php +12 -13
  593. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/TraitUseAdaptation/Precedence.php +9 -10
  594. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/TraitUseAdaptation.php +3 -4
  595. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Trait_.php +10 -8
  596. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/TryCatch.php +11 -12
  597. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Unset_.php +7 -8
  598. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/UseUse.php +1 -50
  599. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Use_.php +16 -16
  600. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/While_.php +9 -10
  601. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt.php +1 -2
  602. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/UnionType.php +8 -11
  603. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/UseItem.php +55 -0
  604. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/VarLikeIdentifier.php +2 -3
  605. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/VariadicPlaceholder.php +27 -0
  606. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node.php +24 -29
  607. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/NodeAbstract.php +20 -20
  608. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/NodeDumper.php +169 -82
  609. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/NodeFinder.php +28 -19
  610. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php +71 -84
  611. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/NodeTraverserInterface.php +4 -7
  612. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/CloningVisitor.php +1 -2
  613. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/CommentAnnotatingVisitor.php +82 -0
  614. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/FindingVisitor.php +4 -5
  615. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/FirstFindingVisitor.php +6 -7
  616. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/NameResolver.php +40 -24
  617. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/NodeConnectingVisitor.php +2 -3
  618. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/ParentConnectingVisitor.php +8 -11
  619. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/NodeVisitor.php +59 -7
  620. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/NodeVisitorAbstract.php +1 -2
  621. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Parser/Php7.php +2011 -2058
  622. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Parser/Php8.php +2717 -0
  623. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Parser.php +9 -3
  624. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/ParserAbstract.php +466 -248
  625. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/ParserFactory.php +31 -33
  626. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/PhpVersion.php +164 -0
  627. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/PrettyPrinter/Standard.php +419 -338
  628. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/PrettyPrinter.php +51 -0
  629. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/PrettyPrinterAbstract.php +587 -431
  630. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Token.php +18 -0
  631. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/compatibility_tokens.php +63 -0
  632. package/boilerplate/stubs/backend/api-controller/create.php +0 -53
  633. package/boilerplate/stubs/backend/api-controller/delete.php +0 -52
  634. package/boilerplate/stubs/backend/api-controller/list.php +0 -61
  635. package/boilerplate/stubs/backend/api-controller/normal.php +0 -29
  636. package/boilerplate/stubs/backend/api-controller/show.php +0 -48
  637. package/boilerplate/stubs/backend/api-controller/update.php +0 -54
  638. package/boilerplate/stubs/backend/api-serializer.php +0 -36
  639. package/lib/commands/make/backend/api-controller.js +0 -27
  640. package/lib/commands/make/backend/api-serializer-attributes.js +0 -15
  641. package/lib/commands/make/backend/api-serializer.js +0 -15
  642. package/lib/steps/extenders/api-serializer.js +0 -77
  643. package/lib/steps/stubs/backend/api-controller.js +0 -62
  644. package/lib/steps/stubs/frontend/migration.js +0 -1
  645. package/php-subsystem/vendor/nikic/php-parser/.editorconfig +0 -9
  646. package/php-subsystem/vendor/nikic/php-parser/grammar/README.md +0 -30
  647. package/php-subsystem/vendor/nikic/php-parser/grammar/parser.template +0 -106
  648. package/php-subsystem/vendor/nikic/php-parser/grammar/php5.y +0 -1026
  649. package/php-subsystem/vendor/nikic/php-parser/grammar/php7.y +0 -1152
  650. package/php-subsystem/vendor/nikic/php-parser/grammar/phpyLang.php +0 -192
  651. package/php-subsystem/vendor/nikic/php-parser/grammar/rebuildParsers.php +0 -81
  652. package/php-subsystem/vendor/nikic/php-parser/grammar/tokens.template +0 -17
  653. package/php-subsystem/vendor/nikic/php-parser/grammar/tokens.y +0 -115
  654. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/CoaleseEqualTokenEmulator.php +0 -47
  655. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/FlexibleDocStringEmulator.php +0 -76
  656. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/FnTokenEmulator.php +0 -23
  657. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/NumericLiteralSeparatorEmulator.php +0 -105
  658. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Throw_.php +0 -30
  659. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Parser/Multiple.php +0 -55
  660. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Parser/Php5.php +0 -2630
  661. package/php-subsystem/vendor/nikic/php-parser/lib/PhpParser/Parser/Tokens.php +0 -145
  662. /package/{lib/steps/stubs/frontend/migration.d.ts → boilerplate/skeleton/extension/js/tests/integration/.gitkeep} +0 -0
  663. /package/boilerplate/skeleton/extension/js/{webpack.config.js → webpack.config.cjs} +0 -0
@@ -1,1152 +0,0 @@
1
- %pure_parser
2
- %expect 2
3
-
4
- %tokens
5
-
6
- %%
7
-
8
- start:
9
- top_statement_list { $$ = $this->handleNamespaces($1); }
10
- ;
11
-
12
- top_statement_list_ex:
13
- top_statement_list_ex top_statement { pushNormalizing($1, $2); }
14
- | /* empty */ { init(); }
15
- ;
16
-
17
- top_statement_list:
18
- top_statement_list_ex
19
- { makeZeroLengthNop($nop, $this->lookaheadStartAttributes);
20
- if ($nop !== null) { $1[] = $nop; } $$ = $1; }
21
- ;
22
-
23
- reserved_non_modifiers:
24
- T_INCLUDE | T_INCLUDE_ONCE | T_EVAL | T_REQUIRE | T_REQUIRE_ONCE | T_LOGICAL_OR | T_LOGICAL_XOR | T_LOGICAL_AND
25
- | T_INSTANCEOF | T_NEW | T_CLONE | T_EXIT | T_IF | T_ELSEIF | T_ELSE | T_ENDIF | T_ECHO | T_DO | T_WHILE
26
- | T_ENDWHILE | T_FOR | T_ENDFOR | T_FOREACH | T_ENDFOREACH | T_DECLARE | T_ENDDECLARE | T_AS | T_TRY | T_CATCH
27
- | T_FINALLY | T_THROW | T_USE | T_INSTEADOF | T_GLOBAL | T_VAR | T_UNSET | T_ISSET | T_EMPTY | T_CONTINUE | T_GOTO
28
- | T_FUNCTION | T_CONST | T_RETURN | T_PRINT | T_YIELD | T_LIST | T_SWITCH | T_ENDSWITCH | T_CASE | T_DEFAULT
29
- | T_BREAK | T_ARRAY | T_CALLABLE | T_EXTENDS | T_IMPLEMENTS | T_NAMESPACE | T_TRAIT | T_INTERFACE | T_CLASS
30
- | T_CLASS_C | T_TRAIT_C | T_FUNC_C | T_METHOD_C | T_LINE | T_FILE | T_DIR | T_NS_C | T_HALT_COMPILER | T_FN
31
- | T_MATCH | T_ENUM
32
- ;
33
-
34
- semi_reserved:
35
- reserved_non_modifiers
36
- | T_STATIC | T_ABSTRACT | T_FINAL | T_PRIVATE | T_PROTECTED | T_PUBLIC
37
- ;
38
-
39
- identifier_ex:
40
- T_STRING { $$ = Node\Identifier[$1]; }
41
- | semi_reserved { $$ = Node\Identifier[$1]; }
42
- ;
43
-
44
- identifier:
45
- T_STRING { $$ = Node\Identifier[$1]; }
46
- ;
47
-
48
- reserved_non_modifiers_identifier:
49
- reserved_non_modifiers { $$ = Node\Identifier[$1]; }
50
- ;
51
-
52
- namespace_declaration_name:
53
- T_STRING { $$ = Name[$1]; }
54
- | semi_reserved { $$ = Name[$1]; }
55
- | T_NAME_QUALIFIED { $$ = Name[$1]; }
56
- ;
57
-
58
- namespace_name:
59
- T_STRING { $$ = Name[$1]; }
60
- | T_NAME_QUALIFIED { $$ = Name[$1]; }
61
- ;
62
-
63
- legacy_namespace_name:
64
- namespace_name { $$ = $1; }
65
- | T_NAME_FULLY_QUALIFIED { $$ = Name[substr($1, 1)]; }
66
- ;
67
-
68
- plain_variable:
69
- T_VARIABLE { $$ = Expr\Variable[parseVar($1)]; }
70
- ;
71
-
72
- semi:
73
- ';' { /* nothing */ }
74
- | error { /* nothing */ }
75
- ;
76
-
77
- no_comma:
78
- /* empty */ { /* nothing */ }
79
- | ',' { $this->emitError(new Error('A trailing comma is not allowed here', attributes())); }
80
- ;
81
-
82
- optional_comma:
83
- /* empty */
84
- | ','
85
- ;
86
-
87
- attribute_decl:
88
- class_name { $$ = Node\Attribute[$1, []]; }
89
- | class_name argument_list { $$ = Node\Attribute[$1, $2]; }
90
- ;
91
-
92
- attribute_group:
93
- attribute_decl { init($1); }
94
- | attribute_group ',' attribute_decl { push($1, $3); }
95
- ;
96
-
97
- attribute:
98
- T_ATTRIBUTE attribute_group optional_comma ']' { $$ = Node\AttributeGroup[$2]; }
99
- ;
100
-
101
- attributes:
102
- attribute { init($1); }
103
- | attributes attribute { push($1, $2); }
104
- ;
105
-
106
- optional_attributes:
107
- /* empty */ { $$ = []; }
108
- | attributes { $$ = $1; }
109
- ;
110
-
111
- top_statement:
112
- statement { $$ = $1; }
113
- | function_declaration_statement { $$ = $1; }
114
- | class_declaration_statement { $$ = $1; }
115
- | T_HALT_COMPILER
116
- { $$ = Stmt\HaltCompiler[$this->lexer->handleHaltCompiler()]; }
117
- | T_NAMESPACE namespace_declaration_name semi
118
- { $$ = Stmt\Namespace_[$2, null];
119
- $$->setAttribute('kind', Stmt\Namespace_::KIND_SEMICOLON);
120
- $this->checkNamespace($$); }
121
- | T_NAMESPACE namespace_declaration_name '{' top_statement_list '}'
122
- { $$ = Stmt\Namespace_[$2, $4];
123
- $$->setAttribute('kind', Stmt\Namespace_::KIND_BRACED);
124
- $this->checkNamespace($$); }
125
- | T_NAMESPACE '{' top_statement_list '}'
126
- { $$ = Stmt\Namespace_[null, $3];
127
- $$->setAttribute('kind', Stmt\Namespace_::KIND_BRACED);
128
- $this->checkNamespace($$); }
129
- | T_USE use_declarations semi { $$ = Stmt\Use_[$2, Stmt\Use_::TYPE_NORMAL]; }
130
- | T_USE use_type use_declarations semi { $$ = Stmt\Use_[$3, $2]; }
131
- | group_use_declaration semi { $$ = $1; }
132
- | T_CONST constant_declaration_list semi { $$ = Stmt\Const_[$2]; }
133
- ;
134
-
135
- use_type:
136
- T_FUNCTION { $$ = Stmt\Use_::TYPE_FUNCTION; }
137
- | T_CONST { $$ = Stmt\Use_::TYPE_CONSTANT; }
138
- ;
139
-
140
- group_use_declaration:
141
- T_USE use_type legacy_namespace_name T_NS_SEPARATOR '{' unprefixed_use_declarations '}'
142
- { $$ = Stmt\GroupUse[$3, $6, $2]; }
143
- | T_USE legacy_namespace_name T_NS_SEPARATOR '{' inline_use_declarations '}'
144
- { $$ = Stmt\GroupUse[$2, $5, Stmt\Use_::TYPE_UNKNOWN]; }
145
- ;
146
-
147
- unprefixed_use_declarations:
148
- non_empty_unprefixed_use_declarations optional_comma { $$ = $1; }
149
- ;
150
-
151
- non_empty_unprefixed_use_declarations:
152
- non_empty_unprefixed_use_declarations ',' unprefixed_use_declaration
153
- { push($1, $3); }
154
- | unprefixed_use_declaration { init($1); }
155
- ;
156
-
157
- use_declarations:
158
- non_empty_use_declarations no_comma { $$ = $1; }
159
- ;
160
-
161
- non_empty_use_declarations:
162
- non_empty_use_declarations ',' use_declaration { push($1, $3); }
163
- | use_declaration { init($1); }
164
- ;
165
-
166
- inline_use_declarations:
167
- non_empty_inline_use_declarations optional_comma { $$ = $1; }
168
- ;
169
-
170
- non_empty_inline_use_declarations:
171
- non_empty_inline_use_declarations ',' inline_use_declaration
172
- { push($1, $3); }
173
- | inline_use_declaration { init($1); }
174
- ;
175
-
176
- unprefixed_use_declaration:
177
- namespace_name
178
- { $$ = Stmt\UseUse[$1, null, Stmt\Use_::TYPE_UNKNOWN]; $this->checkUseUse($$, #1); }
179
- | namespace_name T_AS identifier
180
- { $$ = Stmt\UseUse[$1, $3, Stmt\Use_::TYPE_UNKNOWN]; $this->checkUseUse($$, #3); }
181
- ;
182
-
183
- use_declaration:
184
- legacy_namespace_name
185
- { $$ = Stmt\UseUse[$1, null, Stmt\Use_::TYPE_UNKNOWN]; $this->checkUseUse($$, #1); }
186
- | legacy_namespace_name T_AS identifier
187
- { $$ = Stmt\UseUse[$1, $3, Stmt\Use_::TYPE_UNKNOWN]; $this->checkUseUse($$, #3); }
188
- ;
189
-
190
- inline_use_declaration:
191
- unprefixed_use_declaration { $$ = $1; $$->type = Stmt\Use_::TYPE_NORMAL; }
192
- | use_type unprefixed_use_declaration { $$ = $2; $$->type = $1; }
193
- ;
194
-
195
- constant_declaration_list:
196
- non_empty_constant_declaration_list no_comma { $$ = $1; }
197
- ;
198
-
199
- non_empty_constant_declaration_list:
200
- non_empty_constant_declaration_list ',' constant_declaration
201
- { push($1, $3); }
202
- | constant_declaration { init($1); }
203
- ;
204
-
205
- constant_declaration:
206
- identifier '=' expr { $$ = Node\Const_[$1, $3]; }
207
- ;
208
-
209
- class_const_list:
210
- non_empty_class_const_list no_comma { $$ = $1; }
211
- ;
212
-
213
- non_empty_class_const_list:
214
- non_empty_class_const_list ',' class_const { push($1, $3); }
215
- | class_const { init($1); }
216
- ;
217
-
218
- class_const:
219
- identifier_ex '=' expr { $$ = Node\Const_[$1, $3]; }
220
- ;
221
-
222
- inner_statement_list_ex:
223
- inner_statement_list_ex inner_statement { pushNormalizing($1, $2); }
224
- | /* empty */ { init(); }
225
- ;
226
-
227
- inner_statement_list:
228
- inner_statement_list_ex
229
- { makeZeroLengthNop($nop, $this->lookaheadStartAttributes);
230
- if ($nop !== null) { $1[] = $nop; } $$ = $1; }
231
- ;
232
-
233
- inner_statement:
234
- statement { $$ = $1; }
235
- | function_declaration_statement { $$ = $1; }
236
- | class_declaration_statement { $$ = $1; }
237
- | T_HALT_COMPILER
238
- { throw new Error('__HALT_COMPILER() can only be used from the outermost scope', attributes()); }
239
- ;
240
-
241
- non_empty_statement:
242
- '{' inner_statement_list '}'
243
- {
244
- if ($2) {
245
- $$ = $2; prependLeadingComments($$);
246
- } else {
247
- makeNop($$, $this->startAttributeStack[#1], $this->endAttributes);
248
- if (null === $$) { $$ = array(); }
249
- }
250
- }
251
- | T_IF '(' expr ')' statement elseif_list else_single
252
- { $$ = Stmt\If_[$3, ['stmts' => toArray($5), 'elseifs' => $6, 'else' => $7]]; }
253
- | T_IF '(' expr ')' ':' inner_statement_list new_elseif_list new_else_single T_ENDIF ';'
254
- { $$ = Stmt\If_[$3, ['stmts' => $6, 'elseifs' => $7, 'else' => $8]]; }
255
- | T_WHILE '(' expr ')' while_statement { $$ = Stmt\While_[$3, $5]; }
256
- | T_DO statement T_WHILE '(' expr ')' ';' { $$ = Stmt\Do_ [$5, toArray($2)]; }
257
- | T_FOR '(' for_expr ';' for_expr ';' for_expr ')' for_statement
258
- { $$ = Stmt\For_[['init' => $3, 'cond' => $5, 'loop' => $7, 'stmts' => $9]]; }
259
- | T_SWITCH '(' expr ')' switch_case_list { $$ = Stmt\Switch_[$3, $5]; }
260
- | T_BREAK optional_expr semi { $$ = Stmt\Break_[$2]; }
261
- | T_CONTINUE optional_expr semi { $$ = Stmt\Continue_[$2]; }
262
- | T_RETURN optional_expr semi { $$ = Stmt\Return_[$2]; }
263
- | T_GLOBAL global_var_list semi { $$ = Stmt\Global_[$2]; }
264
- | T_STATIC static_var_list semi { $$ = Stmt\Static_[$2]; }
265
- | T_ECHO expr_list_forbid_comma semi { $$ = Stmt\Echo_[$2]; }
266
- | T_INLINE_HTML { $$ = Stmt\InlineHTML[$1]; }
267
- | expr semi {
268
- $e = $1;
269
- if ($e instanceof Expr\Throw_) {
270
- // For backwards-compatibility reasons, convert throw in statement position into
271
- // Stmt\Throw_ rather than Stmt\Expression(Expr\Throw_).
272
- $$ = Stmt\Throw_[$e->expr];
273
- } else {
274
- $$ = Stmt\Expression[$e];
275
- }
276
- }
277
- | T_UNSET '(' variables_list ')' semi { $$ = Stmt\Unset_[$3]; }
278
- | T_FOREACH '(' expr T_AS foreach_variable ')' foreach_statement
279
- { $$ = Stmt\Foreach_[$3, $5[0], ['keyVar' => null, 'byRef' => $5[1], 'stmts' => $7]]; }
280
- | T_FOREACH '(' expr T_AS variable T_DOUBLE_ARROW foreach_variable ')' foreach_statement
281
- { $$ = Stmt\Foreach_[$3, $7[0], ['keyVar' => $5, 'byRef' => $7[1], 'stmts' => $9]]; }
282
- | T_FOREACH '(' expr error ')' foreach_statement
283
- { $$ = Stmt\Foreach_[$3, new Expr\Error(stackAttributes(#4)), ['stmts' => $6]]; }
284
- | T_DECLARE '(' declare_list ')' declare_statement { $$ = Stmt\Declare_[$3, $5]; }
285
- | T_TRY '{' inner_statement_list '}' catches optional_finally
286
- { $$ = Stmt\TryCatch[$3, $5, $6]; $this->checkTryCatch($$); }
287
- | T_GOTO identifier semi { $$ = Stmt\Goto_[$2]; }
288
- | identifier ':' { $$ = Stmt\Label[$1]; }
289
- | error { $$ = array(); /* means: no statement */ }
290
- ;
291
-
292
- statement:
293
- non_empty_statement { $$ = $1; }
294
- | ';'
295
- { makeNop($$, $this->startAttributeStack[#1], $this->endAttributes);
296
- if ($$ === null) $$ = array(); /* means: no statement */ }
297
- ;
298
-
299
- catches:
300
- /* empty */ { init(); }
301
- | catches catch { push($1, $2); }
302
- ;
303
-
304
- name_union:
305
- name { init($1); }
306
- | name_union '|' name { push($1, $3); }
307
- ;
308
-
309
- catch:
310
- T_CATCH '(' name_union optional_plain_variable ')' '{' inner_statement_list '}'
311
- { $$ = Stmt\Catch_[$3, $4, $7]; }
312
- ;
313
-
314
- optional_finally:
315
- /* empty */ { $$ = null; }
316
- | T_FINALLY '{' inner_statement_list '}' { $$ = Stmt\Finally_[$3]; }
317
- ;
318
-
319
- variables_list:
320
- non_empty_variables_list optional_comma { $$ = $1; }
321
- ;
322
-
323
- non_empty_variables_list:
324
- variable { init($1); }
325
- | non_empty_variables_list ',' variable { push($1, $3); }
326
- ;
327
-
328
- optional_ref:
329
- /* empty */ { $$ = false; }
330
- | '&' { $$ = true; }
331
- ;
332
-
333
- optional_ellipsis:
334
- /* empty */ { $$ = false; }
335
- | T_ELLIPSIS { $$ = true; }
336
- ;
337
-
338
- block_or_error:
339
- '{' inner_statement_list '}' { $$ = $2; }
340
- | error { $$ = []; }
341
- ;
342
-
343
- function_declaration_statement:
344
- T_FUNCTION optional_ref identifier '(' parameter_list ')' optional_return_type block_or_error
345
- { $$ = Stmt\Function_[$3, ['byRef' => $2, 'params' => $5, 'returnType' => $7, 'stmts' => $8, 'attrGroups' => []]]; }
346
- | attributes T_FUNCTION optional_ref identifier '(' parameter_list ')' optional_return_type block_or_error
347
- { $$ = Stmt\Function_[$4, ['byRef' => $3, 'params' => $6, 'returnType' => $8, 'stmts' => $9, 'attrGroups' => $1]]; }
348
- ;
349
-
350
- class_declaration_statement:
351
- optional_attributes class_entry_type identifier extends_from implements_list '{' class_statement_list '}'
352
- { $$ = Stmt\Class_[$3, ['type' => $2, 'extends' => $4, 'implements' => $5, 'stmts' => $7, 'attrGroups' => $1]];
353
- $this->checkClass($$, #3); }
354
- | optional_attributes T_INTERFACE identifier interface_extends_list '{' class_statement_list '}'
355
- { $$ = Stmt\Interface_[$3, ['extends' => $4, 'stmts' => $6, 'attrGroups' => $1]];
356
- $this->checkInterface($$, #3); }
357
- | optional_attributes T_TRAIT identifier '{' class_statement_list '}'
358
- { $$ = Stmt\Trait_[$3, ['stmts' => $5, 'attrGroups' => $1]]; }
359
- | optional_attributes T_ENUM identifier enum_scalar_type implements_list '{' class_statement_list '}'
360
- { $$ = Stmt\Enum_[$3, ['scalarType' => $4, 'implements' => $5, 'stmts' => $7, 'attrGroups' => $1]];
361
- $this->checkEnum($$, #3); }
362
- ;
363
-
364
- enum_scalar_type:
365
- /* empty */ { $$ = null; }
366
- | ':' type { $$ = $2; }
367
-
368
- enum_case_expr:
369
- /* empty */ { $$ = null; }
370
- | '=' expr { $$ = $2; }
371
- ;
372
-
373
- class_entry_type:
374
- T_CLASS { $$ = 0; }
375
- | T_ABSTRACT T_CLASS { $$ = Stmt\Class_::MODIFIER_ABSTRACT; }
376
- | T_FINAL T_CLASS { $$ = Stmt\Class_::MODIFIER_FINAL; }
377
- ;
378
-
379
- extends_from:
380
- /* empty */ { $$ = null; }
381
- | T_EXTENDS class_name { $$ = $2; }
382
- ;
383
-
384
- interface_extends_list:
385
- /* empty */ { $$ = array(); }
386
- | T_EXTENDS class_name_list { $$ = $2; }
387
- ;
388
-
389
- implements_list:
390
- /* empty */ { $$ = array(); }
391
- | T_IMPLEMENTS class_name_list { $$ = $2; }
392
- ;
393
-
394
- class_name_list:
395
- non_empty_class_name_list no_comma { $$ = $1; }
396
- ;
397
-
398
- non_empty_class_name_list:
399
- class_name { init($1); }
400
- | non_empty_class_name_list ',' class_name { push($1, $3); }
401
- ;
402
-
403
- for_statement:
404
- statement { $$ = toArray($1); }
405
- | ':' inner_statement_list T_ENDFOR ';' { $$ = $2; }
406
- ;
407
-
408
- foreach_statement:
409
- statement { $$ = toArray($1); }
410
- | ':' inner_statement_list T_ENDFOREACH ';' { $$ = $2; }
411
- ;
412
-
413
- declare_statement:
414
- non_empty_statement { $$ = toArray($1); }
415
- | ';' { $$ = null; }
416
- | ':' inner_statement_list T_ENDDECLARE ';' { $$ = $2; }
417
- ;
418
-
419
- declare_list:
420
- non_empty_declare_list no_comma { $$ = $1; }
421
- ;
422
-
423
- non_empty_declare_list:
424
- declare_list_element { init($1); }
425
- | non_empty_declare_list ',' declare_list_element { push($1, $3); }
426
- ;
427
-
428
- declare_list_element:
429
- identifier '=' expr { $$ = Stmt\DeclareDeclare[$1, $3]; }
430
- ;
431
-
432
- switch_case_list:
433
- '{' case_list '}' { $$ = $2; }
434
- | '{' ';' case_list '}' { $$ = $3; }
435
- | ':' case_list T_ENDSWITCH ';' { $$ = $2; }
436
- | ':' ';' case_list T_ENDSWITCH ';' { $$ = $3; }
437
- ;
438
-
439
- case_list:
440
- /* empty */ { init(); }
441
- | case_list case { push($1, $2); }
442
- ;
443
-
444
- case:
445
- T_CASE expr case_separator inner_statement_list_ex { $$ = Stmt\Case_[$2, $4]; }
446
- | T_DEFAULT case_separator inner_statement_list_ex { $$ = Stmt\Case_[null, $3]; }
447
- ;
448
-
449
- case_separator:
450
- ':'
451
- | ';'
452
- ;
453
-
454
- match:
455
- T_MATCH '(' expr ')' '{' match_arm_list '}' { $$ = Expr\Match_[$3, $6]; }
456
- ;
457
-
458
- match_arm_list:
459
- /* empty */ { $$ = []; }
460
- | non_empty_match_arm_list optional_comma { $$ = $1; }
461
- ;
462
-
463
- non_empty_match_arm_list:
464
- match_arm { init($1); }
465
- | non_empty_match_arm_list ',' match_arm { push($1, $3); }
466
- ;
467
-
468
- match_arm:
469
- expr_list_allow_comma T_DOUBLE_ARROW expr { $$ = Node\MatchArm[$1, $3]; }
470
- | T_DEFAULT optional_comma T_DOUBLE_ARROW expr { $$ = Node\MatchArm[null, $4]; }
471
- ;
472
-
473
- while_statement:
474
- statement { $$ = toArray($1); }
475
- | ':' inner_statement_list T_ENDWHILE ';' { $$ = $2; }
476
- ;
477
-
478
- elseif_list:
479
- /* empty */ { init(); }
480
- | elseif_list elseif { push($1, $2); }
481
- ;
482
-
483
- elseif:
484
- T_ELSEIF '(' expr ')' statement { $$ = Stmt\ElseIf_[$3, toArray($5)]; }
485
- ;
486
-
487
- new_elseif_list:
488
- /* empty */ { init(); }
489
- | new_elseif_list new_elseif { push($1, $2); }
490
- ;
491
-
492
- new_elseif:
493
- T_ELSEIF '(' expr ')' ':' inner_statement_list { $$ = Stmt\ElseIf_[$3, $6]; }
494
- ;
495
-
496
- else_single:
497
- /* empty */ { $$ = null; }
498
- | T_ELSE statement { $$ = Stmt\Else_[toArray($2)]; }
499
- ;
500
-
501
- new_else_single:
502
- /* empty */ { $$ = null; }
503
- | T_ELSE ':' inner_statement_list { $$ = Stmt\Else_[$3]; }
504
- ;
505
-
506
- foreach_variable:
507
- variable { $$ = array($1, false); }
508
- | '&' variable { $$ = array($2, true); }
509
- | list_expr { $$ = array($1, false); }
510
- | array_short_syntax { $$ = array($1, false); }
511
- ;
512
-
513
- parameter_list:
514
- non_empty_parameter_list optional_comma { $$ = $1; }
515
- | /* empty */ { $$ = array(); }
516
- ;
517
-
518
- non_empty_parameter_list:
519
- parameter { init($1); }
520
- | non_empty_parameter_list ',' parameter { push($1, $3); }
521
- ;
522
-
523
- optional_visibility_modifier:
524
- /* empty */ { $$ = 0; }
525
- | T_PUBLIC { $$ = Stmt\Class_::MODIFIER_PUBLIC; }
526
- | T_PROTECTED { $$ = Stmt\Class_::MODIFIER_PROTECTED; }
527
- | T_PRIVATE { $$ = Stmt\Class_::MODIFIER_PRIVATE; }
528
- ;
529
-
530
- parameter:
531
- optional_attributes optional_visibility_modifier optional_type_without_static optional_ref optional_ellipsis plain_variable
532
- { $$ = new Node\Param($6, null, $3, $4, $5, attributes(), $2, $1);
533
- $this->checkParam($$); }
534
- | optional_attributes optional_visibility_modifier optional_type_without_static optional_ref optional_ellipsis plain_variable '=' expr
535
- { $$ = new Node\Param($6, $8, $3, $4, $5, attributes(), $2, $1);
536
- $this->checkParam($$); }
537
- | optional_attributes optional_visibility_modifier optional_type_without_static optional_ref optional_ellipsis error
538
- { $$ = new Node\Param(Expr\Error[], null, $3, $4, $5, attributes(), $2, $1); }
539
- ;
540
-
541
- type_expr:
542
- type { $$ = $1; }
543
- | '?' type { $$ = Node\NullableType[$2]; }
544
- | union_type { $$ = Node\UnionType[$1]; }
545
- ;
546
-
547
- type:
548
- type_without_static { $$ = $1; }
549
- | T_STATIC { $$ = Node\Name['static']; }
550
- ;
551
-
552
- type_without_static:
553
- name { $$ = $this->handleBuiltinTypes($1); }
554
- | T_ARRAY { $$ = Node\Identifier['array']; }
555
- | T_CALLABLE { $$ = Node\Identifier['callable']; }
556
- ;
557
-
558
- union_type:
559
- type '|' type { init($1, $3); }
560
- | union_type '|' type { push($1, $3); }
561
- ;
562
-
563
- union_type_without_static:
564
- type_without_static '|' type_without_static { init($1, $3); }
565
- | union_type_without_static '|' type_without_static { push($1, $3); }
566
- ;
567
-
568
- type_expr_without_static:
569
- type_without_static { $$ = $1; }
570
- | '?' type_without_static { $$ = Node\NullableType[$2]; }
571
- | union_type_without_static { $$ = Node\UnionType[$1]; }
572
- ;
573
-
574
- optional_type_without_static:
575
- /* empty */ { $$ = null; }
576
- | type_expr_without_static { $$ = $1; }
577
- ;
578
-
579
- optional_return_type:
580
- /* empty */ { $$ = null; }
581
- | ':' type_expr { $$ = $2; }
582
- | ':' error { $$ = null; }
583
- ;
584
-
585
- argument_list:
586
- '(' ')' { $$ = array(); }
587
- | '(' non_empty_argument_list optional_comma ')' { $$ = $2; }
588
- ;
589
-
590
- non_empty_argument_list:
591
- argument { init($1); }
592
- | non_empty_argument_list ',' argument { push($1, $3); }
593
- ;
594
-
595
- argument:
596
- expr { $$ = Node\Arg[$1, false, false]; }
597
- | '&' variable { $$ = Node\Arg[$2, true, false]; }
598
- | T_ELLIPSIS expr { $$ = Node\Arg[$2, false, true]; }
599
- | identifier_ex ':' expr
600
- { $$ = new Node\Arg($3, false, false, attributes(), $1); }
601
- ;
602
-
603
- global_var_list:
604
- non_empty_global_var_list no_comma { $$ = $1; }
605
- ;
606
-
607
- non_empty_global_var_list:
608
- non_empty_global_var_list ',' global_var { push($1, $3); }
609
- | global_var { init($1); }
610
- ;
611
-
612
- global_var:
613
- simple_variable { $$ = $1; }
614
- ;
615
-
616
- static_var_list:
617
- non_empty_static_var_list no_comma { $$ = $1; }
618
- ;
619
-
620
- non_empty_static_var_list:
621
- non_empty_static_var_list ',' static_var { push($1, $3); }
622
- | static_var { init($1); }
623
- ;
624
-
625
- static_var:
626
- plain_variable { $$ = Stmt\StaticVar[$1, null]; }
627
- | plain_variable '=' expr { $$ = Stmt\StaticVar[$1, $3]; }
628
- ;
629
-
630
- class_statement_list_ex:
631
- class_statement_list_ex class_statement { if ($2 !== null) { push($1, $2); } }
632
- | /* empty */ { init(); }
633
- ;
634
-
635
- class_statement_list:
636
- class_statement_list_ex
637
- { makeZeroLengthNop($nop, $this->lookaheadStartAttributes);
638
- if ($nop !== null) { $1[] = $nop; } $$ = $1; }
639
- ;
640
-
641
- class_statement:
642
- optional_attributes variable_modifiers optional_type_without_static property_declaration_list semi
643
- { $$ = new Stmt\Property($2, $4, attributes(), $3, $1);
644
- $this->checkProperty($$, #2); }
645
- | optional_attributes method_modifiers T_CONST class_const_list semi
646
- { $$ = new Stmt\ClassConst($4, $2, attributes(), $1);
647
- $this->checkClassConst($$, #2); }
648
- | optional_attributes method_modifiers T_FUNCTION optional_ref identifier_ex '(' parameter_list ')' optional_return_type method_body
649
- { $$ = Stmt\ClassMethod[$5, ['type' => $2, 'byRef' => $4, 'params' => $7, 'returnType' => $9, 'stmts' => $10, 'attrGroups' => $1]];
650
- $this->checkClassMethod($$, #2); }
651
- | T_USE class_name_list trait_adaptations { $$ = Stmt\TraitUse[$2, $3]; }
652
- | optional_attributes T_CASE identifier enum_case_expr semi
653
- { $$ = Stmt\EnumCase[$3, $4, $1]; }
654
- | error { $$ = null; /* will be skipped */ }
655
- ;
656
-
657
- trait_adaptations:
658
- ';' { $$ = array(); }
659
- | '{' trait_adaptation_list '}' { $$ = $2; }
660
- ;
661
-
662
- trait_adaptation_list:
663
- /* empty */ { init(); }
664
- | trait_adaptation_list trait_adaptation { push($1, $2); }
665
- ;
666
-
667
- trait_adaptation:
668
- trait_method_reference_fully_qualified T_INSTEADOF class_name_list ';'
669
- { $$ = Stmt\TraitUseAdaptation\Precedence[$1[0], $1[1], $3]; }
670
- | trait_method_reference T_AS member_modifier identifier_ex ';'
671
- { $$ = Stmt\TraitUseAdaptation\Alias[$1[0], $1[1], $3, $4]; }
672
- | trait_method_reference T_AS member_modifier ';'
673
- { $$ = Stmt\TraitUseAdaptation\Alias[$1[0], $1[1], $3, null]; }
674
- | trait_method_reference T_AS identifier ';'
675
- { $$ = Stmt\TraitUseAdaptation\Alias[$1[0], $1[1], null, $3]; }
676
- | trait_method_reference T_AS reserved_non_modifiers_identifier ';'
677
- { $$ = Stmt\TraitUseAdaptation\Alias[$1[0], $1[1], null, $3]; }
678
- ;
679
-
680
- trait_method_reference_fully_qualified:
681
- name T_PAAMAYIM_NEKUDOTAYIM identifier_ex { $$ = array($1, $3); }
682
- ;
683
- trait_method_reference:
684
- trait_method_reference_fully_qualified { $$ = $1; }
685
- | identifier_ex { $$ = array(null, $1); }
686
- ;
687
-
688
- method_body:
689
- ';' /* abstract method */ { $$ = null; }
690
- | block_or_error { $$ = $1; }
691
- ;
692
-
693
- variable_modifiers:
694
- non_empty_member_modifiers { $$ = $1; }
695
- | T_VAR { $$ = 0; }
696
- ;
697
-
698
- method_modifiers:
699
- /* empty */ { $$ = 0; }
700
- | non_empty_member_modifiers { $$ = $1; }
701
- ;
702
-
703
- non_empty_member_modifiers:
704
- member_modifier { $$ = $1; }
705
- | non_empty_member_modifiers member_modifier { $this->checkModifier($1, $2, #2); $$ = $1 | $2; }
706
- ;
707
-
708
- member_modifier:
709
- T_PUBLIC { $$ = Stmt\Class_::MODIFIER_PUBLIC; }
710
- | T_PROTECTED { $$ = Stmt\Class_::MODIFIER_PROTECTED; }
711
- | T_PRIVATE { $$ = Stmt\Class_::MODIFIER_PRIVATE; }
712
- | T_STATIC { $$ = Stmt\Class_::MODIFIER_STATIC; }
713
- | T_ABSTRACT { $$ = Stmt\Class_::MODIFIER_ABSTRACT; }
714
- | T_FINAL { $$ = Stmt\Class_::MODIFIER_FINAL; }
715
- ;
716
-
717
- property_declaration_list:
718
- non_empty_property_declaration_list no_comma { $$ = $1; }
719
- ;
720
-
721
- non_empty_property_declaration_list:
722
- property_declaration { init($1); }
723
- | non_empty_property_declaration_list ',' property_declaration
724
- { push($1, $3); }
725
- ;
726
-
727
- property_decl_name:
728
- T_VARIABLE { $$ = Node\VarLikeIdentifier[parseVar($1)]; }
729
- ;
730
-
731
- property_declaration:
732
- property_decl_name { $$ = Stmt\PropertyProperty[$1, null]; }
733
- | property_decl_name '=' expr { $$ = Stmt\PropertyProperty[$1, $3]; }
734
- ;
735
-
736
- expr_list_forbid_comma:
737
- non_empty_expr_list no_comma { $$ = $1; }
738
- ;
739
-
740
- expr_list_allow_comma:
741
- non_empty_expr_list optional_comma { $$ = $1; }
742
- ;
743
-
744
- non_empty_expr_list:
745
- non_empty_expr_list ',' expr { push($1, $3); }
746
- | expr { init($1); }
747
- ;
748
-
749
- for_expr:
750
- /* empty */ { $$ = array(); }
751
- | expr_list_forbid_comma { $$ = $1; }
752
- ;
753
-
754
- expr:
755
- variable { $$ = $1; }
756
- | list_expr '=' expr { $$ = Expr\Assign[$1, $3]; }
757
- | array_short_syntax '=' expr { $$ = Expr\Assign[$1, $3]; }
758
- | variable '=' expr { $$ = Expr\Assign[$1, $3]; }
759
- | variable '=' '&' variable { $$ = Expr\AssignRef[$1, $4]; }
760
- | new_expr { $$ = $1; }
761
- | match { $$ = $1; }
762
- | T_CLONE expr { $$ = Expr\Clone_[$2]; }
763
- | variable T_PLUS_EQUAL expr { $$ = Expr\AssignOp\Plus [$1, $3]; }
764
- | variable T_MINUS_EQUAL expr { $$ = Expr\AssignOp\Minus [$1, $3]; }
765
- | variable T_MUL_EQUAL expr { $$ = Expr\AssignOp\Mul [$1, $3]; }
766
- | variable T_DIV_EQUAL expr { $$ = Expr\AssignOp\Div [$1, $3]; }
767
- | variable T_CONCAT_EQUAL expr { $$ = Expr\AssignOp\Concat [$1, $3]; }
768
- | variable T_MOD_EQUAL expr { $$ = Expr\AssignOp\Mod [$1, $3]; }
769
- | variable T_AND_EQUAL expr { $$ = Expr\AssignOp\BitwiseAnd[$1, $3]; }
770
- | variable T_OR_EQUAL expr { $$ = Expr\AssignOp\BitwiseOr [$1, $3]; }
771
- | variable T_XOR_EQUAL expr { $$ = Expr\AssignOp\BitwiseXor[$1, $3]; }
772
- | variable T_SL_EQUAL expr { $$ = Expr\AssignOp\ShiftLeft [$1, $3]; }
773
- | variable T_SR_EQUAL expr { $$ = Expr\AssignOp\ShiftRight[$1, $3]; }
774
- | variable T_POW_EQUAL expr { $$ = Expr\AssignOp\Pow [$1, $3]; }
775
- | variable T_COALESCE_EQUAL expr { $$ = Expr\AssignOp\Coalesce [$1, $3]; }
776
- | variable T_INC { $$ = Expr\PostInc[$1]; }
777
- | T_INC variable { $$ = Expr\PreInc [$2]; }
778
- | variable T_DEC { $$ = Expr\PostDec[$1]; }
779
- | T_DEC variable { $$ = Expr\PreDec [$2]; }
780
- | expr T_BOOLEAN_OR expr { $$ = Expr\BinaryOp\BooleanOr [$1, $3]; }
781
- | expr T_BOOLEAN_AND expr { $$ = Expr\BinaryOp\BooleanAnd[$1, $3]; }
782
- | expr T_LOGICAL_OR expr { $$ = Expr\BinaryOp\LogicalOr [$1, $3]; }
783
- | expr T_LOGICAL_AND expr { $$ = Expr\BinaryOp\LogicalAnd[$1, $3]; }
784
- | expr T_LOGICAL_XOR expr { $$ = Expr\BinaryOp\LogicalXor[$1, $3]; }
785
- | expr '|' expr { $$ = Expr\BinaryOp\BitwiseOr [$1, $3]; }
786
- | expr '&' expr { $$ = Expr\BinaryOp\BitwiseAnd[$1, $3]; }
787
- | expr '^' expr { $$ = Expr\BinaryOp\BitwiseXor[$1, $3]; }
788
- | expr '.' expr { $$ = Expr\BinaryOp\Concat [$1, $3]; }
789
- | expr '+' expr { $$ = Expr\BinaryOp\Plus [$1, $3]; }
790
- | expr '-' expr { $$ = Expr\BinaryOp\Minus [$1, $3]; }
791
- | expr '*' expr { $$ = Expr\BinaryOp\Mul [$1, $3]; }
792
- | expr '/' expr { $$ = Expr\BinaryOp\Div [$1, $3]; }
793
- | expr '%' expr { $$ = Expr\BinaryOp\Mod [$1, $3]; }
794
- | expr T_SL expr { $$ = Expr\BinaryOp\ShiftLeft [$1, $3]; }
795
- | expr T_SR expr { $$ = Expr\BinaryOp\ShiftRight[$1, $3]; }
796
- | expr T_POW expr { $$ = Expr\BinaryOp\Pow [$1, $3]; }
797
- | '+' expr %prec T_INC { $$ = Expr\UnaryPlus [$2]; }
798
- | '-' expr %prec T_INC { $$ = Expr\UnaryMinus[$2]; }
799
- | '!' expr { $$ = Expr\BooleanNot[$2]; }
800
- | '~' expr { $$ = Expr\BitwiseNot[$2]; }
801
- | expr T_IS_IDENTICAL expr { $$ = Expr\BinaryOp\Identical [$1, $3]; }
802
- | expr T_IS_NOT_IDENTICAL expr { $$ = Expr\BinaryOp\NotIdentical [$1, $3]; }
803
- | expr T_IS_EQUAL expr { $$ = Expr\BinaryOp\Equal [$1, $3]; }
804
- | expr T_IS_NOT_EQUAL expr { $$ = Expr\BinaryOp\NotEqual [$1, $3]; }
805
- | expr T_SPACESHIP expr { $$ = Expr\BinaryOp\Spaceship [$1, $3]; }
806
- | expr '<' expr { $$ = Expr\BinaryOp\Smaller [$1, $3]; }
807
- | expr T_IS_SMALLER_OR_EQUAL expr { $$ = Expr\BinaryOp\SmallerOrEqual[$1, $3]; }
808
- | expr '>' expr { $$ = Expr\BinaryOp\Greater [$1, $3]; }
809
- | expr T_IS_GREATER_OR_EQUAL expr { $$ = Expr\BinaryOp\GreaterOrEqual[$1, $3]; }
810
- | expr T_INSTANCEOF class_name_reference { $$ = Expr\Instanceof_[$1, $3]; }
811
- | '(' expr ')' { $$ = $2; }
812
- | expr '?' expr ':' expr { $$ = Expr\Ternary[$1, $3, $5]; }
813
- | expr '?' ':' expr { $$ = Expr\Ternary[$1, null, $4]; }
814
- | expr T_COALESCE expr { $$ = Expr\BinaryOp\Coalesce[$1, $3]; }
815
- | T_ISSET '(' expr_list_allow_comma ')' { $$ = Expr\Isset_[$3]; }
816
- | T_EMPTY '(' expr ')' { $$ = Expr\Empty_[$3]; }
817
- | T_INCLUDE expr { $$ = Expr\Include_[$2, Expr\Include_::TYPE_INCLUDE]; }
818
- | T_INCLUDE_ONCE expr { $$ = Expr\Include_[$2, Expr\Include_::TYPE_INCLUDE_ONCE]; }
819
- | T_EVAL '(' expr ')' { $$ = Expr\Eval_[$3]; }
820
- | T_REQUIRE expr { $$ = Expr\Include_[$2, Expr\Include_::TYPE_REQUIRE]; }
821
- | T_REQUIRE_ONCE expr { $$ = Expr\Include_[$2, Expr\Include_::TYPE_REQUIRE_ONCE]; }
822
- | T_INT_CAST expr { $$ = Expr\Cast\Int_ [$2]; }
823
- | T_DOUBLE_CAST expr
824
- { $attrs = attributes();
825
- $attrs['kind'] = $this->getFloatCastKind($1);
826
- $$ = new Expr\Cast\Double($2, $attrs); }
827
- | T_STRING_CAST expr { $$ = Expr\Cast\String_ [$2]; }
828
- | T_ARRAY_CAST expr { $$ = Expr\Cast\Array_ [$2]; }
829
- | T_OBJECT_CAST expr { $$ = Expr\Cast\Object_ [$2]; }
830
- | T_BOOL_CAST expr { $$ = Expr\Cast\Bool_ [$2]; }
831
- | T_UNSET_CAST expr { $$ = Expr\Cast\Unset_ [$2]; }
832
- | T_EXIT exit_expr
833
- { $attrs = attributes();
834
- $attrs['kind'] = strtolower($1) === 'exit' ? Expr\Exit_::KIND_EXIT : Expr\Exit_::KIND_DIE;
835
- $$ = new Expr\Exit_($2, $attrs); }
836
- | '@' expr { $$ = Expr\ErrorSuppress[$2]; }
837
- | scalar { $$ = $1; }
838
- | '`' backticks_expr '`' { $$ = Expr\ShellExec[$2]; }
839
- | T_PRINT expr { $$ = Expr\Print_[$2]; }
840
- | T_YIELD { $$ = Expr\Yield_[null, null]; }
841
- | T_YIELD expr { $$ = Expr\Yield_[$2, null]; }
842
- | T_YIELD expr T_DOUBLE_ARROW expr { $$ = Expr\Yield_[$4, $2]; }
843
- | T_YIELD_FROM expr { $$ = Expr\YieldFrom[$2]; }
844
- | T_THROW expr { $$ = Expr\Throw_[$2]; }
845
-
846
- | T_FN optional_ref '(' parameter_list ')' optional_return_type T_DOUBLE_ARROW expr %prec T_THROW
847
- { $$ = Expr\ArrowFunction[['static' => false, 'byRef' => $2, 'params' => $4, 'returnType' => $6, 'expr' => $8, 'attrGroups' => []]]; }
848
- | T_STATIC T_FN optional_ref '(' parameter_list ')' optional_return_type T_DOUBLE_ARROW expr %prec T_THROW
849
- { $$ = Expr\ArrowFunction[['static' => true, 'byRef' => $3, 'params' => $5, 'returnType' => $7, 'expr' => $9, 'attrGroups' => []]]; }
850
- | T_FUNCTION optional_ref '(' parameter_list ')' lexical_vars optional_return_type block_or_error
851
- { $$ = Expr\Closure[['static' => false, 'byRef' => $2, 'params' => $4, 'uses' => $6, 'returnType' => $7, 'stmts' => $8, 'attrGroups' => []]]; }
852
- | T_STATIC T_FUNCTION optional_ref '(' parameter_list ')' lexical_vars optional_return_type block_or_error
853
- { $$ = Expr\Closure[['static' => true, 'byRef' => $3, 'params' => $5, 'uses' => $7, 'returnType' => $8, 'stmts' => $9, 'attrGroups' => []]]; }
854
-
855
- | attributes T_FN optional_ref '(' parameter_list ')' optional_return_type T_DOUBLE_ARROW expr %prec T_THROW
856
- { $$ = Expr\ArrowFunction[['static' => false, 'byRef' => $3, 'params' => $5, 'returnType' => $7, 'expr' => $9, 'attrGroups' => $1]]; }
857
- | attributes T_STATIC T_FN optional_ref '(' parameter_list ')' optional_return_type T_DOUBLE_ARROW expr %prec T_THROW
858
- { $$ = Expr\ArrowFunction[['static' => true, 'byRef' => $4, 'params' => $6, 'returnType' => $8, 'expr' => $10, 'attrGroups' => $1]]; }
859
- | attributes T_FUNCTION optional_ref '(' parameter_list ')' lexical_vars optional_return_type block_or_error
860
- { $$ = Expr\Closure[['static' => false, 'byRef' => $3, 'params' => $5, 'uses' => $7, 'returnType' => $8, 'stmts' => $9, 'attrGroups' => $1]]; }
861
- | attributes T_STATIC T_FUNCTION optional_ref '(' parameter_list ')' lexical_vars optional_return_type block_or_error
862
- { $$ = Expr\Closure[['static' => true, 'byRef' => $4, 'params' => $6, 'uses' => $8, 'returnType' => $9, 'stmts' => $10, 'attrGroups' => $1]]; }
863
- ;
864
-
865
- anonymous_class:
866
- optional_attributes T_CLASS ctor_arguments extends_from implements_list '{' class_statement_list '}'
867
- { $$ = array(Stmt\Class_[null, ['type' => 0, 'extends' => $4, 'implements' => $5, 'stmts' => $7, 'attrGroups' => $1]], $3);
868
- $this->checkClass($$[0], -1); }
869
- ;
870
-
871
- new_expr:
872
- T_NEW class_name_reference ctor_arguments { $$ = Expr\New_[$2, $3]; }
873
- | T_NEW anonymous_class
874
- { list($class, $ctorArgs) = $2; $$ = Expr\New_[$class, $ctorArgs]; }
875
- ;
876
-
877
- lexical_vars:
878
- /* empty */ { $$ = array(); }
879
- | T_USE '(' lexical_var_list ')' { $$ = $3; }
880
- ;
881
-
882
- lexical_var_list:
883
- non_empty_lexical_var_list optional_comma { $$ = $1; }
884
- ;
885
-
886
- non_empty_lexical_var_list:
887
- lexical_var { init($1); }
888
- | non_empty_lexical_var_list ',' lexical_var { push($1, $3); }
889
- ;
890
-
891
- lexical_var:
892
- optional_ref plain_variable { $$ = Expr\ClosureUse[$2, $1]; }
893
- ;
894
-
895
- function_call:
896
- name argument_list { $$ = Expr\FuncCall[$1, $2]; }
897
- | callable_expr argument_list { $$ = Expr\FuncCall[$1, $2]; }
898
- | class_name_or_var T_PAAMAYIM_NEKUDOTAYIM member_name argument_list
899
- { $$ = Expr\StaticCall[$1, $3, $4]; }
900
- ;
901
-
902
- class_name:
903
- T_STATIC { $$ = Name[$1]; }
904
- | name { $$ = $1; }
905
- ;
906
-
907
- name:
908
- T_STRING { $$ = Name[$1]; }
909
- | T_NAME_QUALIFIED { $$ = Name[$1]; }
910
- | T_NAME_FULLY_QUALIFIED { $$ = Name\FullyQualified[substr($1, 1)]; }
911
- | T_NAME_RELATIVE { $$ = Name\Relative[substr($1, 10)]; }
912
- ;
913
-
914
- class_name_reference:
915
- class_name { $$ = $1; }
916
- | new_variable { $$ = $1; }
917
- | '(' expr ')' { $$ = $2; }
918
- | error { $$ = Expr\Error[]; $this->errorState = 2; }
919
- ;
920
-
921
- class_name_or_var:
922
- class_name { $$ = $1; }
923
- | fully_dereferencable { $$ = $1; }
924
- ;
925
-
926
- exit_expr:
927
- /* empty */ { $$ = null; }
928
- | '(' optional_expr ')' { $$ = $2; }
929
- ;
930
-
931
- backticks_expr:
932
- /* empty */ { $$ = array(); }
933
- | T_ENCAPSED_AND_WHITESPACE
934
- { $$ = array(Scalar\EncapsedStringPart[Scalar\String_::parseEscapeSequences($1, '`')]); }
935
- | encaps_list { parseEncapsed($1, '`', true); $$ = $1; }
936
- ;
937
-
938
- ctor_arguments:
939
- /* empty */ { $$ = array(); }
940
- | argument_list { $$ = $1; }
941
- ;
942
-
943
- constant:
944
- name { $$ = Expr\ConstFetch[$1]; }
945
- | T_LINE { $$ = Scalar\MagicConst\Line[]; }
946
- | T_FILE { $$ = Scalar\MagicConst\File[]; }
947
- | T_DIR { $$ = Scalar\MagicConst\Dir[]; }
948
- | T_CLASS_C { $$ = Scalar\MagicConst\Class_[]; }
949
- | T_TRAIT_C { $$ = Scalar\MagicConst\Trait_[]; }
950
- | T_METHOD_C { $$ = Scalar\MagicConst\Method[]; }
951
- | T_FUNC_C { $$ = Scalar\MagicConst\Function_[]; }
952
- | T_NS_C { $$ = Scalar\MagicConst\Namespace_[]; }
953
- ;
954
-
955
- class_constant:
956
- class_name_or_var T_PAAMAYIM_NEKUDOTAYIM identifier_ex
957
- { $$ = Expr\ClassConstFetch[$1, $3]; }
958
- /* We interpret an isolated FOO:: as an unfinished class constant fetch. It could also be
959
- an unfinished static property fetch or unfinished scoped call. */
960
- | class_name_or_var T_PAAMAYIM_NEKUDOTAYIM error
961
- { $$ = Expr\ClassConstFetch[$1, new Expr\Error(stackAttributes(#3))]; $this->errorState = 2; }
962
- ;
963
-
964
- array_short_syntax:
965
- '[' array_pair_list ']'
966
- { $attrs = attributes(); $attrs['kind'] = Expr\Array_::KIND_SHORT;
967
- $$ = new Expr\Array_($2, $attrs); }
968
- ;
969
-
970
- dereferencable_scalar:
971
- T_ARRAY '(' array_pair_list ')'
972
- { $attrs = attributes(); $attrs['kind'] = Expr\Array_::KIND_LONG;
973
- $$ = new Expr\Array_($3, $attrs); }
974
- | array_short_syntax { $$ = $1; }
975
- | T_CONSTANT_ENCAPSED_STRING
976
- { $attrs = attributes(); $attrs['kind'] = strKind($1);
977
- $$ = new Scalar\String_(Scalar\String_::parse($1), $attrs); }
978
- | '"' encaps_list '"'
979
- { $attrs = attributes(); $attrs['kind'] = Scalar\String_::KIND_DOUBLE_QUOTED;
980
- parseEncapsed($2, '"', true); $$ = new Scalar\Encapsed($2, $attrs); }
981
- ;
982
-
983
- scalar:
984
- T_LNUMBER { $$ = $this->parseLNumber($1, attributes()); }
985
- | T_DNUMBER { $$ = Scalar\DNumber[Scalar\DNumber::parse($1)]; }
986
- | dereferencable_scalar { $$ = $1; }
987
- | constant { $$ = $1; }
988
- | class_constant { $$ = $1; }
989
- | T_START_HEREDOC T_ENCAPSED_AND_WHITESPACE T_END_HEREDOC
990
- { $$ = $this->parseDocString($1, $2, $3, attributes(), stackAttributes(#3), true); }
991
- | T_START_HEREDOC T_END_HEREDOC
992
- { $$ = $this->parseDocString($1, '', $2, attributes(), stackAttributes(#2), true); }
993
- | T_START_HEREDOC encaps_list T_END_HEREDOC
994
- { $$ = $this->parseDocString($1, $2, $3, attributes(), stackAttributes(#3), true); }
995
- ;
996
-
997
- optional_expr:
998
- /* empty */ { $$ = null; }
999
- | expr { $$ = $1; }
1000
- ;
1001
-
1002
- fully_dereferencable:
1003
- variable { $$ = $1; }
1004
- | '(' expr ')' { $$ = $2; }
1005
- | dereferencable_scalar { $$ = $1; }
1006
- | class_constant { $$ = $1; }
1007
- ;
1008
-
1009
- array_object_dereferencable:
1010
- fully_dereferencable { $$ = $1; }
1011
- | constant { $$ = $1; }
1012
- ;
1013
-
1014
- callable_expr:
1015
- callable_variable { $$ = $1; }
1016
- | '(' expr ')' { $$ = $2; }
1017
- | dereferencable_scalar { $$ = $1; }
1018
- ;
1019
-
1020
- callable_variable:
1021
- simple_variable { $$ = $1; }
1022
- | array_object_dereferencable '[' optional_expr ']' { $$ = Expr\ArrayDimFetch[$1, $3]; }
1023
- | array_object_dereferencable '{' expr '}' { $$ = Expr\ArrayDimFetch[$1, $3]; }
1024
- | function_call { $$ = $1; }
1025
- | array_object_dereferencable T_OBJECT_OPERATOR property_name argument_list
1026
- { $$ = Expr\MethodCall[$1, $3, $4]; }
1027
- | array_object_dereferencable T_NULLSAFE_OBJECT_OPERATOR property_name argument_list
1028
- { $$ = Expr\NullsafeMethodCall[$1, $3, $4]; }
1029
- ;
1030
-
1031
- optional_plain_variable:
1032
- /* empty */ { $$ = null; }
1033
- | plain_variable { $$ = $1; }
1034
- ;
1035
-
1036
- variable:
1037
- callable_variable { $$ = $1; }
1038
- | static_member { $$ = $1; }
1039
- | array_object_dereferencable T_OBJECT_OPERATOR property_name
1040
- { $$ = Expr\PropertyFetch[$1, $3]; }
1041
- | array_object_dereferencable T_NULLSAFE_OBJECT_OPERATOR property_name
1042
- { $$ = Expr\NullsafePropertyFetch[$1, $3]; }
1043
- ;
1044
-
1045
- simple_variable:
1046
- plain_variable { $$ = $1; }
1047
- | '$' '{' expr '}' { $$ = Expr\Variable[$3]; }
1048
- | '$' simple_variable { $$ = Expr\Variable[$2]; }
1049
- | '$' error { $$ = Expr\Variable[Expr\Error[]]; $this->errorState = 2; }
1050
- ;
1051
-
1052
- static_member_prop_name:
1053
- simple_variable
1054
- { $var = $1->name; $$ = \is_string($var) ? Node\VarLikeIdentifier[$var] : $var; }
1055
- ;
1056
-
1057
- static_member:
1058
- class_name_or_var T_PAAMAYIM_NEKUDOTAYIM static_member_prop_name
1059
- { $$ = Expr\StaticPropertyFetch[$1, $3]; }
1060
- ;
1061
-
1062
- new_variable:
1063
- simple_variable { $$ = $1; }
1064
- | new_variable '[' optional_expr ']' { $$ = Expr\ArrayDimFetch[$1, $3]; }
1065
- | new_variable '{' expr '}' { $$ = Expr\ArrayDimFetch[$1, $3]; }
1066
- | new_variable T_OBJECT_OPERATOR property_name { $$ = Expr\PropertyFetch[$1, $3]; }
1067
- | new_variable T_NULLSAFE_OBJECT_OPERATOR property_name { $$ = Expr\NullsafePropertyFetch[$1, $3]; }
1068
- | class_name T_PAAMAYIM_NEKUDOTAYIM static_member_prop_name
1069
- { $$ = Expr\StaticPropertyFetch[$1, $3]; }
1070
- | new_variable T_PAAMAYIM_NEKUDOTAYIM static_member_prop_name
1071
- { $$ = Expr\StaticPropertyFetch[$1, $3]; }
1072
- ;
1073
-
1074
- member_name:
1075
- identifier_ex { $$ = $1; }
1076
- | '{' expr '}' { $$ = $2; }
1077
- | simple_variable { $$ = $1; }
1078
- ;
1079
-
1080
- property_name:
1081
- identifier { $$ = $1; }
1082
- | '{' expr '}' { $$ = $2; }
1083
- | simple_variable { $$ = $1; }
1084
- | error { $$ = Expr\Error[]; $this->errorState = 2; }
1085
- ;
1086
-
1087
- list_expr:
1088
- T_LIST '(' inner_array_pair_list ')' { $$ = Expr\List_[$3]; }
1089
- ;
1090
-
1091
- array_pair_list:
1092
- inner_array_pair_list
1093
- { $$ = $1; $end = count($$)-1; if ($$[$end] === null) array_pop($$); }
1094
- ;
1095
-
1096
- comma_or_error:
1097
- ','
1098
- | error
1099
- { /* do nothing -- prevent default action of $$=$1. See #551. */ }
1100
- ;
1101
-
1102
- inner_array_pair_list:
1103
- inner_array_pair_list comma_or_error array_pair { push($1, $3); }
1104
- | array_pair { init($1); }
1105
- ;
1106
-
1107
- array_pair:
1108
- expr { $$ = Expr\ArrayItem[$1, null, false]; }
1109
- | '&' variable { $$ = Expr\ArrayItem[$2, null, true]; }
1110
- | list_expr { $$ = Expr\ArrayItem[$1, null, false]; }
1111
- | expr T_DOUBLE_ARROW expr { $$ = Expr\ArrayItem[$3, $1, false]; }
1112
- | expr T_DOUBLE_ARROW '&' variable { $$ = Expr\ArrayItem[$4, $1, true]; }
1113
- | expr T_DOUBLE_ARROW list_expr { $$ = Expr\ArrayItem[$3, $1, false]; }
1114
- | T_ELLIPSIS expr { $$ = Expr\ArrayItem[$2, null, false, attributes(), true]; }
1115
- | /* empty */ { $$ = null; }
1116
- ;
1117
-
1118
- encaps_list:
1119
- encaps_list encaps_var { push($1, $2); }
1120
- | encaps_list encaps_string_part { push($1, $2); }
1121
- | encaps_var { init($1); }
1122
- | encaps_string_part encaps_var { init($1, $2); }
1123
- ;
1124
-
1125
- encaps_string_part:
1126
- T_ENCAPSED_AND_WHITESPACE { $$ = Scalar\EncapsedStringPart[$1]; }
1127
- ;
1128
-
1129
- encaps_str_varname:
1130
- T_STRING_VARNAME { $$ = Expr\Variable[$1]; }
1131
- ;
1132
-
1133
- encaps_var:
1134
- plain_variable { $$ = $1; }
1135
- | plain_variable '[' encaps_var_offset ']' { $$ = Expr\ArrayDimFetch[$1, $3]; }
1136
- | plain_variable T_OBJECT_OPERATOR identifier { $$ = Expr\PropertyFetch[$1, $3]; }
1137
- | plain_variable T_NULLSAFE_OBJECT_OPERATOR identifier { $$ = Expr\NullsafePropertyFetch[$1, $3]; }
1138
- | T_DOLLAR_OPEN_CURLY_BRACES expr '}' { $$ = Expr\Variable[$2]; }
1139
- | T_DOLLAR_OPEN_CURLY_BRACES T_STRING_VARNAME '}' { $$ = Expr\Variable[$2]; }
1140
- | T_DOLLAR_OPEN_CURLY_BRACES encaps_str_varname '[' expr ']' '}'
1141
- { $$ = Expr\ArrayDimFetch[$2, $4]; }
1142
- | T_CURLY_OPEN variable '}' { $$ = $2; }
1143
- ;
1144
-
1145
- encaps_var_offset:
1146
- T_STRING { $$ = Scalar\String_[$1]; }
1147
- | T_NUM_STRING { $$ = $this->parseNumString($1, attributes()); }
1148
- | '-' T_NUM_STRING { $$ = $this->parseNumString('-' . $2, attributes()); }
1149
- | plain_variable { $$ = $1; }
1150
- ;
1151
-
1152
- %%