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,19 @@
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\NodeVisitor;
4
+
5
+ use PhpParser\Node;
6
+ use PhpParser\NodeVisitorAbstract;
7
+
8
+ /**
9
+ * Visitor cloning all nodes and linking to the original nodes using an attribute.
10
+ *
11
+ * This visitor is required to perform format-preserving pretty prints.
12
+ */
13
+ class CloningVisitor extends NodeVisitorAbstract {
14
+ public function enterNode(Node $origNode) {
15
+ $node = clone $origNode;
16
+ $node->setAttribute('origNode', $origNode);
17
+ return $node;
18
+ }
19
+ }
@@ -0,0 +1,82 @@
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\NodeVisitor;
4
+
5
+ use PhpParser\Comment;
6
+ use PhpParser\Node;
7
+ use PhpParser\NodeVisitorAbstract;
8
+ use PhpParser\Token;
9
+
10
+ class CommentAnnotatingVisitor extends NodeVisitorAbstract {
11
+ /** @var int Last seen token start position */
12
+ private int $pos = 0;
13
+ /** @var Token[] Token array */
14
+ private array $tokens;
15
+ /** @var list<int> Token positions of comments */
16
+ private array $commentPositions = [];
17
+
18
+ /**
19
+ * Create a comment annotation visitor.
20
+ *
21
+ * @param Token[] $tokens Token array
22
+ */
23
+ public function __construct(array $tokens) {
24
+ $this->tokens = $tokens;
25
+
26
+ // Collect positions of comments. We use this to avoid traversing parts of the AST where
27
+ // there are no comments.
28
+ foreach ($tokens as $i => $token) {
29
+ if ($token->id === \T_COMMENT || $token->id === \T_DOC_COMMENT) {
30
+ $this->commentPositions[] = $i;
31
+ }
32
+ }
33
+ }
34
+
35
+ public function enterNode(Node $node) {
36
+ $nextCommentPos = current($this->commentPositions);
37
+ if ($nextCommentPos === false) {
38
+ // No more comments.
39
+ return self::STOP_TRAVERSAL;
40
+ }
41
+
42
+ $oldPos = $this->pos;
43
+ $this->pos = $pos = $node->getStartTokenPos();
44
+ if ($nextCommentPos > $oldPos && $nextCommentPos < $pos) {
45
+ $comments = [];
46
+ while (--$pos >= $oldPos) {
47
+ $token = $this->tokens[$pos];
48
+ if ($token->id === \T_DOC_COMMENT) {
49
+ $comments[] = new Comment\Doc(
50
+ $token->text, $token->line, $token->pos, $pos,
51
+ $token->getEndLine(), $token->getEndPos() - 1, $pos);
52
+ continue;
53
+ }
54
+ if ($token->id === \T_COMMENT) {
55
+ $comments[] = new Comment(
56
+ $token->text, $token->line, $token->pos, $pos,
57
+ $token->getEndLine(), $token->getEndPos() - 1, $pos);
58
+ continue;
59
+ }
60
+ if ($token->id !== \T_WHITESPACE) {
61
+ break;
62
+ }
63
+ }
64
+ if (!empty($comments)) {
65
+ $node->setAttribute('comments', array_reverse($comments));
66
+ }
67
+
68
+ do {
69
+ $nextCommentPos = next($this->commentPositions);
70
+ } while ($nextCommentPos !== false && $nextCommentPos < $this->pos);
71
+ }
72
+
73
+ $endPos = $node->getEndTokenPos();
74
+ if ($nextCommentPos > $endPos) {
75
+ // Skip children if there are no comments located inside this node.
76
+ $this->pos = $endPos;
77
+ return self::DONT_TRAVERSE_CHILDREN;
78
+ }
79
+
80
+ return null;
81
+ }
82
+ }
@@ -0,0 +1,47 @@
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\NodeVisitor;
4
+
5
+ use PhpParser\Node;
6
+ use PhpParser\NodeVisitorAbstract;
7
+
8
+ /**
9
+ * This visitor can be used to find and collect all nodes satisfying some criterion determined by
10
+ * a filter callback.
11
+ */
12
+ class FindingVisitor extends NodeVisitorAbstract {
13
+ /** @var callable Filter callback */
14
+ protected $filterCallback;
15
+ /** @var list<Node> Found nodes */
16
+ protected array $foundNodes;
17
+
18
+ public function __construct(callable $filterCallback) {
19
+ $this->filterCallback = $filterCallback;
20
+ }
21
+
22
+ /**
23
+ * Get found nodes satisfying the filter callback.
24
+ *
25
+ * Nodes are returned in pre-order.
26
+ *
27
+ * @return list<Node> Found nodes
28
+ */
29
+ public function getFoundNodes(): array {
30
+ return $this->foundNodes;
31
+ }
32
+
33
+ public function beforeTraverse(array $nodes): ?array {
34
+ $this->foundNodes = [];
35
+
36
+ return null;
37
+ }
38
+
39
+ public function enterNode(Node $node) {
40
+ $filterCallback = $this->filterCallback;
41
+ if ($filterCallback($node)) {
42
+ $this->foundNodes[] = $node;
43
+ }
44
+
45
+ return null;
46
+ }
47
+ }
@@ -0,0 +1,49 @@
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\NodeVisitor;
4
+
5
+ use PhpParser\Node;
6
+ use PhpParser\NodeVisitor;
7
+ use PhpParser\NodeVisitorAbstract;
8
+
9
+ /**
10
+ * This visitor can be used to find the first node satisfying some criterion determined by
11
+ * a filter callback.
12
+ */
13
+ class FirstFindingVisitor extends NodeVisitorAbstract {
14
+ /** @var callable Filter callback */
15
+ protected $filterCallback;
16
+ /** @var null|Node Found node */
17
+ protected ?Node $foundNode;
18
+
19
+ public function __construct(callable $filterCallback) {
20
+ $this->filterCallback = $filterCallback;
21
+ }
22
+
23
+ /**
24
+ * Get found node satisfying the filter callback.
25
+ *
26
+ * Returns null if no node satisfies the filter callback.
27
+ *
28
+ * @return null|Node Found node (or null if not found)
29
+ */
30
+ public function getFoundNode(): ?Node {
31
+ return $this->foundNode;
32
+ }
33
+
34
+ public function beforeTraverse(array $nodes): ?array {
35
+ $this->foundNode = null;
36
+
37
+ return null;
38
+ }
39
+
40
+ public function enterNode(Node $node) {
41
+ $filterCallback = $this->filterCallback;
42
+ if ($filterCallback($node)) {
43
+ $this->foundNode = $node;
44
+ return NodeVisitor::STOP_TRAVERSAL;
45
+ }
46
+
47
+ return null;
48
+ }
49
+ }
@@ -0,0 +1,269 @@
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\NodeVisitor;
4
+
5
+ use PhpParser\ErrorHandler;
6
+ use PhpParser\NameContext;
7
+ use PhpParser\Node;
8
+ use PhpParser\Node\Expr;
9
+ use PhpParser\Node\Name;
10
+ use PhpParser\Node\Name\FullyQualified;
11
+ use PhpParser\Node\Stmt;
12
+ use PhpParser\NodeVisitorAbstract;
13
+
14
+ class NameResolver extends NodeVisitorAbstract {
15
+ /** @var NameContext Naming context */
16
+ protected NameContext $nameContext;
17
+
18
+ /** @var bool Whether to preserve original names */
19
+ protected bool $preserveOriginalNames;
20
+
21
+ /** @var bool Whether to replace resolved nodes in place, or to add resolvedNode attributes */
22
+ protected bool $replaceNodes;
23
+
24
+ /**
25
+ * Constructs a name resolution visitor.
26
+ *
27
+ * Options:
28
+ * * preserveOriginalNames (default false): An "originalName" attribute will be added to
29
+ * all name nodes that underwent resolution.
30
+ * * replaceNodes (default true): Resolved names are replaced in-place. Otherwise, a
31
+ * resolvedName attribute is added. (Names that cannot be statically resolved receive a
32
+ * namespacedName attribute, as usual.)
33
+ *
34
+ * @param ErrorHandler|null $errorHandler Error handler
35
+ * @param array{preserveOriginalNames?: bool, replaceNodes?: bool} $options Options
36
+ */
37
+ public function __construct(?ErrorHandler $errorHandler = null, array $options = []) {
38
+ $this->nameContext = new NameContext($errorHandler ?? new ErrorHandler\Throwing());
39
+ $this->preserveOriginalNames = $options['preserveOriginalNames'] ?? false;
40
+ $this->replaceNodes = $options['replaceNodes'] ?? true;
41
+ }
42
+
43
+ /**
44
+ * Get name resolution context.
45
+ */
46
+ public function getNameContext(): NameContext {
47
+ return $this->nameContext;
48
+ }
49
+
50
+ public function beforeTraverse(array $nodes): ?array {
51
+ $this->nameContext->startNamespace();
52
+ return null;
53
+ }
54
+
55
+ public function enterNode(Node $node) {
56
+ if ($node instanceof Stmt\Namespace_) {
57
+ $this->nameContext->startNamespace($node->name);
58
+ } elseif ($node instanceof Stmt\Use_) {
59
+ foreach ($node->uses as $use) {
60
+ $this->addAlias($use, $node->type, null);
61
+ }
62
+ } elseif ($node instanceof Stmt\GroupUse) {
63
+ foreach ($node->uses as $use) {
64
+ $this->addAlias($use, $node->type, $node->prefix);
65
+ }
66
+ } elseif ($node instanceof Stmt\Class_) {
67
+ if (null !== $node->extends) {
68
+ $node->extends = $this->resolveClassName($node->extends);
69
+ }
70
+
71
+ foreach ($node->implements as &$interface) {
72
+ $interface = $this->resolveClassName($interface);
73
+ }
74
+
75
+ $this->resolveAttrGroups($node);
76
+ if (null !== $node->name) {
77
+ $this->addNamespacedName($node);
78
+ } else {
79
+ $node->namespacedName = null;
80
+ }
81
+ } elseif ($node instanceof Stmt\Interface_) {
82
+ foreach ($node->extends as &$interface) {
83
+ $interface = $this->resolveClassName($interface);
84
+ }
85
+
86
+ $this->resolveAttrGroups($node);
87
+ $this->addNamespacedName($node);
88
+ } elseif ($node instanceof Stmt\Enum_) {
89
+ foreach ($node->implements as &$interface) {
90
+ $interface = $this->resolveClassName($interface);
91
+ }
92
+
93
+ $this->resolveAttrGroups($node);
94
+ $this->addNamespacedName($node);
95
+ } elseif ($node instanceof Stmt\Trait_) {
96
+ $this->resolveAttrGroups($node);
97
+ $this->addNamespacedName($node);
98
+ } elseif ($node instanceof Stmt\Function_) {
99
+ $this->resolveSignature($node);
100
+ $this->resolveAttrGroups($node);
101
+ $this->addNamespacedName($node);
102
+ } elseif ($node instanceof Stmt\ClassMethod
103
+ || $node instanceof Expr\Closure
104
+ || $node instanceof Expr\ArrowFunction
105
+ ) {
106
+ $this->resolveSignature($node);
107
+ $this->resolveAttrGroups($node);
108
+ } elseif ($node instanceof Stmt\Property) {
109
+ if (null !== $node->type) {
110
+ $node->type = $this->resolveType($node->type);
111
+ }
112
+ $this->resolveAttrGroups($node);
113
+ } elseif ($node instanceof Node\PropertyHook) {
114
+ foreach ($node->params as $param) {
115
+ $param->type = $this->resolveType($param->type);
116
+ $this->resolveAttrGroups($param);
117
+ }
118
+ $this->resolveAttrGroups($node);
119
+ } elseif ($node instanceof Stmt\Const_) {
120
+ foreach ($node->consts as $const) {
121
+ $this->addNamespacedName($const);
122
+ }
123
+ $this->resolveAttrGroups($node);
124
+ } elseif ($node instanceof Stmt\ClassConst) {
125
+ if (null !== $node->type) {
126
+ $node->type = $this->resolveType($node->type);
127
+ }
128
+ $this->resolveAttrGroups($node);
129
+ } elseif ($node instanceof Stmt\EnumCase) {
130
+ $this->resolveAttrGroups($node);
131
+ } elseif ($node instanceof Expr\StaticCall
132
+ || $node instanceof Expr\StaticPropertyFetch
133
+ || $node instanceof Expr\ClassConstFetch
134
+ || $node instanceof Expr\New_
135
+ || $node instanceof Expr\Instanceof_
136
+ ) {
137
+ if ($node->class instanceof Name) {
138
+ $node->class = $this->resolveClassName($node->class);
139
+ }
140
+ } elseif ($node instanceof Stmt\Catch_) {
141
+ foreach ($node->types as &$type) {
142
+ $type = $this->resolveClassName($type);
143
+ }
144
+ } elseif ($node instanceof Expr\FuncCall) {
145
+ if ($node->name instanceof Name) {
146
+ $node->name = $this->resolveName($node->name, Stmt\Use_::TYPE_FUNCTION);
147
+ }
148
+ } elseif ($node instanceof Expr\ConstFetch) {
149
+ $node->name = $this->resolveName($node->name, Stmt\Use_::TYPE_CONSTANT);
150
+ } elseif ($node instanceof Stmt\TraitUse) {
151
+ foreach ($node->traits as &$trait) {
152
+ $trait = $this->resolveClassName($trait);
153
+ }
154
+
155
+ foreach ($node->adaptations as $adaptation) {
156
+ if (null !== $adaptation->trait) {
157
+ $adaptation->trait = $this->resolveClassName($adaptation->trait);
158
+ }
159
+
160
+ if ($adaptation instanceof Stmt\TraitUseAdaptation\Precedence) {
161
+ foreach ($adaptation->insteadof as &$insteadof) {
162
+ $insteadof = $this->resolveClassName($insteadof);
163
+ }
164
+ }
165
+ }
166
+ }
167
+
168
+ return null;
169
+ }
170
+
171
+ /** @param Stmt\Use_::TYPE_* $type */
172
+ private function addAlias(Node\UseItem $use, int $type, ?Name $prefix = null): void {
173
+ // Add prefix for group uses
174
+ $name = $prefix ? Name::concat($prefix, $use->name) : $use->name;
175
+ // Type is determined either by individual element or whole use declaration
176
+ $type |= $use->type;
177
+
178
+ $this->nameContext->addAlias(
179
+ $name, (string) $use->getAlias(), $type, $use->getAttributes()
180
+ );
181
+ }
182
+
183
+ /** @param Stmt\Function_|Stmt\ClassMethod|Expr\Closure|Expr\ArrowFunction $node */
184
+ private function resolveSignature($node): void {
185
+ foreach ($node->params as $param) {
186
+ $param->type = $this->resolveType($param->type);
187
+ $this->resolveAttrGroups($param);
188
+ }
189
+ $node->returnType = $this->resolveType($node->returnType);
190
+ }
191
+
192
+ /**
193
+ * @template T of Node\Identifier|Name|Node\ComplexType|null
194
+ * @param T $node
195
+ * @return T
196
+ */
197
+ private function resolveType(?Node $node): ?Node {
198
+ if ($node instanceof Name) {
199
+ return $this->resolveClassName($node);
200
+ }
201
+ if ($node instanceof Node\NullableType) {
202
+ $node->type = $this->resolveType($node->type);
203
+ return $node;
204
+ }
205
+ if ($node instanceof Node\UnionType || $node instanceof Node\IntersectionType) {
206
+ foreach ($node->types as &$type) {
207
+ $type = $this->resolveType($type);
208
+ }
209
+ return $node;
210
+ }
211
+ return $node;
212
+ }
213
+
214
+ /**
215
+ * Resolve name, according to name resolver options.
216
+ *
217
+ * @param Name $name Function or constant name to resolve
218
+ * @param Stmt\Use_::TYPE_* $type One of Stmt\Use_::TYPE_*
219
+ *
220
+ * @return Name Resolved name, or original name with attribute
221
+ */
222
+ protected function resolveName(Name $name, int $type): Name {
223
+ if (!$this->replaceNodes) {
224
+ $resolvedName = $this->nameContext->getResolvedName($name, $type);
225
+ if (null !== $resolvedName) {
226
+ $name->setAttribute('resolvedName', $resolvedName);
227
+ } else {
228
+ $name->setAttribute('namespacedName', FullyQualified::concat(
229
+ $this->nameContext->getNamespace(), $name, $name->getAttributes()));
230
+ }
231
+ return $name;
232
+ }
233
+
234
+ if ($this->preserveOriginalNames) {
235
+ // Save the original name
236
+ $originalName = $name;
237
+ $name = clone $originalName;
238
+ $name->setAttribute('originalName', $originalName);
239
+ }
240
+
241
+ $resolvedName = $this->nameContext->getResolvedName($name, $type);
242
+ if (null !== $resolvedName) {
243
+ return $resolvedName;
244
+ }
245
+
246
+ // unqualified names inside a namespace cannot be resolved at compile-time
247
+ // add the namespaced version of the name as an attribute
248
+ $name->setAttribute('namespacedName', FullyQualified::concat(
249
+ $this->nameContext->getNamespace(), $name, $name->getAttributes()));
250
+ return $name;
251
+ }
252
+
253
+ protected function resolveClassName(Name $name): Name {
254
+ return $this->resolveName($name, Stmt\Use_::TYPE_NORMAL);
255
+ }
256
+
257
+ protected function addNamespacedName(Node $node): void {
258
+ $node->namespacedName = Name::concat(
259
+ $this->nameContext->getNamespace(), (string) $node->name);
260
+ }
261
+
262
+ protected function resolveAttrGroups(Node $node): void {
263
+ foreach ($node->attrGroups as $attrGroup) {
264
+ foreach ($attrGroup->attrs as $attr) {
265
+ $attr->name = $this->resolveClassName($attr->name);
266
+ }
267
+ }
268
+ }
269
+ }
@@ -0,0 +1,73 @@
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\NodeVisitor;
4
+
5
+ use PhpParser\Node;
6
+ use PhpParser\NodeVisitorAbstract;
7
+
8
+ /**
9
+ * Visitor that connects a child node to its parent node
10
+ * as well as its sibling nodes.
11
+ *
12
+ * With <code>$weakReferences=false</code> on the child node, the parent node can be accessed through
13
+ * <code>$node->getAttribute('parent')</code>, the previous
14
+ * node can be accessed through <code>$node->getAttribute('previous')</code>,
15
+ * and the next node can be accessed through <code>$node->getAttribute('next')</code>.
16
+ *
17
+ * With <code>$weakReferences=true</code> attribute names are prefixed by "weak_", e.g. "weak_parent".
18
+ */
19
+ final class NodeConnectingVisitor extends NodeVisitorAbstract {
20
+ /**
21
+ * @var Node[]
22
+ */
23
+ private array $stack = [];
24
+
25
+ /**
26
+ * @var ?Node
27
+ */
28
+ private $previous;
29
+
30
+ private bool $weakReferences;
31
+
32
+ public function __construct(bool $weakReferences = false) {
33
+ $this->weakReferences = $weakReferences;
34
+ }
35
+
36
+ public function beforeTraverse(array $nodes) {
37
+ $this->stack = [];
38
+ $this->previous = null;
39
+ }
40
+
41
+ public function enterNode(Node $node) {
42
+ if (!empty($this->stack)) {
43
+ $parent = $this->stack[count($this->stack) - 1];
44
+ if ($this->weakReferences) {
45
+ $node->setAttribute('weak_parent', \WeakReference::create($parent));
46
+ } else {
47
+ $node->setAttribute('parent', $parent);
48
+ }
49
+ }
50
+
51
+ if ($this->previous !== null) {
52
+ if (
53
+ $this->weakReferences
54
+ ) {
55
+ if ($this->previous->getAttribute('weak_parent') === $node->getAttribute('weak_parent')) {
56
+ $node->setAttribute('weak_previous', \WeakReference::create($this->previous));
57
+ $this->previous->setAttribute('weak_next', \WeakReference::create($node));
58
+ }
59
+ } elseif ($this->previous->getAttribute('parent') === $node->getAttribute('parent')) {
60
+ $node->setAttribute('previous', $this->previous);
61
+ $this->previous->setAttribute('next', $node);
62
+ }
63
+ }
64
+
65
+ $this->stack[] = $node;
66
+ }
67
+
68
+ public function leaveNode(Node $node) {
69
+ $this->previous = $node;
70
+
71
+ array_pop($this->stack);
72
+ }
73
+ }
@@ -0,0 +1,51 @@
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\NodeVisitor;
4
+
5
+ use PhpParser\Node;
6
+ use PhpParser\NodeVisitorAbstract;
7
+
8
+ use function array_pop;
9
+ use function count;
10
+
11
+ /**
12
+ * Visitor that connects a child node to its parent node.
13
+ *
14
+ * With <code>$weakReferences=false</code> on the child node, the parent node can be accessed through
15
+ * <code>$node->getAttribute('parent')</code>.
16
+ *
17
+ * With <code>$weakReferences=true</code> the attribute name is "weak_parent" instead.
18
+ */
19
+ final class ParentConnectingVisitor extends NodeVisitorAbstract {
20
+ /**
21
+ * @var Node[]
22
+ */
23
+ private array $stack = [];
24
+
25
+ private bool $weakReferences;
26
+
27
+ public function __construct(bool $weakReferences = false) {
28
+ $this->weakReferences = $weakReferences;
29
+ }
30
+
31
+ public function beforeTraverse(array $nodes) {
32
+ $this->stack = [];
33
+ }
34
+
35
+ public function enterNode(Node $node) {
36
+ if (!empty($this->stack)) {
37
+ $parent = $this->stack[count($this->stack) - 1];
38
+ if ($this->weakReferences) {
39
+ $node->setAttribute('weak_parent', \WeakReference::create($parent));
40
+ } else {
41
+ $node->setAttribute('parent', $parent);
42
+ }
43
+ }
44
+
45
+ $this->stack[] = $node;
46
+ }
47
+
48
+ public function leaveNode(Node $node) {
49
+ array_pop($this->stack);
50
+ }
51
+ }