webshell-analyzer 1.0.0__py3-none-any.whl

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 (304) hide show
  1. webshell_analyzer/__init__.py +0 -0
  2. webshell_analyzer/cli/__init__.py +0 -0
  3. webshell_analyzer/cli/cli.py +151 -0
  4. webshell_analyzer/extractor/ast_extraction/composer.json +5 -0
  5. webshell_analyzer/extractor/ast_extraction/composer.lock +77 -0
  6. webshell_analyzer/extractor/ast_extraction/src/NodeVisitor.php +85 -0
  7. webshell_analyzer/extractor/ast_extraction/src/astBuilder.php +50 -0
  8. webshell_analyzer/extractor/ast_extraction/src/astExtractor.php +50 -0
  9. webshell_analyzer/extractor/ast_extraction/src/featuresDeclare.php +36 -0
  10. webshell_analyzer/extractor/ast_extraction/vendor/autoload.php +25 -0
  11. webshell_analyzer/extractor/ast_extraction/vendor/composer/ClassLoader.php +579 -0
  12. webshell_analyzer/extractor/ast_extraction/vendor/composer/InstalledVersions.php +378 -0
  13. webshell_analyzer/extractor/ast_extraction/vendor/composer/autoload_classmap.php +10 -0
  14. webshell_analyzer/extractor/ast_extraction/vendor/composer/autoload_namespaces.php +9 -0
  15. webshell_analyzer/extractor/ast_extraction/vendor/composer/autoload_psr4.php +10 -0
  16. webshell_analyzer/extractor/ast_extraction/vendor/composer/autoload_real.php +38 -0
  17. webshell_analyzer/extractor/ast_extraction/vendor/composer/autoload_static.php +36 -0
  18. webshell_analyzer/extractor/ast_extraction/vendor/composer/installed.json +67 -0
  19. webshell_analyzer/extractor/ast_extraction/vendor/composer/installed.php +32 -0
  20. webshell_analyzer/extractor/ast_extraction/vendor/composer/platform_check.php +26 -0
  21. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Builder/ClassConst.php +150 -0
  22. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Builder/Class_.php +151 -0
  23. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Builder/Declaration.php +50 -0
  24. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Builder/EnumCase.php +86 -0
  25. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Builder/Enum_.php +116 -0
  26. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Builder/FunctionLike.php +73 -0
  27. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Builder/Function_.php +67 -0
  28. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Builder/Interface_.php +94 -0
  29. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Builder/Method.php +147 -0
  30. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Builder/Namespace_.php +45 -0
  31. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Builder/Param.php +171 -0
  32. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Builder/Property.php +223 -0
  33. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Builder/TraitUse.php +65 -0
  34. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Builder/TraitUseAdaptation.php +145 -0
  35. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Builder/Trait_.php +83 -0
  36. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Builder/Use_.php +49 -0
  37. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Builder.php +12 -0
  38. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/BuilderFactory.php +375 -0
  39. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/BuilderHelpers.php +338 -0
  40. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Comment/Doc.php +6 -0
  41. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Comment.php +209 -0
  42. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/ConstExprEvaluationException.php +6 -0
  43. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/ConstExprEvaluator.php +237 -0
  44. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Error.php +173 -0
  45. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/ErrorHandler/Collecting.php +43 -0
  46. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/ErrorHandler/Throwing.php +17 -0
  47. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/ErrorHandler.php +12 -0
  48. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Internal/DiffElem.php +31 -0
  49. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Internal/Differ.php +178 -0
  50. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Internal/PrintableNewAnonClassNode.php +71 -0
  51. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Internal/TokenPolyfill.php +237 -0
  52. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Internal/TokenStream.php +282 -0
  53. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/JsonDecoder.php +108 -0
  54. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Lexer/Emulative.php +230 -0
  55. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/AsymmetricVisibilityTokenEmulator.php +93 -0
  56. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/AttributeEmulator.php +49 -0
  57. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/EnumTokenEmulator.php +26 -0
  58. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/ExplicitOctalEmulator.php +45 -0
  59. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/KeywordEmulator.php +60 -0
  60. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/MatchTokenEmulator.php +19 -0
  61. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/NullsafeTokenEmulator.php +60 -0
  62. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/PipeOperatorEmulator.php +45 -0
  63. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/PropertyTokenEmulator.php +19 -0
  64. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/ReadonlyFunctionTokenEmulator.php +31 -0
  65. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/ReadonlyTokenEmulator.php +31 -0
  66. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/ReverseEmulator.php +37 -0
  67. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/TokenEmulator.php +30 -0
  68. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/VoidCastEmulator.php +98 -0
  69. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Lexer.php +116 -0
  70. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Modifiers.php +85 -0
  71. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/NameContext.php +284 -0
  72. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Arg.php +44 -0
  73. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/ArrayItem.php +43 -0
  74. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Attribute.php +33 -0
  75. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/AttributeGroup.php +27 -0
  76. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/ClosureUse.php +36 -0
  77. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/ComplexType.php +13 -0
  78. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Const_.php +36 -0
  79. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/DeclareItem.php +37 -0
  80. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ArrayDimFetch.php +33 -0
  81. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ArrayItem.php +15 -0
  82. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Array_.php +34 -0
  83. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ArrowFunction.php +84 -0
  84. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Assign.php +33 -0
  85. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/BitwiseAnd.php +11 -0
  86. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/BitwiseOr.php +11 -0
  87. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/BitwiseXor.php +11 -0
  88. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Coalesce.php +11 -0
  89. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Concat.php +11 -0
  90. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Div.php +11 -0
  91. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Minus.php +11 -0
  92. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Mod.php +11 -0
  93. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Mul.php +11 -0
  94. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Plus.php +11 -0
  95. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Pow.php +11 -0
  96. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/ShiftLeft.php +11 -0
  97. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/ShiftRight.php +11 -0
  98. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp.php +29 -0
  99. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignRef.php +33 -0
  100. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/BitwiseAnd.php +15 -0
  101. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/BitwiseOr.php +15 -0
  102. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/BitwiseXor.php +15 -0
  103. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/BooleanAnd.php +15 -0
  104. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/BooleanOr.php +15 -0
  105. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Coalesce.php +15 -0
  106. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Concat.php +15 -0
  107. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Div.php +15 -0
  108. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Equal.php +15 -0
  109. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Greater.php +15 -0
  110. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/GreaterOrEqual.php +15 -0
  111. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Identical.php +15 -0
  112. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/LogicalAnd.php +15 -0
  113. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/LogicalOr.php +15 -0
  114. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/LogicalXor.php +15 -0
  115. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Minus.php +15 -0
  116. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Mod.php +15 -0
  117. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Mul.php +15 -0
  118. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/NotEqual.php +15 -0
  119. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/NotIdentical.php +15 -0
  120. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Pipe.php +15 -0
  121. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Plus.php +15 -0
  122. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Pow.php +15 -0
  123. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/ShiftLeft.php +15 -0
  124. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/ShiftRight.php +15 -0
  125. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Smaller.php +15 -0
  126. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/SmallerOrEqual.php +15 -0
  127. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Spaceship.php +15 -0
  128. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp.php +37 -0
  129. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BitwiseNot.php +29 -0
  130. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BooleanNot.php +29 -0
  131. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/CallLike.php +60 -0
  132. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Array_.php +11 -0
  133. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Bool_.php +15 -0
  134. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Double.php +16 -0
  135. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Int_.php +15 -0
  136. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Object_.php +11 -0
  137. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/String_.php +15 -0
  138. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Unset_.php +11 -0
  139. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Void_.php +11 -0
  140. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast.php +25 -0
  141. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ClassConstFetch.php +36 -0
  142. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Clone_.php +29 -0
  143. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Closure.php +86 -0
  144. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ClosureUse.php +15 -0
  145. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ConstFetch.php +30 -0
  146. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Empty_.php +29 -0
  147. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Error.php +30 -0
  148. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ErrorSuppress.php +29 -0
  149. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Eval_.php +29 -0
  150. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Exit_.php +33 -0
  151. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/FuncCall.php +38 -0
  152. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Include_.php +38 -0
  153. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Instanceof_.php +35 -0
  154. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Isset_.php +29 -0
  155. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/List_.php +34 -0
  156. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Match_.php +32 -0
  157. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/MethodCall.php +45 -0
  158. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/New_.php +40 -0
  159. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/NullsafeMethodCall.php +45 -0
  160. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/NullsafePropertyFetch.php +35 -0
  161. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/PostDec.php +29 -0
  162. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/PostInc.php +29 -0
  163. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/PreDec.php +29 -0
  164. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/PreInc.php +29 -0
  165. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Print_.php +29 -0
  166. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/PropertyFetch.php +35 -0
  167. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ShellExec.php +30 -0
  168. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/StaticCall.php +45 -0
  169. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/StaticPropertyFetch.php +36 -0
  170. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Ternary.php +37 -0
  171. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Throw_.php +29 -0
  172. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/UnaryMinus.php +29 -0
  173. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/UnaryPlus.php +29 -0
  174. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Variable.php +29 -0
  175. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/YieldFrom.php +29 -0
  176. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Yield_.php +33 -0
  177. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr.php +8 -0
  178. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/FunctionLike.php +40 -0
  179. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Identifier.php +85 -0
  180. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/InterpolatedStringPart.php +32 -0
  181. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/IntersectionType.php +27 -0
  182. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/MatchArm.php +29 -0
  183. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Name/FullyQualified.php +49 -0
  184. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Name/Relative.php +49 -0
  185. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Name.php +278 -0
  186. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/NullableType.php +29 -0
  187. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Param.php +123 -0
  188. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/PropertyHook.php +105 -0
  189. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/PropertyItem.php +37 -0
  190. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/DNumber.php +15 -0
  191. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/Encapsed.php +15 -0
  192. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/EncapsedStringPart.php +17 -0
  193. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/Float_.php +78 -0
  194. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/Int_.php +82 -0
  195. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/InterpolatedString.php +34 -0
  196. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/LNumber.php +15 -0
  197. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Class_.php +15 -0
  198. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Dir.php +15 -0
  199. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/File.php +15 -0
  200. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Function_.php +15 -0
  201. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Line.php +15 -0
  202. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Method.php +15 -0
  203. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Namespace_.php +15 -0
  204. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Property.php +15 -0
  205. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Trait_.php +15 -0
  206. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst.php +27 -0
  207. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/String_.php +161 -0
  208. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar.php +6 -0
  209. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/StaticVar.php +39 -0
  210. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Block.php +29 -0
  211. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Break_.php +29 -0
  212. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Case_.php +33 -0
  213. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Catch_.php +40 -0
  214. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/ClassConst.php +77 -0
  215. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/ClassLike.php +109 -0
  216. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/ClassMethod.php +154 -0
  217. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Class_.php +94 -0
  218. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Const_.php +37 -0
  219. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Continue_.php +29 -0
  220. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/DeclareDeclare.php +17 -0
  221. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Declare_.php +34 -0
  222. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Do_.php +33 -0
  223. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Echo_.php +29 -0
  224. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/ElseIf_.php +33 -0
  225. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Else_.php +29 -0
  226. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/EnumCase.php +36 -0
  227. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Enum_.php +44 -0
  228. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Expression.php +32 -0
  229. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Finally_.php +29 -0
  230. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/For_.php +47 -0
  231. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Foreach_.php +50 -0
  232. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Function_.php +81 -0
  233. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Global_.php +29 -0
  234. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Goto_.php +30 -0
  235. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/GroupUse.php +41 -0
  236. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/HaltCompiler.php +29 -0
  237. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/If_.php +46 -0
  238. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/InlineHTML.php +29 -0
  239. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Interface_.php +40 -0
  240. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Label.php +30 -0
  241. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Namespace_.php +37 -0
  242. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Nop.php +16 -0
  243. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Property.php +121 -0
  244. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/PropertyProperty.php +17 -0
  245. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Return_.php +29 -0
  246. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/StaticVar.php +15 -0
  247. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Static_.php +30 -0
  248. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Switch_.php +33 -0
  249. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/TraitUse.php +33 -0
  250. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/TraitUseAdaptation/Alias.php +37 -0
  251. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/TraitUseAdaptation/Precedence.php +33 -0
  252. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/TraitUseAdaptation.php +12 -0
  253. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Trait_.php +34 -0
  254. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/TryCatch.php +37 -0
  255. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Unset_.php +29 -0
  256. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/UseUse.php +17 -0
  257. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Use_.php +47 -0
  258. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/While_.php +33 -0
  259. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt.php +8 -0
  260. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/UnionType.php +27 -0
  261. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/UseItem.php +55 -0
  262. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/VarLikeIdentifier.php +16 -0
  263. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/VariadicPlaceholder.php +27 -0
  264. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node.php +150 -0
  265. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/NodeAbstract.php +181 -0
  266. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/NodeDumper.php +299 -0
  267. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/NodeFinder.php +90 -0
  268. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php +287 -0
  269. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/NodeTraverserInterface.php +26 -0
  270. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/CloningVisitor.php +19 -0
  271. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/CommentAnnotatingVisitor.php +82 -0
  272. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/FindingVisitor.php +47 -0
  273. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/FirstFindingVisitor.php +49 -0
  274. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/NameResolver.php +269 -0
  275. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/NodeConnectingVisitor.php +73 -0
  276. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/ParentConnectingVisitor.php +51 -0
  277. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/NodeVisitor.php +124 -0
  278. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/NodeVisitorAbstract.php +24 -0
  279. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Parser/Php7.php +2919 -0
  280. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Parser/Php8.php +2917 -0
  281. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Parser.php +24 -0
  282. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/ParserAbstract.php +1335 -0
  283. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/ParserFactory.php +42 -0
  284. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/PhpVersion.php +175 -0
  285. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/PrettyPrinter/Standard.php +1232 -0
  286. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/PrettyPrinter.php +51 -0
  287. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/PrettyPrinterAbstract.php +1706 -0
  288. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Token.php +18 -0
  289. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/compatibility_tokens.php +71 -0
  290. webshell_analyzer/extractor/extractor.py +73 -0
  291. webshell_analyzer/extractor/lexical_extraction/lexicalExtractor.py +31 -0
  292. webshell_analyzer/extractor/statistical_extraction/statisticalExtractor.py +60 -0
  293. webshell_analyzer/model/features_selected.json +1 -0
  294. webshell_analyzer/model/model_loader.py +19 -0
  295. webshell_analyzer/model/rf_webshell_model.joblib +0 -0
  296. webshell_analyzer/modules/__init__.py +0 -0
  297. webshell_analyzer/modules/detector.py +174 -0
  298. webshell_analyzer/modules/scanner.py +68 -0
  299. webshell_analyzer-1.0.0.dist-info/METADATA +105 -0
  300. webshell_analyzer-1.0.0.dist-info/RECORD +304 -0
  301. webshell_analyzer-1.0.0.dist-info/WHEEL +5 -0
  302. webshell_analyzer-1.0.0.dist-info/entry_points.txt +2 -0
  303. webshell_analyzer-1.0.0.dist-info/licenses/LICENSE +21 -0
  304. webshell_analyzer-1.0.0.dist-info/top_level.txt +1 -0
