@appthreat/atom 1.7.5 → 1.8.1

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 (326) hide show
  1. package/astgen.js +6 -2
  2. package/index.js +3 -1
  3. package/package.json +3 -2
  4. package/phpastgen.js +31 -0
  5. package/plugins/autoload.php +25 -0
  6. package/plugins/bin/atom +1 -1
  7. package/plugins/bin/atom.bat +1 -1
  8. package/plugins/bin/php-parse +119 -0
  9. package/plugins/composer/ClassLoader.php +579 -0
  10. package/plugins/composer/InstalledVersions.php +359 -0
  11. package/plugins/composer/LICENSE +21 -0
  12. package/plugins/composer/autoload_classmap.php +260 -0
  13. package/plugins/composer/autoload_namespaces.php +9 -0
  14. package/plugins/composer/autoload_psr4.php +10 -0
  15. package/plugins/composer/autoload_real.php +36 -0
  16. package/plugins/composer/autoload_static.php +286 -0
  17. package/plugins/composer/installed.json +67 -0
  18. package/plugins/composer/installed.php +32 -0
  19. package/plugins/lib/{com.fasterxml.jackson.core.jackson-annotations-2.15.2.jar → com.fasterxml.jackson.core.jackson-annotations-2.16.0.jar} +0 -0
  20. package/plugins/lib/com.fasterxml.jackson.core.jackson-core-2.16.0.jar +0 -0
  21. package/plugins/lib/{com.fasterxml.jackson.core.jackson-databind-2.15.2.jar → com.fasterxml.jackson.core.jackson-databind-2.16.0.jar} +0 -0
  22. package/plugins/lib/{com.github.javaparser.javaparser-core-3.25.6.jar → com.github.javaparser.javaparser-core-3.25.7.jar} +0 -0
  23. package/plugins/lib/{com.github.javaparser.javaparser-symbol-solver-core-3.25.6.jar → com.github.javaparser.javaparser-symbol-solver-core-3.25.7.jar} +0 -0
  24. package/plugins/lib/{com.typesafe.config-1.4.2.jar → com.typesafe.config-1.4.3.jar} +0 -0
  25. package/plugins/lib/io.appthreat.atom-1.8.1-classpath.jar +0 -0
  26. package/plugins/lib/{io.appthreat.atom-1.7.5.jar → io.appthreat.atom-1.8.1.jar} +0 -0
  27. package/plugins/lib/{io.appthreat.c2cpg_3-1.0.10.jar → io.appthreat.c2cpg_3-1.1.3.jar} +0 -0
  28. package/plugins/lib/{io.appthreat.dataflowengineoss_3-1.0.10.jar → io.appthreat.dataflowengineoss_3-1.1.3.jar} +0 -0
  29. package/plugins/lib/{io.appthreat.javasrc2cpg_3-1.0.10.jar → io.appthreat.javasrc2cpg_3-1.1.3.jar} +0 -0
  30. package/plugins/lib/{io.appthreat.jimple2cpg_3-1.0.10.jar → io.appthreat.jimple2cpg_3-1.1.3.jar} +0 -0
  31. package/plugins/lib/{io.appthreat.jssrc2cpg_3-1.0.10.jar → io.appthreat.jssrc2cpg_3-1.1.3.jar} +0 -0
  32. package/plugins/lib/io.appthreat.php2atom_3-1.1.3.jar +0 -0
  33. package/plugins/lib/{io.appthreat.pysrc2cpg_3-1.0.10.jar → io.appthreat.pysrc2cpg_3-1.1.3.jar} +0 -0
  34. package/plugins/lib/{io.appthreat.semanticcpg_3-1.0.10.jar → io.appthreat.semanticcpg_3-1.1.3.jar} +0 -0
  35. package/plugins/lib/{io.appthreat.x2cpg_3-1.0.10.jar → io.appthreat.x2cpg_3-1.1.3.jar} +0 -0
  36. package/plugins/lib/io.circe.circe-core_3-0.14.6.jar +0 -0
  37. package/plugins/lib/io.circe.circe-generic_3-0.14.6.jar +0 -0
  38. package/plugins/lib/io.circe.circe-jawn_3-0.14.6.jar +0 -0
  39. package/plugins/lib/io.circe.circe-numbers_3-0.14.6.jar +0 -0
  40. package/plugins/lib/io.circe.circe-parser_3-0.14.6.jar +0 -0
  41. package/plugins/lib/org.gradle.gradle-tooling-api-8.5.jar +0 -0
  42. package/plugins/lib/{org.json4s.json4s-ast_3-4.0.6.jar → org.json4s.json4s-ast_3-4.0.7.jar} +0 -0
  43. package/plugins/lib/{org.json4s.json4s-core_3-4.0.6.jar → org.json4s.json4s-core_3-4.0.7.jar} +0 -0
  44. package/plugins/lib/{org.json4s.json4s-native-core_3-4.0.6.jar → org.json4s.json4s-native-core_3-4.0.7.jar} +0 -0
  45. package/plugins/lib/{org.json4s.json4s-native_3-4.0.6.jar → org.json4s.json4s-native_3-4.0.7.jar} +0 -0
  46. package/plugins/lib/{org.json4s.json4s-scalap_3-4.0.6.jar → org.json4s.json4s-scalap_3-4.0.7.jar} +0 -0
  47. package/plugins/lib/org.scala-lang.modules.scala-parser-combinators_3-2.3.0.jar +0 -0
  48. package/plugins/nikic/php-parser/.php-cs-fixer.dist.php +31 -0
  49. package/plugins/nikic/php-parser/LICENSE +29 -0
  50. package/plugins/nikic/php-parser/Makefile +10 -0
  51. package/plugins/nikic/php-parser/README.md +233 -0
  52. package/plugins/nikic/php-parser/bin/php-parse +206 -0
  53. package/plugins/nikic/php-parser/composer.json +43 -0
  54. package/plugins/nikic/php-parser/lib/PhpParser/Builder/ClassConst.php +150 -0
  55. package/plugins/nikic/php-parser/lib/PhpParser/Builder/Class_.php +151 -0
  56. package/plugins/nikic/php-parser/lib/PhpParser/Builder/Declaration.php +50 -0
  57. package/plugins/nikic/php-parser/lib/PhpParser/Builder/EnumCase.php +87 -0
  58. package/plugins/nikic/php-parser/lib/PhpParser/Builder/Enum_.php +116 -0
  59. package/plugins/nikic/php-parser/lib/PhpParser/Builder/FunctionLike.php +73 -0
  60. package/plugins/nikic/php-parser/lib/PhpParser/Builder/Function_.php +67 -0
  61. package/plugins/nikic/php-parser/lib/PhpParser/Builder/Interface_.php +94 -0
  62. package/plugins/nikic/php-parser/lib/PhpParser/Builder/Method.php +147 -0
  63. package/plugins/nikic/php-parser/lib/PhpParser/Builder/Namespace_.php +45 -0
  64. package/plugins/nikic/php-parser/lib/PhpParser/Builder/Param.php +149 -0
  65. package/plugins/nikic/php-parser/lib/PhpParser/Builder/Property.php +161 -0
  66. package/plugins/nikic/php-parser/lib/PhpParser/Builder/TraitUse.php +65 -0
  67. package/plugins/nikic/php-parser/lib/PhpParser/Builder/TraitUseAdaptation.php +145 -0
  68. package/plugins/nikic/php-parser/lib/PhpParser/Builder/Trait_.php +83 -0
  69. package/plugins/nikic/php-parser/lib/PhpParser/Builder/Use_.php +49 -0
  70. package/plugins/nikic/php-parser/lib/PhpParser/Builder.php +12 -0
  71. package/plugins/nikic/php-parser/lib/PhpParser/BuilderFactory.php +375 -0
  72. package/plugins/nikic/php-parser/lib/PhpParser/BuilderHelpers.php +333 -0
  73. package/plugins/nikic/php-parser/lib/PhpParser/Comment/Doc.php +6 -0
  74. package/plugins/nikic/php-parser/lib/PhpParser/Comment.php +207 -0
  75. package/plugins/nikic/php-parser/lib/PhpParser/ConstExprEvaluationException.php +6 -0
  76. package/plugins/nikic/php-parser/lib/PhpParser/ConstExprEvaluator.php +234 -0
  77. package/plugins/nikic/php-parser/lib/PhpParser/Error.php +171 -0
  78. package/plugins/nikic/php-parser/lib/PhpParser/ErrorHandler/Collecting.php +43 -0
  79. package/plugins/nikic/php-parser/lib/PhpParser/ErrorHandler/Throwing.php +17 -0
  80. package/plugins/nikic/php-parser/lib/PhpParser/ErrorHandler.php +12 -0
  81. package/plugins/nikic/php-parser/lib/PhpParser/Internal/DiffElem.php +31 -0
  82. package/plugins/nikic/php-parser/lib/PhpParser/Internal/Differ.php +178 -0
  83. package/plugins/nikic/php-parser/lib/PhpParser/Internal/PrintableNewAnonClassNode.php +71 -0
  84. package/plugins/nikic/php-parser/lib/PhpParser/Internal/TokenPolyfill.php +237 -0
  85. package/plugins/nikic/php-parser/lib/PhpParser/Internal/TokenStream.php +271 -0
  86. package/plugins/nikic/php-parser/lib/PhpParser/JsonDecoder.php +108 -0
  87. package/plugins/nikic/php-parser/lib/PhpParser/Lexer/Emulative.php +226 -0
  88. package/plugins/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/AttributeEmulator.php +49 -0
  89. package/plugins/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/EnumTokenEmulator.php +26 -0
  90. package/plugins/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/ExplicitOctalEmulator.php +45 -0
  91. package/plugins/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/KeywordEmulator.php +56 -0
  92. package/plugins/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/MatchTokenEmulator.php +19 -0
  93. package/plugins/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/NullsafeTokenEmulator.php +60 -0
  94. package/plugins/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/ReadonlyFunctionTokenEmulator.php +31 -0
  95. package/plugins/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/ReadonlyTokenEmulator.php +31 -0
  96. package/plugins/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/ReverseEmulator.php +37 -0
  97. package/plugins/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/TokenEmulator.php +30 -0
  98. package/plugins/nikic/php-parser/lib/PhpParser/Lexer.php +116 -0
  99. package/plugins/nikic/php-parser/lib/PhpParser/Modifiers.php +69 -0
  100. package/plugins/nikic/php-parser/lib/PhpParser/NameContext.php +284 -0
  101. package/plugins/nikic/php-parser/lib/PhpParser/Node/Arg.php +44 -0
  102. package/plugins/nikic/php-parser/lib/PhpParser/Node/ArrayItem.php +43 -0
  103. package/plugins/nikic/php-parser/lib/PhpParser/Node/Attribute.php +33 -0
  104. package/plugins/nikic/php-parser/lib/PhpParser/Node/AttributeGroup.php +27 -0
  105. package/plugins/nikic/php-parser/lib/PhpParser/Node/ClosureUse.php +36 -0
  106. package/plugins/nikic/php-parser/lib/PhpParser/Node/ComplexType.php +13 -0
  107. package/plugins/nikic/php-parser/lib/PhpParser/Node/Const_.php +36 -0
  108. package/plugins/nikic/php-parser/lib/PhpParser/Node/DeclareItem.php +37 -0
  109. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/ArrayDimFetch.php +33 -0
  110. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/ArrayItem.php +3 -0
  111. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/Array_.php +34 -0
  112. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/ArrowFunction.php +84 -0
  113. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/Assign.php +33 -0
  114. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/BitwiseAnd.php +11 -0
  115. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/BitwiseOr.php +11 -0
  116. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/BitwiseXor.php +11 -0
  117. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Coalesce.php +11 -0
  118. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Concat.php +11 -0
  119. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Div.php +11 -0
  120. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Minus.php +11 -0
  121. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Mod.php +11 -0
  122. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Mul.php +11 -0
  123. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Plus.php +11 -0
  124. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Pow.php +11 -0
  125. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/ShiftLeft.php +11 -0
  126. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/ShiftRight.php +11 -0
  127. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp.php +29 -0
  128. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/AssignRef.php +33 -0
  129. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/BitwiseAnd.php +15 -0
  130. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/BitwiseOr.php +15 -0
  131. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/BitwiseXor.php +15 -0
  132. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/BooleanAnd.php +15 -0
  133. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/BooleanOr.php +15 -0
  134. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Coalesce.php +15 -0
  135. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Concat.php +15 -0
  136. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Div.php +15 -0
  137. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Equal.php +15 -0
  138. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Greater.php +15 -0
  139. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/GreaterOrEqual.php +15 -0
  140. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Identical.php +15 -0
  141. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/LogicalAnd.php +15 -0
  142. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/LogicalOr.php +15 -0
  143. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/LogicalXor.php +15 -0
  144. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Minus.php +15 -0
  145. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Mod.php +15 -0
  146. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Mul.php +15 -0
  147. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/NotEqual.php +15 -0
  148. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/NotIdentical.php +15 -0
  149. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Plus.php +15 -0
  150. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Pow.php +15 -0
  151. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/ShiftLeft.php +15 -0
  152. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/ShiftRight.php +15 -0
  153. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Smaller.php +15 -0
  154. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/SmallerOrEqual.php +15 -0
  155. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Spaceship.php +15 -0
  156. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp.php +37 -0
  157. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/BitwiseNot.php +29 -0
  158. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/BooleanNot.php +29 -0
  159. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/CallLike.php +35 -0
  160. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Array_.php +11 -0
  161. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Bool_.php +11 -0
  162. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Double.php +16 -0
  163. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Int_.php +11 -0
  164. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Object_.php +11 -0
  165. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/String_.php +11 -0
  166. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Unset_.php +11 -0
  167. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/Cast.php +25 -0
  168. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/ClassConstFetch.php +36 -0
  169. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/Clone_.php +29 -0
  170. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/Closure.php +86 -0
  171. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/ClosureUse.php +3 -0
  172. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/ConstFetch.php +30 -0
  173. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/Empty_.php +29 -0
  174. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/Error.php +30 -0
  175. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/ErrorSuppress.php +29 -0
  176. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/Eval_.php +29 -0
  177. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/Exit_.php +33 -0
  178. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/FuncCall.php +38 -0
  179. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/Include_.php +38 -0
  180. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/Instanceof_.php +35 -0
  181. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/Isset_.php +29 -0
  182. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/List_.php +34 -0
  183. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/Match_.php +32 -0
  184. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/MethodCall.php +45 -0
  185. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/New_.php +40 -0
  186. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/NullsafeMethodCall.php +45 -0
  187. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/NullsafePropertyFetch.php +35 -0
  188. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/PostDec.php +29 -0
  189. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/PostInc.php +29 -0
  190. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/PreDec.php +29 -0
  191. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/PreInc.php +29 -0
  192. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/Print_.php +29 -0
  193. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/PropertyFetch.php +35 -0
  194. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/ShellExec.php +30 -0
  195. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/StaticCall.php +45 -0
  196. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/StaticPropertyFetch.php +36 -0
  197. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/Ternary.php +37 -0
  198. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/Throw_.php +29 -0
  199. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/UnaryMinus.php +29 -0
  200. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/UnaryPlus.php +29 -0
  201. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/Variable.php +29 -0
  202. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/YieldFrom.php +29 -0
  203. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/Yield_.php +33 -0
  204. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr.php +8 -0
  205. package/plugins/nikic/php-parser/lib/PhpParser/Node/FunctionLike.php +40 -0
  206. package/plugins/nikic/php-parser/lib/PhpParser/Node/Identifier.php +75 -0
  207. package/plugins/nikic/php-parser/lib/PhpParser/Node/InterpolatedStringPart.php +32 -0
  208. package/plugins/nikic/php-parser/lib/PhpParser/Node/IntersectionType.php +27 -0
  209. package/plugins/nikic/php-parser/lib/PhpParser/Node/MatchArm.php +30 -0
  210. package/plugins/nikic/php-parser/lib/PhpParser/Node/Name/FullyQualified.php +49 -0
  211. package/plugins/nikic/php-parser/lib/PhpParser/Node/Name/Relative.php +49 -0
  212. package/plugins/nikic/php-parser/lib/PhpParser/Node/Name.php +269 -0
  213. package/plugins/nikic/php-parser/lib/PhpParser/Node/NullableType.php +29 -0
  214. package/plugins/nikic/php-parser/lib/PhpParser/Node/Param.php +84 -0
  215. package/plugins/nikic/php-parser/lib/PhpParser/Node/PropertyItem.php +37 -0
  216. package/plugins/nikic/php-parser/lib/PhpParser/Node/Scalar/DNumber.php +3 -0
  217. package/plugins/nikic/php-parser/lib/PhpParser/Node/Scalar/Encapsed.php +3 -0
  218. package/plugins/nikic/php-parser/lib/PhpParser/Node/Scalar/EncapsedStringPart.php +3 -0
  219. package/plugins/nikic/php-parser/lib/PhpParser/Node/Scalar/Float_.php +78 -0
  220. package/plugins/nikic/php-parser/lib/PhpParser/Node/Scalar/Int_.php +82 -0
  221. package/plugins/nikic/php-parser/lib/PhpParser/Node/Scalar/InterpolatedString.php +34 -0
  222. package/plugins/nikic/php-parser/lib/PhpParser/Node/Scalar/LNumber.php +3 -0
  223. package/plugins/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Class_.php +15 -0
  224. package/plugins/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Dir.php +15 -0
  225. package/plugins/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/File.php +15 -0
  226. package/plugins/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Function_.php +15 -0
  227. package/plugins/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Line.php +15 -0
  228. package/plugins/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Method.php +15 -0
  229. package/plugins/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Namespace_.php +15 -0
  230. package/plugins/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Trait_.php +15 -0
  231. package/plugins/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst.php +27 -0
  232. package/plugins/nikic/php-parser/lib/PhpParser/Node/Scalar/String_.php +161 -0
  233. package/plugins/nikic/php-parser/lib/PhpParser/Node/Scalar.php +6 -0
  234. package/plugins/nikic/php-parser/lib/PhpParser/Node/StaticVar.php +39 -0
  235. package/plugins/nikic/php-parser/lib/PhpParser/Node/Stmt/Block.php +29 -0
  236. package/plugins/nikic/php-parser/lib/PhpParser/Node/Stmt/Break_.php +29 -0
  237. package/plugins/nikic/php-parser/lib/PhpParser/Node/Stmt/Case_.php +33 -0
  238. package/plugins/nikic/php-parser/lib/PhpParser/Node/Stmt/Catch_.php +40 -0
  239. package/plugins/nikic/php-parser/lib/PhpParser/Node/Stmt/ClassConst.php +77 -0
  240. package/plugins/nikic/php-parser/lib/PhpParser/Node/Stmt/ClassLike.php +109 -0
  241. package/plugins/nikic/php-parser/lib/PhpParser/Node/Stmt/ClassMethod.php +154 -0
  242. package/plugins/nikic/php-parser/lib/PhpParser/Node/Stmt/Class_.php +94 -0
  243. package/plugins/nikic/php-parser/lib/PhpParser/Node/Stmt/Const_.php +29 -0
  244. package/plugins/nikic/php-parser/lib/PhpParser/Node/Stmt/Continue_.php +29 -0
  245. package/plugins/nikic/php-parser/lib/PhpParser/Node/Stmt/DeclareDeclare.php +3 -0
  246. package/plugins/nikic/php-parser/lib/PhpParser/Node/Stmt/Declare_.php +34 -0
  247. package/plugins/nikic/php-parser/lib/PhpParser/Node/Stmt/Do_.php +33 -0
  248. package/plugins/nikic/php-parser/lib/PhpParser/Node/Stmt/Echo_.php +29 -0
  249. package/plugins/nikic/php-parser/lib/PhpParser/Node/Stmt/ElseIf_.php +33 -0
  250. package/plugins/nikic/php-parser/lib/PhpParser/Node/Stmt/Else_.php +29 -0
  251. package/plugins/nikic/php-parser/lib/PhpParser/Node/Stmt/EnumCase.php +36 -0
  252. package/plugins/nikic/php-parser/lib/PhpParser/Node/Stmt/Enum_.php +44 -0
  253. package/plugins/nikic/php-parser/lib/PhpParser/Node/Stmt/Expression.php +32 -0
  254. package/plugins/nikic/php-parser/lib/PhpParser/Node/Stmt/Finally_.php +29 -0
  255. package/plugins/nikic/php-parser/lib/PhpParser/Node/Stmt/For_.php +47 -0
  256. package/plugins/nikic/php-parser/lib/PhpParser/Node/Stmt/Foreach_.php +50 -0
  257. package/plugins/nikic/php-parser/lib/PhpParser/Node/Stmt/Function_.php +81 -0
  258. package/plugins/nikic/php-parser/lib/PhpParser/Node/Stmt/Global_.php +29 -0
  259. package/plugins/nikic/php-parser/lib/PhpParser/Node/Stmt/Goto_.php +30 -0
  260. package/plugins/nikic/php-parser/lib/PhpParser/Node/Stmt/GroupUse.php +41 -0
  261. package/plugins/nikic/php-parser/lib/PhpParser/Node/Stmt/HaltCompiler.php +29 -0
  262. package/plugins/nikic/php-parser/lib/PhpParser/Node/Stmt/If_.php +46 -0
  263. package/plugins/nikic/php-parser/lib/PhpParser/Node/Stmt/InlineHTML.php +29 -0
  264. package/plugins/nikic/php-parser/lib/PhpParser/Node/Stmt/Interface_.php +40 -0
  265. package/plugins/nikic/php-parser/lib/PhpParser/Node/Stmt/Label.php +30 -0
  266. package/plugins/nikic/php-parser/lib/PhpParser/Node/Stmt/Namespace_.php +37 -0
  267. package/plugins/nikic/php-parser/lib/PhpParser/Node/Stmt/Nop.php +16 -0
  268. package/plugins/nikic/php-parser/lib/PhpParser/Node/Stmt/Property.php +82 -0
  269. package/plugins/nikic/php-parser/lib/PhpParser/Node/Stmt/PropertyProperty.php +3 -0
  270. package/plugins/nikic/php-parser/lib/PhpParser/Node/Stmt/Return_.php +29 -0
  271. package/plugins/nikic/php-parser/lib/PhpParser/Node/Stmt/StaticVar.php +3 -0
  272. package/plugins/nikic/php-parser/lib/PhpParser/Node/Stmt/Static_.php +30 -0
  273. package/plugins/nikic/php-parser/lib/PhpParser/Node/Stmt/Switch_.php +33 -0
  274. package/plugins/nikic/php-parser/lib/PhpParser/Node/Stmt/TraitUse.php +33 -0
  275. package/plugins/nikic/php-parser/lib/PhpParser/Node/Stmt/TraitUseAdaptation/Alias.php +37 -0
  276. package/plugins/nikic/php-parser/lib/PhpParser/Node/Stmt/TraitUseAdaptation/Precedence.php +33 -0
  277. package/plugins/nikic/php-parser/lib/PhpParser/Node/Stmt/TraitUseAdaptation.php +12 -0
  278. package/plugins/nikic/php-parser/lib/PhpParser/Node/Stmt/Trait_.php +34 -0
  279. package/plugins/nikic/php-parser/lib/PhpParser/Node/Stmt/TryCatch.php +37 -0
  280. package/plugins/nikic/php-parser/lib/PhpParser/Node/Stmt/Unset_.php +29 -0
  281. package/plugins/nikic/php-parser/lib/PhpParser/Node/Stmt/UseUse.php +3 -0
  282. package/plugins/nikic/php-parser/lib/PhpParser/Node/Stmt/Use_.php +47 -0
  283. package/plugins/nikic/php-parser/lib/PhpParser/Node/Stmt/While_.php +33 -0
  284. package/plugins/nikic/php-parser/lib/PhpParser/Node/Stmt.php +8 -0
  285. package/plugins/nikic/php-parser/lib/PhpParser/Node/UnionType.php +27 -0
  286. package/plugins/nikic/php-parser/lib/PhpParser/Node/UseItem.php +55 -0
  287. package/plugins/nikic/php-parser/lib/PhpParser/Node/VarLikeIdentifier.php +16 -0
  288. package/plugins/nikic/php-parser/lib/PhpParser/Node/VariadicPlaceholder.php +27 -0
  289. package/plugins/nikic/php-parser/lib/PhpParser/Node.php +146 -0
  290. package/plugins/nikic/php-parser/lib/PhpParser/NodeAbstract.php +178 -0
  291. package/plugins/nikic/php-parser/lib/PhpParser/NodeDumper.php +290 -0
  292. package/plugins/nikic/php-parser/lib/PhpParser/NodeFinder.php +90 -0
  293. package/plugins/nikic/php-parser/lib/PhpParser/NodeTraverser.php +278 -0
  294. package/plugins/nikic/php-parser/lib/PhpParser/NodeTraverserInterface.php +26 -0
  295. package/plugins/nikic/php-parser/lib/PhpParser/NodeVisitor/CloningVisitor.php +19 -0
  296. package/plugins/nikic/php-parser/lib/PhpParser/NodeVisitor/CommentAnnotatingVisitor.php +82 -0
  297. package/plugins/nikic/php-parser/lib/PhpParser/NodeVisitor/FindingVisitor.php +47 -0
  298. package/plugins/nikic/php-parser/lib/PhpParser/NodeVisitor/FirstFindingVisitor.php +49 -0
  299. package/plugins/nikic/php-parser/lib/PhpParser/NodeVisitor/NameResolver.php +262 -0
  300. package/plugins/nikic/php-parser/lib/PhpParser/NodeVisitor/NodeConnectingVisitor.php +51 -0
  301. package/plugins/nikic/php-parser/lib/PhpParser/NodeVisitor/ParentConnectingVisitor.php +38 -0
  302. package/plugins/nikic/php-parser/lib/PhpParser/NodeVisitor.php +124 -0
  303. package/plugins/nikic/php-parser/lib/PhpParser/NodeVisitorAbstract.php +24 -0
  304. package/plugins/nikic/php-parser/lib/PhpParser/Parser/Php7.php +2699 -0
  305. package/plugins/nikic/php-parser/lib/PhpParser/Parser/Php8.php +2717 -0
  306. package/plugins/nikic/php-parser/lib/PhpParser/Parser.php +24 -0
  307. package/plugins/nikic/php-parser/lib/PhpParser/ParserAbstract.php +1241 -0
  308. package/plugins/nikic/php-parser/lib/PhpParser/ParserFactory.php +42 -0
  309. package/plugins/nikic/php-parser/lib/PhpParser/PhpVersion.php +164 -0
  310. package/plugins/nikic/php-parser/lib/PhpParser/PrettyPrinter/Standard.php +1177 -0
  311. package/plugins/nikic/php-parser/lib/PhpParser/PrettyPrinter.php +51 -0
  312. package/plugins/nikic/php-parser/lib/PhpParser/PrettyPrinterAbstract.php +1655 -0
  313. package/plugins/nikic/php-parser/lib/PhpParser/Token.php +18 -0
  314. package/plugins/nikic/php-parser/lib/PhpParser/compatibility_tokens.php +56 -0
  315. package/plugins/nikic/php-parser/phpstan-baseline.neon +236 -0
  316. package/plugins/nikic/php-parser/phpstan.neon.dist +8 -0
  317. package/utils.mjs +10 -0
  318. package/plugins/lib/com.fasterxml.jackson.core.jackson-core-2.15.2.jar +0 -0
  319. package/plugins/lib/io.appthreat.atom-1.7.5-classpath.jar +0 -0
  320. package/plugins/lib/io.circe.circe-core_3-0.14.5.jar +0 -0
  321. package/plugins/lib/io.circe.circe-generic_3-0.14.5.jar +0 -0
  322. package/plugins/lib/io.circe.circe-jawn_3-0.14.5.jar +0 -0
  323. package/plugins/lib/io.circe.circe-numbers_3-0.14.5.jar +0 -0
  324. package/plugins/lib/io.circe.circe-parser_3-0.14.5.jar +0 -0
  325. package/plugins/lib/org.gradle.gradle-tooling-api-8.3.jar +0 -0
  326. package/plugins/lib/org.scala-lang.modules.scala-parser-combinators_3-2.2.0.jar +0 -0