@@ -0,0 +1,299 @@
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser;
4
+
5
+ use PhpParser\Node\Expr\Array_;
6
+ use PhpParser\Node\Expr\Include_;
7
+ use PhpParser\Node\Expr\List_;
8
+ use PhpParser\Node\Scalar\Int_;
9
+ use PhpParser\Node\Scalar\InterpolatedString;
10
+ use PhpParser\Node\Scalar\String_;
11
+ use PhpParser\Node\Stmt\GroupUse;
12
+ use PhpParser\Node\Stmt\Use_;
13
+ use PhpParser\Node\UseItem;
14
+
15
+ class NodeDumper {
16
+ private bool $dumpComments;
17
+ private bool $dumpPositions;
18
+ private bool $dumpOtherAttributes;
19
+ private ?string $code;
20
+ private string $res;
21
+ private string $nl;
22
+
23
+ private const IGNORE_ATTRIBUTES = [
24
+ 'comments' => true,
25
+ 'startLine' => true,
26
+ 'endLine' => true,
27
+ 'startFilePos' => true,
28
+ 'endFilePos' => true,
29
+ 'startTokenPos' => true,
30
+ 'endTokenPos' => true,
31
+ ];
32
+
33
+ /**
34
+ * Constructs a NodeDumper.
35
+ *
36
+ * Supported options:
37
+ * * bool dumpComments: Whether comments should be dumped.
38
+ * * bool dumpPositions: Whether line/offset information should be dumped. To dump offset
39
+ * information, the code needs to be passed to dump().
40
+ * * bool dumpOtherAttributes: Whether non-comment, non-position attributes should be dumped.
41
+ *
42
+ * @param array $options Options (see description)
43
+ */
44
+ public function __construct(array $options = []) {
45
+ $this->dumpComments = !empty($options['dumpComments']);
46
+ $this->dumpPositions = !empty($options['dumpPositions']);
47
+ $this->dumpOtherAttributes = !empty($options['dumpOtherAttributes']);
48
+ }
49
+
50
+ /**
51
+ * Dumps a node or array.
52
+ *
53
+ * @param array|Node $node Node or array to dump
54
+ * @param string|null $code Code corresponding to dumped AST. This only needs to be passed if
55
+ * the dumpPositions option is enabled and the dumping of node offsets
56
+ * is desired.
57
+ *
58
+ * @return string Dumped value
59
+ */
60
+ public function dump($node, ?string $code = null): string {
61
+ $this->code = $code;
62
+ $this->res = '';
63
+ $this->nl = "\n";
64
+ $this->dumpRecursive($node, false);
65
+ return $this->res;
66
+ }
67
+
68
+ /** @param mixed $node */
69
+ protected function dumpRecursive($node, bool $indent = true): void {
70
+ if ($indent) {
71
+ $this->nl .= " ";
72
+ }
73
+ if ($node instanceof Node) {
74
+ $this->res .= $node->getType();
75
+ if ($this->dumpPositions && null !== $p = $this->dumpPosition($node)) {
76
+ $this->res .= $p;
77
+ }
78
+ $this->res .= '(';
79
+
80
+ foreach ($node->getSubNodeNames() as $key) {
81
+ $this->res .= "$this->nl " . $key . ': ';
82
+
83
+ $value = $node->$key;
84
+ if (\is_int($value)) {
85
+ if ('flags' === $key || 'newModifier' === $key) {
86
+ $this->res .= $this->dumpFlags($value);
87
+ continue;
88
+ }
89
+ if ('type' === $key && $node instanceof Include_) {
90
+ $this->res .= $this->dumpIncludeType($value);
91
+ continue;
92
+ }
93
+ if ('type' === $key
94
+ && ($node instanceof Use_ || $node instanceof UseItem || $node instanceof GroupUse)) {
95
+ $this->res .= $this->dumpUseType($value);
96
+ continue;
97
+ }
98
+ }
99
+ $this->dumpRecursive($value);
100
+ }
101
+
102
+ if ($this->dumpComments && $comments = $node->getComments()) {
103
+ $this->res .= "$this->nl comments: ";
104
+ $this->dumpRecursive($comments);
105
+ }
106
+
107
+ if ($this->dumpOtherAttributes) {
108
+ foreach ($node->getAttributes() as $key => $value) {
109
+ if (isset(self::IGNORE_ATTRIBUTES[$key])) {
110
+ continue;
111
+ }
112
+
113
+ $this->res .= "$this->nl $key: ";
114
+ if (\is_int($value)) {
115
+ if ('kind' === $key) {
116
+ if ($node instanceof Int_) {
117
+ $this->res .= $this->dumpIntKind($value);
118
+ continue;
119
+ }
120
+ if ($node instanceof String_ || $node instanceof InterpolatedString) {
121
+ $this->res .= $this->dumpStringKind($value);
122
+ continue;
123
+ }
124
+ if ($node instanceof Array_) {
125
+ $this->res .= $this->dumpArrayKind($value);
126
+ continue;
127
+ }
128
+ if ($node instanceof List_) {
129
+ $this->res .= $this->dumpListKind($value);
130
+ continue;
131
+ }
132
+ }
133
+ }
134
+ $this->dumpRecursive($value);
135
+ }
136
+ }
137
+ $this->res .= "$this->nl)";
138
+ } elseif (\is_array($node)) {
139
+ $this->res .= 'array(';
140
+ foreach ($node as $key => $value) {
141
+ $this->res .= "$this->nl " . $key . ': ';
142
+ $this->dumpRecursive($value);
143
+ }
144
+ $this->res .= "$this->nl)";
145
+ } elseif ($node instanceof Comment) {
146
+ $this->res .= \str_replace("\n", $this->nl, $node->getReformattedText());
147
+ } elseif (\is_string($node)) {
148
+ $this->res .= \str_replace("\n", $this->nl, $node);
149
+ } elseif (\is_int($node) || \is_float($node)) {
150
+ $this->res .= $node;
151
+ } elseif (null === $node) {
152
+ $this->res .= 'null';
153
+ } elseif (false === $node) {
154
+ $this->res .= 'false';
155
+ } elseif (true === $node) {
156
+ $this->res .= 'true';
157
+ } else {
158
+ throw new \InvalidArgumentException('Can only dump nodes and arrays.');
159
+ }
160
+ if ($indent) {
161
+ $this->nl = \substr($this->nl, 0, -4);
162
+ }
163
+ }
164
+
165
+ protected function dumpFlags(int $flags): string {
166
+ $strs = [];
167
+ if ($flags & Modifiers::PUBLIC) {
168
+ $strs[] = 'PUBLIC';
169
+ }
170
+ if ($flags & Modifiers::PROTECTED) {
171
+ $strs[] = 'PROTECTED';
172
+ }
173
+ if ($flags & Modifiers::PRIVATE) {
174
+ $strs[] = 'PRIVATE';
175
+ }
176
+ if ($flags & Modifiers::ABSTRACT) {
177
+ $strs[] = 'ABSTRACT';
178
+ }
179
+ if ($flags & Modifiers::STATIC) {
180
+ $strs[] = 'STATIC';
181
+ }
182
+ if ($flags & Modifiers::FINAL) {
183
+ $strs[] = 'FINAL';
184
+ }
185
+ if ($flags & Modifiers::READONLY) {
186
+ $strs[] = 'READONLY';
187
+ }
188
+ if ($flags & Modifiers::PUBLIC_SET) {
189
+ $strs[] = 'PUBLIC_SET';
190
+ }
191
+ if ($flags & Modifiers::PROTECTED_SET) {
192
+ $strs[] = 'PROTECTED_SET';
193
+ }
194
+ if ($flags & Modifiers::PRIVATE_SET) {
195
+ $strs[] = 'PRIVATE_SET';
196
+ }
197
+
198
+ if ($strs) {
199
+ return implode(' | ', $strs) . ' (' . $flags . ')';
200
+ } else {
201
+ return (string) $flags;
202
+ }
203
+ }
204
+
205
+ /** @param array<int, string> $map */
206
+ private function dumpEnum(int $value, array $map): string {
207
+ if (!isset($map[$value])) {
208
+ return (string) $value;
209
+ }
210
+ return $map[$value] . ' (' . $value . ')';
211
+ }
212
+
213
+ private function dumpIncludeType(int $type): string {
214
+ return $this->dumpEnum($type, [
215
+ Include_::TYPE_INCLUDE => 'TYPE_INCLUDE',
216
+ Include_::TYPE_INCLUDE_ONCE => 'TYPE_INCLUDE_ONCE',
217
+ Include_::TYPE_REQUIRE => 'TYPE_REQUIRE',
218
+ Include_::TYPE_REQUIRE_ONCE => 'TYPE_REQUIRE_ONCE',
219
+ ]);
220
+ }
221
+
222
+ private function dumpUseType(int $type): string {
223
+ return $this->dumpEnum($type, [
224
+ Use_::TYPE_UNKNOWN => 'TYPE_UNKNOWN',
225
+ Use_::TYPE_NORMAL => 'TYPE_NORMAL',
226
+ Use_::TYPE_FUNCTION => 'TYPE_FUNCTION',
227
+ Use_::TYPE_CONSTANT => 'TYPE_CONSTANT',
228
+ ]);
229
+ }
230
+
231
+ private function dumpIntKind(int $kind): string {
232
+ return $this->dumpEnum($kind, [
233
+ Int_::KIND_BIN => 'KIND_BIN',
234
+ Int_::KIND_OCT => 'KIND_OCT',
235
+ Int_::KIND_DEC => 'KIND_DEC',
236
+ Int_::KIND_HEX => 'KIND_HEX',
237
+ ]);
238
+ }
239
+
240
+ private function dumpStringKind(int $kind): string {
241
+ return $this->dumpEnum($kind, [
242
+ String_::KIND_SINGLE_QUOTED => 'KIND_SINGLE_QUOTED',
243
+ String_::KIND_DOUBLE_QUOTED => 'KIND_DOUBLE_QUOTED',
244
+ String_::KIND_HEREDOC => 'KIND_HEREDOC',
245
+ String_::KIND_NOWDOC => 'KIND_NOWDOC',
246
+ ]);
247
+ }
248
+
249
+ private function dumpArrayKind(int $kind): string {
250
+ return $this->dumpEnum($kind, [
251
+ Array_::KIND_LONG => 'KIND_LONG',
252
+ Array_::KIND_SHORT => 'KIND_SHORT',
253
+ ]);
254
+ }
255
+
256
+ private function dumpListKind(int $kind): string {
257
+ return $this->dumpEnum($kind, [
258
+ List_::KIND_LIST => 'KIND_LIST',
259
+ List_::KIND_ARRAY => 'KIND_ARRAY',
260
+ ]);
261
+ }
262
+
263
+ /**
264
+ * Dump node position, if possible.
265
+ *
266
+ * @param Node $node Node for which to dump position
267
+ *
268
+ * @return string|null Dump of position, or null if position information not available
269
+ */
270
+ protected function dumpPosition(Node $node): ?string {
271
+ if (!$node->hasAttribute('startLine') || !$node->hasAttribute('endLine')) {
272
+ return null;
273
+ }
274
+
275
+ $start = $node->getStartLine();
276
+ $end = $node->getEndLine();
277
+ if ($node->hasAttribute('startFilePos') && $node->hasAttribute('endFilePos')
278
+ && null !== $this->code
279
+ ) {
280
+ $start .= ':' . $this->toColumn($this->code, $node->getStartFilePos());
281
+ $end .= ':' . $this->toColumn($this->code, $node->getEndFilePos());
282
+ }
283
+ return "[$start - $end]";
284
+ }
285
+
286
+ // Copied from Error class
287
+ private function toColumn(string $code, int $pos): int {
288
+ if ($pos > strlen($code)) {
289
+ throw new \RuntimeException('Invalid position information');
290
+ }
291
+
292
+ $lineStartPos = strrpos($code, "\n", $pos - strlen($code));
293
+ if (false === $lineStartPos) {
294
+ $lineStartPos = -1;
295
+ }
296
+
297
+ return $pos - $lineStartPos;
298
+ }
299
+ }
@@ -0,0 +1,90 @@
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser;
4
+
5
+ use PhpParser\NodeVisitor\FindingVisitor;
6
+ use PhpParser\NodeVisitor\FirstFindingVisitor;
7
+
8
+ class NodeFinder {
9
+ /**
10
+ * Find all nodes satisfying a filter callback.
11
+ *
12
+ * @param Node|Node[] $nodes Single node or array of nodes to search in
13
+ * @param callable $filter Filter callback: function(Node $node) : bool
14
+ *
15
+ * @return Node[] Found nodes satisfying the filter callback
16
+ */
17
+ public function find($nodes, callable $filter): array {
18
+ if ($nodes === []) {
19
+ return [];
20
+ }
21
+
22
+ if (!is_array($nodes)) {
23
+ $nodes = [$nodes];
24
+ }
25
+
26
+ $visitor = new FindingVisitor($filter);
27
+
28
+ $traverser = new NodeTraverser($visitor);
29
+ $traverser->traverse($nodes);
30
+
31
+ return $visitor->getFoundNodes();
32
+ }
33
+
34
+ /**
35
+ * Find all nodes that are instances of a certain class.
36
+
37
+ * @template TNode as Node
38
+ *
39
+ * @param Node|Node[] $nodes Single node or array of nodes to search in
40
+ * @param class-string<TNode> $class Class name
41
+ *
42
+ * @return TNode[] Found nodes (all instances of $class)
43
+ */
44
+ public function findInstanceOf($nodes, string $class): array {
45
+ return $this->find($nodes, function ($node) use ($class) {
46
+ return $node instanceof $class;
47
+ });
48
+ }
49
+
50
+ /**
51
+ * Find first node satisfying a filter callback.
52
+ *
53
+ * @param Node|Node[] $nodes Single node or array of nodes to search in
54
+ * @param callable $filter Filter callback: function(Node $node) : bool
55
+ *
56
+ * @return null|Node Found node (or null if none found)
57
+ */
58
+ public function findFirst($nodes, callable $filter): ?Node {
59
+ if ($nodes === []) {
60
+ return null;
61
+ }
62
+
63
+ if (!is_array($nodes)) {
64
+ $nodes = [$nodes];
65
+ }
66
+
67
+ $visitor = new FirstFindingVisitor($filter);
68
+
69
+ $traverser = new NodeTraverser($visitor);
70
+ $traverser->traverse($nodes);
71
+
72
+ return $visitor->getFoundNode();
73
+ }
74
+
75
+ /**
76
+ * Find first node that is an instance of a certain class.
77
+ *
78
+ * @template TNode as Node
79
+ *
80
+ * @param Node|Node[] $nodes Single node or array of nodes to search in
81
+ * @param class-string<TNode> $class Class name
82
+ *
83
+ * @return null|TNode Found node, which is an instance of $class (or null if none found)
84
+ */
85
+ public function findFirstInstanceOf($nodes, string $class): ?Node {
86
+ return $this->findFirst($nodes, function ($node) use ($class) {
87
+ return $node instanceof $class;
88
+ });
89
+ }
90
+ }
@@ -0,0 +1,287 @@
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser;
4
+
5
+ class NodeTraverser implements NodeTraverserInterface {
6
+ /**
7
+ * @deprecated Use NodeVisitor::DONT_TRAVERSE_CHILDREN instead.
8
+ */
9
+ public const DONT_TRAVERSE_CHILDREN = NodeVisitor::DONT_TRAVERSE_CHILDREN;
10
+
11
+ /**
12
+ * @deprecated Use NodeVisitor::STOP_TRAVERSAL instead.
13
+ */
14
+ public const STOP_TRAVERSAL = NodeVisitor::STOP_TRAVERSAL;
15
+
16
+ /**
17
+ * @deprecated Use NodeVisitor::REMOVE_NODE instead.
18
+ */
19
+ public const REMOVE_NODE = NodeVisitor::REMOVE_NODE;
20
+
21
+ /**
22
+ * @deprecated Use NodeVisitor::DONT_TRAVERSE_CURRENT_AND_CHILDREN instead.
23
+ */
24
+ public const DONT_TRAVERSE_CURRENT_AND_CHILDREN = NodeVisitor::DONT_TRAVERSE_CURRENT_AND_CHILDREN;
25
+
26
+ /** @var list<NodeVisitor> Visitors */
27
+ protected array $visitors = [];
28
+
29
+ /** @var bool Whether traversal should be stopped */
30
+ protected bool $stopTraversal;
31
+
32
+ /**
33
+ * Create a traverser with the given visitors.
34
+ *
35
+ * @param NodeVisitor ...$visitors Node visitors
36
+ */
37
+ public function __construct(NodeVisitor ...$visitors) {
38
+ $this->visitors = $visitors;
39
+ }
40
+
41
+ /**
42
+ * Adds a visitor.
43
+ *
44
+ * @param NodeVisitor $visitor Visitor to add
45
+ */
46
+ public function addVisitor(NodeVisitor $visitor): void {
47
+ $this->visitors[] = $visitor;
48
+ }
49
+
50
+ /**
51
+ * Removes an added visitor.
52
+ */
53
+ public function removeVisitor(NodeVisitor $visitor): void {
54
+ $index = array_search($visitor, $this->visitors);
55
+ if ($index !== false) {
56
+ array_splice($this->visitors, $index, 1, []);
57
+ }
58
+ }
59
+
60
+ /**
61
+ * Traverses an array of nodes using the registered visitors.
62
+ *
63
+ * @param Node[] $nodes Array of nodes
64
+ *
65
+ * @return Node[] Traversed array of nodes
66
+ */
67
+ public function traverse(array $nodes): array {
68
+ $this->stopTraversal = false;
69
+
70
+ foreach ($this->visitors as $visitor) {
71
+ if (null !== $return = $visitor->beforeTraverse($nodes)) {
72
+ $nodes = $return;
73
+ }
74
+ }
75
+
76
+ $nodes = $this->traverseArray($nodes);
77
+
78
+ for ($i = \count($this->visitors) - 1; $i >= 0; --$i) {
79
+ $visitor = $this->visitors[$i];
80
+ if (null !== $return = $visitor->afterTraverse($nodes)) {
81
+ $nodes = $return;
82
+ }
83
+ }
84
+
85
+ return $nodes;
86
+ }
87
+
88
+ /**
89
+ * Recursively traverse a node.
90
+ *
91
+ * @param Node $node Node to traverse.
92
+ */
93
+ protected function traverseNode(Node $node): void {
94
+ foreach ($node->getSubNodeNames() as $name) {
95
+ $subNode = $node->$name;
96
+
97
+ if (\is_array($subNode)) {
98
+ $node->$name = $this->traverseArray($subNode);
99
+ if ($this->stopTraversal) {
100
+ break;
101
+ }
102
+
103
+ continue;
104
+ }
105
+
106
+ if (!$subNode instanceof Node) {
107
+ continue;
108
+ }
109
+
110
+ $traverseChildren = true;
111
+ $visitorIndex = -1;
112
+
113
+ foreach ($this->visitors as $visitorIndex => $visitor) {
114
+ $return = $visitor->enterNode($subNode);
115
+ if (null !== $return) {
116
+ if ($return instanceof Node) {
117
+ $this->ensureReplacementReasonable($subNode, $return);
118
+ $subNode = $node->$name = $return;
119
+ } elseif (NodeVisitor::DONT_TRAVERSE_CHILDREN === $return) {
120
+ $traverseChildren = false;
121
+ } elseif (NodeVisitor::DONT_TRAVERSE_CURRENT_AND_CHILDREN === $return) {
122
+ $traverseChildren = false;
123
+ break;
124
+ } elseif (NodeVisitor::STOP_TRAVERSAL === $return) {
125
+ $this->stopTraversal = true;
126
+ break 2;
127
+ } elseif (NodeVisitor::REPLACE_WITH_NULL === $return) {
128
+ $node->$name = null;
129
+ continue 2;
130
+ } else {
131
+ throw new \LogicException(
132
+ 'enterNode() returned invalid value of type ' . gettype($return)
133
+ );
134
+ }
135
+ }
136
+ }
137
+
138
+ if ($traverseChildren) {
139
+ $this->traverseNode($subNode);
140
+ if ($this->stopTraversal) {
141
+ break;
142
+ }
143
+ }
144
+
145
+ for (; $visitorIndex >= 0; --$visitorIndex) {
146
+ $visitor = $this->visitors[$visitorIndex];
147
+ $return = $visitor->leaveNode($subNode);
148
+
149
+ if (null !== $return) {
150
+ if ($return instanceof Node) {
151
+ $this->ensureReplacementReasonable($subNode, $return);
152
+ $subNode = $node->$name = $return;
153
+ } elseif (NodeVisitor::STOP_TRAVERSAL === $return) {
154
+ $this->stopTraversal = true;
155
+ break 2;
156
+ } elseif (NodeVisitor::REPLACE_WITH_NULL === $return) {
157
+ $node->$name = null;
158
+ break;
159
+ } elseif (\is_array($return)) {
160
+ throw new \LogicException(
161
+ 'leaveNode() may only return an array ' .
162
+ 'if the parent structure is an array'
163
+ );
164
+ } else {
165
+ throw new \LogicException(
166
+ 'leaveNode() returned invalid value of type ' . gettype($return)
167
+ );
168
+ }
169
+ }
170
+ }
171
+ }
172
+ }
173
+
174
+ /**
175
+ * Recursively traverse array (usually of nodes).
176
+ *
177
+ * @param Node[] $nodes Array to traverse
178
+ *
179
+ * @return Node[] Result of traversal (may be original array or changed one)
180
+ */
181
+ protected function traverseArray(array $nodes): array {
182
+ $doNodes = [];
183
+
184
+ foreach ($nodes as $i => $node) {
185
+ if (!$node instanceof Node) {
186
+ if (\is_array($node)) {
187
+ throw new \LogicException('Invalid node structure: Contains nested arrays');
188
+ }
189
+ continue;
190
+ }
191
+
192
+ $traverseChildren = true;
193
+ $visitorIndex = -1;
194
+
195
+ foreach ($this->visitors as $visitorIndex => $visitor) {
196
+ $return = $visitor->enterNode($node);
197
+ if (null !== $return) {
198
+ if ($return instanceof Node) {
199
+ $this->ensureReplacementReasonable($node, $return);
200
+ $nodes[$i] = $node = $return;
201
+ } elseif (\is_array($return)) {
202
+ $doNodes[] = [$i, $return];
203
+ continue 2;
204
+ } elseif (NodeVisitor::REMOVE_NODE === $return) {
205
+ $doNodes[] = [$i, []];
206
+ continue 2;
207
+ } elseif (NodeVisitor::DONT_TRAVERSE_CHILDREN === $return) {
208
+ $traverseChildren = false;
209
+ } elseif (NodeVisitor::DONT_TRAVERSE_CURRENT_AND_CHILDREN === $return) {
210
+ $traverseChildren = false;
211
+ break;
212
+ } elseif (NodeVisitor::STOP_TRAVERSAL === $return) {
213
+ $this->stopTraversal = true;
214
+ break 2;
215
+ } elseif (NodeVisitor::REPLACE_WITH_NULL === $return) {
216
+ throw new \LogicException(
217
+ 'REPLACE_WITH_NULL can not be used if the parent structure is an array');
218
+ } else {
219
+ throw new \LogicException(
220
+ 'enterNode() returned invalid value of type ' . gettype($return)
221
+ );
222
+ }
223
+ }
224
+ }
225
+
226
+ if ($traverseChildren) {
227
+ $this->traverseNode($node);
228
+ if ($this->stopTraversal) {
229
+ break;
230
+ }
231
+ }
232
+
233
+ for (; $visitorIndex >= 0; --$visitorIndex) {
234
+ $visitor = $this->visitors[$visitorIndex];
235
+ $return = $visitor->leaveNode($node);
236
+
237
+ if (null !== $return) {
238
+ if ($return instanceof Node) {
239
+ $this->ensureReplacementReasonable($node, $return);
240
+ $nodes[$i] = $node = $return;
241
+ } elseif (\is_array($return)) {
242
+ $doNodes[] = [$i, $return];
243
+ break;
244
+ } elseif (NodeVisitor::REMOVE_NODE === $return) {
245
+ $doNodes[] = [$i, []];
246
+ break;
247
+ } elseif (NodeVisitor::STOP_TRAVERSAL === $return) {
248
+ $this->stopTraversal = true;
249
+ break 2;
250
+ } elseif (NodeVisitor::REPLACE_WITH_NULL === $return) {
251
+ throw new \LogicException(
252
+ 'REPLACE_WITH_NULL can not be used if the parent structure is an array');
253
+ } else {
254
+ throw new \LogicException(
255
+ 'leaveNode() returned invalid value of type ' . gettype($return)
256
+ );
257
+ }
258
+ }
259
+ }
260
+ }
261
+
262
+ if (!empty($doNodes)) {
263
+ while (list($i, $replace) = array_pop($doNodes)) {
264
+ array_splice($nodes, $i, 1, $replace);
265
+ }
266
+ }
267
+
268
+ return $nodes;
269
+ }
270
+
271
+ private function ensureReplacementReasonable(Node $old, Node $new): void {
272
+ if ($old instanceof Node\Stmt && $new instanceof Node\Expr) {
273
+ throw new \LogicException(
274
+ "Trying to replace statement ({$old->getType()}) " .
275
+ "with expression ({$new->getType()}). Are you missing a " .
276
+ "Stmt_Expression wrapper?"
277
+ );
278
+ }
279
+
280
+ if ($old instanceof Node\Expr && $new instanceof Node\Stmt) {
281
+ throw new \LogicException(
282
+ "Trying to replace expression ({$old->getType()}) " .
283
+ "with statement ({$new->getType()})"
284
+ );
285
+ }
286
+ }
287
+ }
@@ -0,0 +1,26 @@
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser;
4
+
5
+ interface NodeTraverserInterface {
6
+ /**
7
+ * Adds a visitor.
8
+ *
9
+ * @param NodeVisitor $visitor Visitor to add
10
+ */
11
+ public function addVisitor(NodeVisitor $visitor): void;
12
+
13
+ /**
14
+ * Removes an added visitor.
15
+ */
16
+ public function removeVisitor(NodeVisitor $visitor): void;
17
+
18
+ /**
19
+ * Traverses an array of nodes using the registered visitors.
20
+ *
21
+ * @param Node[] $nodes Array of nodes
22
+ *
23
+ * @return Node[] Traversed array of nodes
24
+ */
25
+ public function traverse(array $nodes): array;
26
+ }