@@ -0,0 +1,234 @@
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser;
4
+
5
+ use PhpParser\Node\Expr;
6
+ use PhpParser\Node\Scalar;
7
+
8
+ use function array_merge;
9
+
10
+ /**
11
+ * Evaluates constant expressions.
12
+ *
13
+ * This evaluator is able to evaluate all constant expressions (as defined by PHP), which can be
14
+ * evaluated without further context. If a subexpression is not of this type, a user-provided
15
+ * fallback evaluator is invoked. To support all constant expressions that are also supported by
16
+ * PHP (and not already handled by this class), the fallback evaluator must be able to handle the
17
+ * following node types:
18
+ *
19
+ * * All Scalar\MagicConst\* nodes.
20
+ * * Expr\ConstFetch nodes. Only null/false/true are already handled by this class.
21
+ * * Expr\ClassConstFetch nodes.
22
+ *
23
+ * The fallback evaluator should throw ConstExprEvaluationException for nodes it cannot evaluate.
24
+ *
25
+ * The evaluation is dependent on runtime configuration in two respects: Firstly, floating
26
+ * point to string conversions are affected by the precision ini setting. Secondly, they are also
27
+ * affected by the LC_NUMERIC locale.
28
+ */
29
+ class ConstExprEvaluator {
30
+ /** @var callable|null */
31
+ private $fallbackEvaluator;
32
+
33
+ /**
34
+ * Create a constant expression evaluator.
35
+ *
36
+ * The provided fallback evaluator is invoked whenever a subexpression cannot be evaluated. See
37
+ * class doc comment for more information.
38
+ *
39
+ * @param callable|null $fallbackEvaluator To call if subexpression cannot be evaluated
40
+ */
41
+ public function __construct(?callable $fallbackEvaluator = null) {
42
+ $this->fallbackEvaluator = $fallbackEvaluator ?? function (Expr $expr) {
43
+ throw new ConstExprEvaluationException(
44
+ "Expression of type {$expr->getType()} cannot be evaluated"
45
+ );
46
+ };
47
+ }
48
+
49
+ /**
50
+ * Silently evaluates a constant expression into a PHP value.
51
+ *
52
+ * Thrown Errors, warnings or notices will be converted into a ConstExprEvaluationException.
53
+ * The original source of the exception is available through getPrevious().
54
+ *
55
+ * If some part of the expression cannot be evaluated, the fallback evaluator passed to the
56
+ * constructor will be invoked. By default, if no fallback is provided, an exception of type
57
+ * ConstExprEvaluationException is thrown.
58
+ *
59
+ * See class doc comment for caveats and limitations.
60
+ *
61
+ * @param Expr $expr Constant expression to evaluate
62
+ * @return mixed Result of evaluation
63
+ *
64
+ * @throws ConstExprEvaluationException if the expression cannot be evaluated or an error occurred
65
+ */
66
+ public function evaluateSilently(Expr $expr) {
67
+ set_error_handler(function ($num, $str, $file, $line) {
68
+ throw new \ErrorException($str, 0, $num, $file, $line);
69
+ });
70
+
71
+ try {
72
+ return $this->evaluate($expr);
73
+ } catch (\Throwable $e) {
74
+ if (!$e instanceof ConstExprEvaluationException) {
75
+ $e = new ConstExprEvaluationException(
76
+ "An error occurred during constant expression evaluation", 0, $e);
77
+ }
78
+ throw $e;
79
+ } finally {
80
+ restore_error_handler();
81
+ }
82
+ }
83
+
84
+ /**
85
+ * Directly evaluates a constant expression into a PHP value.
86
+ *
87
+ * May generate Error exceptions, warnings or notices. Use evaluateSilently() to convert these
88
+ * into a ConstExprEvaluationException.
89
+ *
90
+ * If some part of the expression cannot be evaluated, the fallback evaluator passed to the
91
+ * constructor will be invoked. By default, if no fallback is provided, an exception of type
92
+ * ConstExprEvaluationException is thrown.
93
+ *
94
+ * See class doc comment for caveats and limitations.
95
+ *
96
+ * @param Expr $expr Constant expression to evaluate
97
+ * @return mixed Result of evaluation
98
+ *
99
+ * @throws ConstExprEvaluationException if the expression cannot be evaluated
100
+ */
101
+ public function evaluateDirectly(Expr $expr) {
102
+ return $this->evaluate($expr);
103
+ }
104
+
105
+ /** @return mixed */
106
+ private function evaluate(Expr $expr) {
107
+ if ($expr instanceof Scalar\Int_
108
+ || $expr instanceof Scalar\Float_
109
+ || $expr instanceof Scalar\String_
110
+ ) {
111
+ return $expr->value;
112
+ }
113
+
114
+ if ($expr instanceof Expr\Array_) {
115
+ return $this->evaluateArray($expr);
116
+ }
117
+
118
+ // Unary operators
119
+ if ($expr instanceof Expr\UnaryPlus) {
120
+ return +$this->evaluate($expr->expr);
121
+ }
122
+ if ($expr instanceof Expr\UnaryMinus) {
123
+ return -$this->evaluate($expr->expr);
124
+ }
125
+ if ($expr instanceof Expr\BooleanNot) {
126
+ return !$this->evaluate($expr->expr);
127
+ }
128
+ if ($expr instanceof Expr\BitwiseNot) {
129
+ return ~$this->evaluate($expr->expr);
130
+ }
131
+
132
+ if ($expr instanceof Expr\BinaryOp) {
133
+ return $this->evaluateBinaryOp($expr);
134
+ }
135
+
136
+ if ($expr instanceof Expr\Ternary) {
137
+ return $this->evaluateTernary($expr);
138
+ }
139
+
140
+ if ($expr instanceof Expr\ArrayDimFetch && null !== $expr->dim) {
141
+ return $this->evaluate($expr->var)[$this->evaluate($expr->dim)];
142
+ }
143
+
144
+ if ($expr instanceof Expr\ConstFetch) {
145
+ return $this->evaluateConstFetch($expr);
146
+ }
147
+
148
+ return ($this->fallbackEvaluator)($expr);
149
+ }
150
+
151
+ private function evaluateArray(Expr\Array_ $expr): array {
152
+ $array = [];
153
+ foreach ($expr->items as $item) {
154
+ if (null !== $item->key) {
155
+ $array[$this->evaluate($item->key)] = $this->evaluate($item->value);
156
+ } elseif ($item->unpack) {
157
+ $array = array_merge($array, $this->evaluate($item->value));
158
+ } else {
159
+ $array[] = $this->evaluate($item->value);
160
+ }
161
+ }
162
+ return $array;
163
+ }
164
+
165
+ /** @return mixed */
166
+ private function evaluateTernary(Expr\Ternary $expr) {
167
+ if (null === $expr->if) {
168
+ return $this->evaluate($expr->cond) ?: $this->evaluate($expr->else);
169
+ }
170
+
171
+ return $this->evaluate($expr->cond)
172
+ ? $this->evaluate($expr->if)
173
+ : $this->evaluate($expr->else);
174
+ }
175
+
176
+ /** @return mixed */
177
+ private function evaluateBinaryOp(Expr\BinaryOp $expr) {
178
+ if ($expr instanceof Expr\BinaryOp\Coalesce
179
+ && $expr->left instanceof Expr\ArrayDimFetch
180
+ ) {
181
+ // This needs to be special cased to respect BP_VAR_IS fetch semantics
182
+ return $this->evaluate($expr->left->var)[$this->evaluate($expr->left->dim)]
183
+ ?? $this->evaluate($expr->right);
184
+ }
185
+
186
+ // The evaluate() calls are repeated in each branch, because some of the operators are
187
+ // short-circuiting and evaluating the RHS in advance may be illegal in that case
188
+ $l = $expr->left;
189
+ $r = $expr->right;
190
+ switch ($expr->getOperatorSigil()) {
191
+ case '&': return $this->evaluate($l) & $this->evaluate($r);
192
+ case '|': return $this->evaluate($l) | $this->evaluate($r);
193
+ case '^': return $this->evaluate($l) ^ $this->evaluate($r);
194
+ case '&&': return $this->evaluate($l) && $this->evaluate($r);
195
+ case '||': return $this->evaluate($l) || $this->evaluate($r);
196
+ case '??': return $this->evaluate($l) ?? $this->evaluate($r);
197
+ case '.': return $this->evaluate($l) . $this->evaluate($r);
198
+ case '/': return $this->evaluate($l) / $this->evaluate($r);
199
+ case '==': return $this->evaluate($l) == $this->evaluate($r);
200
+ case '>': return $this->evaluate($l) > $this->evaluate($r);
201
+ case '>=': return $this->evaluate($l) >= $this->evaluate($r);
202
+ case '===': return $this->evaluate($l) === $this->evaluate($r);
203
+ case 'and': return $this->evaluate($l) and $this->evaluate($r);
204
+ case 'or': return $this->evaluate($l) or $this->evaluate($r);
205
+ case 'xor': return $this->evaluate($l) xor $this->evaluate($r);
206
+ case '-': return $this->evaluate($l) - $this->evaluate($r);
207
+ case '%': return $this->evaluate($l) % $this->evaluate($r);
208
+ case '*': return $this->evaluate($l) * $this->evaluate($r);
209
+ case '!=': return $this->evaluate($l) != $this->evaluate($r);
210
+ case '!==': return $this->evaluate($l) !== $this->evaluate($r);
211
+ case '+': return $this->evaluate($l) + $this->evaluate($r);
212
+ case '**': return $this->evaluate($l) ** $this->evaluate($r);
213
+ case '<<': return $this->evaluate($l) << $this->evaluate($r);
214
+ case '>>': return $this->evaluate($l) >> $this->evaluate($r);
215
+ case '<': return $this->evaluate($l) < $this->evaluate($r);
216
+ case '<=': return $this->evaluate($l) <= $this->evaluate($r);
217
+ case '<=>': return $this->evaluate($l) <=> $this->evaluate($r);
218
+ }
219
+
220
+ throw new \Exception('Should not happen');
221
+ }
222
+
223
+ /** @return mixed */
224
+ private function evaluateConstFetch(Expr\ConstFetch $expr) {
225
+ $name = $expr->name->toLowerString();
226
+ switch ($name) {
227
+ case 'null': return null;
228
+ case 'false': return false;
229
+ case 'true': return true;
230
+ }
231
+
232
+ return ($this->fallbackEvaluator)($expr);
233
+ }
234
+ }
@@ -0,0 +1,171 @@
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser;
4
+
5
+ class Error extends \RuntimeException {
6
+ protected string $rawMessage;
7
+ /** @var array<string, mixed> */
8
+ protected array $attributes;
9
+
10
+ /**
11
+ * Creates an Exception signifying a parse error.
12
+ *
13
+ * @param string $message Error message
14
+ * @param array<string, mixed> $attributes Attributes of node/token where error occurred
15
+ */
16
+ public function __construct(string $message, array $attributes = []) {
17
+ $this->rawMessage = $message;
18
+ $this->attributes = $attributes;
19
+ $this->updateMessage();
20
+ }
21
+
22
+ /**
23
+ * Gets the error message
24
+ *
25
+ * @return string Error message
26
+ */
27
+ public function getRawMessage(): string {
28
+ return $this->rawMessage;
29
+ }
30
+
31
+ /**
32
+ * Gets the line the error starts in.
33
+ *
34
+ * @return int Error start line
35
+ */
36
+ public function getStartLine(): int {
37
+ return $this->attributes['startLine'] ?? -1;
38
+ }
39
+
40
+ /**
41
+ * Gets the line the error ends in.
42
+ *
43
+ * @return int Error end line
44
+ */
45
+ public function getEndLine(): int {
46
+ return $this->attributes['endLine'] ?? -1;
47
+ }
48
+
49
+ /**
50
+ * Gets the attributes of the node/token the error occurred at.
51
+ *
52
+ * @return array<string, mixed>
53
+ */
54
+ public function getAttributes(): array {
55
+ return $this->attributes;
56
+ }
57
+
58
+ /**
59
+ * Sets the attributes of the node/token the error occurred at.
60
+ *
61
+ * @param array<string, mixed> $attributes
62
+ */
63
+ public function setAttributes(array $attributes): void {
64
+ $this->attributes = $attributes;
65
+ $this->updateMessage();
66
+ }
67
+
68
+ /**
69
+ * Sets the line of the PHP file the error occurred in.
70
+ *
71
+ * @param string $message Error message
72
+ */
73
+ public function setRawMessage(string $message): void {
74
+ $this->rawMessage = $message;
75
+ $this->updateMessage();
76
+ }
77
+
78
+ /**
79
+ * Sets the line the error starts in.
80
+ *
81
+ * @param int $line Error start line
82
+ */
83
+ public function setStartLine(int $line): void {
84
+ $this->attributes['startLine'] = $line;
85
+ $this->updateMessage();
86
+ }
87
+
88
+ /**
89
+ * Returns whether the error has start and end column information.
90
+ *
91
+ * For column information enable the startFilePos and endFilePos in the lexer options.
92
+ */
93
+ public function hasColumnInfo(): bool {
94
+ return isset($this->attributes['startFilePos'], $this->attributes['endFilePos']);
95
+ }
96
+
97
+ /**
98
+ * Gets the start column (1-based) into the line where the error started.
99
+ *
100
+ * @param string $code Source code of the file
101
+ */
102
+ public function getStartColumn(string $code): int {
103
+ if (!$this->hasColumnInfo()) {
104
+ throw new \RuntimeException('Error does not have column information');
105
+ }
106
+
107
+ return $this->toColumn($code, $this->attributes['startFilePos']);
108
+ }
109
+
110
+ /**
111
+ * Gets the end column (1-based) into the line where the error ended.
112
+ *
113
+ * @param string $code Source code of the file
114
+ */
115
+ public function getEndColumn(string $code): int {
116
+ if (!$this->hasColumnInfo()) {
117
+ throw new \RuntimeException('Error does not have column information');
118
+ }
119
+
120
+ return $this->toColumn($code, $this->attributes['endFilePos']);
121
+ }
122
+
123
+ /**
124
+ * Formats message including line and column information.
125
+ *
126
+ * @param string $code Source code associated with the error, for calculation of the columns
127
+ *
128
+ * @return string Formatted message
129
+ */
130
+ public function getMessageWithColumnInfo(string $code): string {
131
+ return sprintf(
132
+ '%s from %d:%d to %d:%d', $this->getRawMessage(),
133
+ $this->getStartLine(), $this->getStartColumn($code),
134
+ $this->getEndLine(), $this->getEndColumn($code)
135
+ );
136
+ }
137
+
138
+ /**
139
+ * Converts a file offset into a column.
140
+ *
141
+ * @param string $code Source code that $pos indexes into
142
+ * @param int $pos 0-based position in $code
143
+ *
144
+ * @return int 1-based column (relative to start of line)
145
+ */
146
+ private function toColumn(string $code, int $pos): int {
147
+ if ($pos > strlen($code)) {
148
+ throw new \RuntimeException('Invalid position information');
149
+ }
150
+
151
+ $lineStartPos = strrpos($code, "\n", $pos - strlen($code));
152
+ if (false === $lineStartPos) {
153
+ $lineStartPos = -1;
154
+ }
155
+
156
+ return $pos - $lineStartPos;
157
+ }
158
+
159
+ /**
160
+ * Updates the exception message after a change to rawMessage or rawLine.
161
+ */
162
+ protected function updateMessage(): void {
163
+ $this->message = $this->rawMessage;
164
+
165
+ if (-1 === $this->getStartLine()) {
166
+ $this->message .= ' on unknown line';
167
+ } else {
168
+ $this->message .= ' on line ' . $this->getStartLine();
169
+ }
170
+ }
171
+ }
@@ -0,0 +1,43 @@
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\ErrorHandler;
4
+
5
+ use PhpParser\Error;
6
+ use PhpParser\ErrorHandler;
7
+
8
+ /**
9
+ * Error handler that collects all errors into an array.
10
+ *
11
+ * This allows graceful handling of errors.
12
+ */
13
+ class Collecting implements ErrorHandler {
14
+ /** @var Error[] Collected errors */
15
+ private array $errors = [];
16
+
17
+ public function handleError(Error $error): void {
18
+ $this->errors[] = $error;
19
+ }
20
+
21
+ /**
22
+ * Get collected errors.
23
+ *
24
+ * @return Error[]
25
+ */
26
+ public function getErrors(): array {
27
+ return $this->errors;
28
+ }
29
+
30
+ /**
31
+ * Check whether there are any errors.
32
+ */
33
+ public function hasErrors(): bool {
34
+ return !empty($this->errors);
35
+ }
36
+
37
+ /**
38
+ * Reset/clear collected errors.
39
+ */
40
+ public function clearErrors(): void {
41
+ $this->errors = [];
42
+ }
43
+ }
@@ -0,0 +1,17 @@
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\ErrorHandler;
4
+
5
+ use PhpParser\Error;
6
+ use PhpParser\ErrorHandler;
7
+
8
+ /**
9
+ * Error handler that handles all errors by throwing them.
10
+ *
11
+ * This is the default strategy used by all components.
12
+ */
13
+ class Throwing implements ErrorHandler {
14
+ public function handleError(Error $error): void {
15
+ throw $error;
16
+ }
17
+ }
@@ -0,0 +1,12 @@
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser;
4
+
5
+ interface ErrorHandler {
6
+ /**
7
+ * Handle an error generated during lexing, parsing or some other operation.
8
+ *
9
+ * @param Error $error The error that needs to be handled
10
+ */
11
+ public function handleError(Error $error): void;
12
+ }
@@ -0,0 +1,31 @@
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Internal;
4
+
5
+ /**
6
+ * @internal
7
+ */
8
+ class DiffElem {
9
+ public const TYPE_KEEP = 0;
10
+ public const TYPE_REMOVE = 1;
11
+ public const TYPE_ADD = 2;
12
+ public const TYPE_REPLACE = 3;
13
+
14
+ /** @var int One of the TYPE_* constants */
15
+ public int $type;
16
+ /** @var mixed Is null for add operations */
17
+ public $old;
18
+ /** @var mixed Is null for remove operations */
19
+ public $new;
20
+
21
+ /**
22
+ * @param int $type One of the TYPE_* constants
23
+ * @param mixed $old Is null for add operations
24
+ * @param mixed $new Is null for remove operations
25
+ */
26
+ public function __construct(int $type, $old, $new) {
27
+ $this->type = $type;
28
+ $this->old = $old;
29
+ $this->new = $new;
30
+ }
31
+ }
@@ -0,0 +1,178 @@
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Internal;
4
+
5
+ /**
6
+ * Implements the Myers diff algorithm.
7
+ *
8
+ * Myers, Eugene W. "An O (ND) difference algorithm and its variations."
9
+ * Algorithmica 1.1 (1986): 251-266.
10
+ *
11
+ * @template T
12
+ * @internal
13
+ */
14
+ class Differ {
15
+ /** @var callable(T, T): bool */
16
+ private $isEqual;
17
+
18
+ /**
19
+ * Create differ over the given equality relation.
20
+ *
21
+ * @param callable(T, T): bool $isEqual Equality relation
22
+ */
23
+ public function __construct(callable $isEqual) {
24
+ $this->isEqual = $isEqual;
25
+ }
26
+
27
+ /**
28
+ * Calculate diff (edit script) from $old to $new.
29
+ *
30
+ * @param T[] $old Original array
31
+ * @param T[] $new New array
32
+ *
33
+ * @return DiffElem[] Diff (edit script)
34
+ */
35
+ public function diff(array $old, array $new): array {
36
+ $old = \array_values($old);
37
+ $new = \array_values($new);
38
+ list($trace, $x, $y) = $this->calculateTrace($old, $new);
39
+ return $this->extractDiff($trace, $x, $y, $old, $new);
40
+ }
41
+
42
+ /**
43
+ * Calculate diff, including "replace" operations.
44
+ *
45
+ * If a sequence of remove operations is followed by the same number of add operations, these
46
+ * will be coalesced into replace operations.
47
+ *
48
+ * @param T[] $old Original array
49
+ * @param T[] $new New array
50
+ *
51
+ * @return DiffElem[] Diff (edit script), including replace operations
52
+ */
53
+ public function diffWithReplacements(array $old, array $new): array {
54
+ return $this->coalesceReplacements($this->diff($old, $new));
55
+ }
56
+
57
+ /**
58
+ * @param T[] $old
59
+ * @param T[] $new
60
+ * @return array{array<int, array<int, int>>, int, int}
61
+ */
62
+ private function calculateTrace(array $old, array $new): array {
63
+ $n = \count($old);
64
+ $m = \count($new);
65
+ $max = $n + $m;
66
+ $v = [1 => 0];
67
+ $trace = [];
68
+ for ($d = 0; $d <= $max; $d++) {
69
+ $trace[] = $v;
70
+ for ($k = -$d; $k <= $d; $k += 2) {
71
+ if ($k === -$d || ($k !== $d && $v[$k - 1] < $v[$k + 1])) {
72
+ $x = $v[$k + 1];
73
+ } else {
74
+ $x = $v[$k - 1] + 1;
75
+ }
76
+
77
+ $y = $x - $k;
78
+ while ($x < $n && $y < $m && ($this->isEqual)($old[$x], $new[$y])) {
79
+ $x++;
80
+ $y++;
81
+ }
82
+
83
+ $v[$k] = $x;
84
+ if ($x >= $n && $y >= $m) {
85
+ return [$trace, $x, $y];
86
+ }
87
+ }
88
+ }
89
+ throw new \Exception('Should not happen');
90
+ }
91
+
92
+ /**
93
+ * @param array<int, array<int, int>> $trace
94
+ * @param T[] $old
95
+ * @param T[] $new
96
+ * @return DiffElem[]
97
+ */
98
+ private function extractDiff(array $trace, int $x, int $y, array $old, array $new): array {
99
+ $result = [];
100
+ for ($d = \count($trace) - 1; $d >= 0; $d--) {
101
+ $v = $trace[$d];
102
+ $k = $x - $y;
103
+
104
+ if ($k === -$d || ($k !== $d && $v[$k - 1] < $v[$k + 1])) {
105
+ $prevK = $k + 1;
106
+ } else {
107
+ $prevK = $k - 1;
108
+ }
109
+
110
+ $prevX = $v[$prevK];
111
+ $prevY = $prevX - $prevK;
112
+
113
+ while ($x > $prevX && $y > $prevY) {
114
+ $result[] = new DiffElem(DiffElem::TYPE_KEEP, $old[$x - 1], $new[$y - 1]);
115
+ $x--;
116
+ $y--;
117
+ }
118
+
119
+ if ($d === 0) {
120
+ break;
121
+ }
122
+
123
+ while ($x > $prevX) {
124
+ $result[] = new DiffElem(DiffElem::TYPE_REMOVE, $old[$x - 1], null);
125
+ $x--;
126
+ }
127
+
128
+ while ($y > $prevY) {
129
+ $result[] = new DiffElem(DiffElem::TYPE_ADD, null, $new[$y - 1]);
130
+ $y--;
131
+ }
132
+ }
133
+ return array_reverse($result);
134
+ }
135
+
136
+ /**
137
+ * Coalesce equal-length sequences of remove+add into a replace operation.
138
+ *
139
+ * @param DiffElem[] $diff
140
+ * @return DiffElem[]
141
+ */
142
+ private function coalesceReplacements(array $diff): array {
143
+ $newDiff = [];
144
+ $c = \count($diff);
145
+ for ($i = 0; $i < $c; $i++) {
146
+ $diffType = $diff[$i]->type;
147
+ if ($diffType !== DiffElem::TYPE_REMOVE) {
148
+ $newDiff[] = $diff[$i];
149
+ continue;
150
+ }
151
+
152
+ $j = $i;
153
+ while ($j < $c && $diff[$j]->type === DiffElem::TYPE_REMOVE) {
154
+ $j++;
155
+ }
156
+
157
+ $k = $j;
158
+ while ($k < $c && $diff[$k]->type === DiffElem::TYPE_ADD) {
159
+ $k++;
160
+ }
161
+
162
+ if ($j - $i === $k - $j) {
163
+ $len = $j - $i;
164
+ for ($n = 0; $n < $len; $n++) {
165
+ $newDiff[] = new DiffElem(
166
+ DiffElem::TYPE_REPLACE, $diff[$i + $n]->old, $diff[$j + $n]->new
167
+ );
168
+ }
169
+ } else {
170
+ for (; $i < $k; $i++) {
171
+ $newDiff[] = $diff[$i];
172
+ }
173
+ }
174
+ $i = $k - 1;
175
+ }
176
+ return $newDiff;
177
+ }
178
+ }