@appthreat/atom-parsetools 1.0.4 → 1.0.6

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 (838) hide show
  1. package/package.json +3 -3
  2. package/plugins/autoload.php +1 -1
  3. package/plugins/bin/bundler +1 -1
  4. package/plugins/bin/ruby_ast_gen +1 -1
  5. package/plugins/composer/autoload_classmap.php +22 -8
  6. package/plugins/composer/autoload_real.php +4 -4
  7. package/plugins/composer/autoload_static.php +26 -12
  8. package/plugins/composer/installed.json +12 -10
  9. package/plugins/composer/installed.php +9 -9
  10. package/plugins/nikic/php-parser/README.md +20 -12
  11. package/plugins/nikic/php-parser/bin/php-parse +11 -10
  12. package/plugins/nikic/php-parser/composer.json +6 -4
  13. package/plugins/nikic/php-parser/lib/PhpParser/Builder/ClassConst.php +19 -17
  14. package/plugins/nikic/php-parser/lib/PhpParser/Builder/Class_.php +35 -30
  15. package/plugins/nikic/php-parser/lib/PhpParser/Builder/Declaration.php +11 -4
  16. package/plugins/nikic/php-parser/lib/PhpParser/Builder/EnumCase.php +8 -7
  17. package/plugins/nikic/php-parser/lib/PhpParser/Builder/Enum_.php +26 -27
  18. package/plugins/nikic/php-parser/lib/PhpParser/Builder/FunctionLike.php +7 -7
  19. package/plugins/nikic/php-parser/lib/PhpParser/Builder/Function_.php +7 -7
  20. package/plugins/nikic/php-parser/lib/PhpParser/Builder/Interface_.php +11 -10
  21. package/plugins/nikic/php-parser/lib/PhpParser/Builder/Method.php +16 -15
  22. package/plugins/nikic/php-parser/lib/PhpParser/Builder/Namespace_.php +5 -5
  23. package/plugins/nikic/php-parser/lib/PhpParser/Builder/Param.php +38 -35
  24. package/plugins/nikic/php-parser/lib/PhpParser/Builder/Property.php +82 -20
  25. package/plugins/nikic/php-parser/lib/PhpParser/Builder/TraitUse.php +6 -5
  26. package/plugins/nikic/php-parser/lib/PhpParser/Builder/TraitUseAdaptation.php +25 -28
  27. package/plugins/nikic/php-parser/lib/PhpParser/Builder/Trait_.php +16 -11
  28. package/plugins/nikic/php-parser/lib/PhpParser/Builder/Use_.php +8 -8
  29. package/plugins/nikic/php-parser/lib/PhpParser/Builder.php +2 -3
  30. package/plugins/nikic/php-parser/lib/PhpParser/BuilderFactory.php +46 -70
  31. package/plugins/nikic/php-parser/lib/PhpParser/BuilderHelpers.php +23 -20
  32. package/plugins/nikic/php-parser/lib/PhpParser/Comment/Doc.php +1 -2
  33. package/plugins/nikic/php-parser/lib/PhpParser/Comment.php +37 -67
  34. package/plugins/nikic/php-parser/lib/PhpParser/ConstExprEvaluationException.php +3 -3
  35. package/plugins/nikic/php-parser/lib/PhpParser/ConstExprEvaluator.php +15 -10
  36. package/plugins/nikic/php-parser/lib/PhpParser/Error.php +26 -33
  37. package/plugins/nikic/php-parser/lib/PhpParser/ErrorHandler/Collecting.php +6 -9
  38. package/plugins/nikic/php-parser/lib/PhpParser/ErrorHandler/Throwing.php +2 -3
  39. package/plugins/nikic/php-parser/lib/PhpParser/ErrorHandler.php +2 -3
  40. package/plugins/nikic/php-parser/lib/PhpParser/Internal/DiffElem.php +11 -7
  41. package/plugins/nikic/php-parser/lib/PhpParser/Internal/Differ.php +36 -22
  42. package/plugins/nikic/php-parser/lib/PhpParser/Internal/PrintableNewAnonClassNode.php +20 -13
  43. package/plugins/nikic/php-parser/lib/PhpParser/Internal/TokenPolyfill.php +237 -0
  44. package/plugins/nikic/php-parser/lib/PhpParser/Internal/TokenStream.php +70 -74
  45. package/plugins/nikic/php-parser/lib/PhpParser/JsonDecoder.php +15 -10
  46. package/plugins/nikic/php-parser/lib/PhpParser/Lexer/Emulative.php +72 -97
  47. package/plugins/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/AsymmetricVisibilityTokenEmulator.php +93 -0
  48. package/plugins/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/AttributeEmulator.php +11 -18
  49. package/plugins/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/EnumTokenEmulator.php +10 -15
  50. package/plugins/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/ExplicitOctalEmulator.php +12 -11
  51. package/plugins/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/KeywordEmulator.php +24 -26
  52. package/plugins/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/MatchTokenEmulator.php +6 -10
  53. package/plugins/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/NullsafeTokenEmulator.php +22 -29
  54. package/plugins/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/PropertyTokenEmulator.php +19 -0
  55. package/plugins/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/ReadonlyFunctionTokenEmulator.php +3 -3
  56. package/plugins/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/ReadonlyTokenEmulator.php +10 -15
  57. package/plugins/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/ReverseEmulator.php +6 -5
  58. package/plugins/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/TokenEmulator.php +10 -5
  59. package/plugins/nikic/php-parser/lib/PhpParser/Lexer.php +69 -513
  60. package/plugins/nikic/php-parser/lib/PhpParser/Modifiers.php +85 -0
  61. package/plugins/nikic/php-parser/lib/PhpParser/NameContext.php +24 -25
  62. package/plugins/nikic/php-parser/lib/PhpParser/Node/Arg.php +13 -15
  63. package/plugins/nikic/php-parser/lib/PhpParser/Node/ArrayItem.php +43 -0
  64. package/plugins/nikic/php-parser/lib/PhpParser/Node/Attribute.php +9 -10
  65. package/plugins/nikic/php-parser/lib/PhpParser/Node/AttributeGroup.php +5 -7
  66. package/plugins/nikic/php-parser/lib/PhpParser/Node/ClosureUse.php +36 -0
  67. package/plugins/nikic/php-parser/lib/PhpParser/Node/ComplexType.php +1 -2
  68. package/plugins/nikic/php-parser/lib/PhpParser/Node/Const_.php +9 -10
  69. package/plugins/nikic/php-parser/lib/PhpParser/Node/DeclareItem.php +37 -0
  70. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/ArrayDimFetch.php +10 -11
  71. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/ArrayItem.php +4 -34
  72. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/Array_.php +11 -11
  73. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/ArrowFunction.php +33 -28
  74. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/Assign.php +9 -10
  75. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/BitwiseAnd.php +2 -3
  76. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/BitwiseOr.php +2 -3
  77. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/BitwiseXor.php +2 -3
  78. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Coalesce.php +2 -3
  79. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Concat.php +2 -3
  80. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Div.php +2 -3
  81. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Minus.php +2 -3
  82. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Mod.php +2 -3
  83. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Mul.php +2 -3
  84. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Plus.php +2 -3
  85. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Pow.php +2 -3
  86. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/ShiftLeft.php +2 -3
  87. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/ShiftRight.php +2 -3
  88. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp.php +7 -8
  89. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/AssignRef.php +9 -10
  90. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/BitwiseAnd.php +4 -5
  91. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/BitwiseOr.php +4 -5
  92. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/BitwiseXor.php +4 -5
  93. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/BooleanAnd.php +4 -5
  94. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/BooleanOr.php +4 -5
  95. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Coalesce.php +4 -5
  96. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Concat.php +4 -5
  97. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Div.php +4 -5
  98. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Equal.php +4 -5
  99. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Greater.php +4 -5
  100. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/GreaterOrEqual.php +4 -5
  101. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Identical.php +4 -5
  102. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/LogicalAnd.php +4 -5
  103. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/LogicalOr.php +4 -5
  104. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/LogicalXor.php +4 -5
  105. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Minus.php +4 -5
  106. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Mod.php +4 -5
  107. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Mul.php +4 -5
  108. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/NotEqual.php +4 -5
  109. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/NotIdentical.php +4 -5
  110. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Plus.php +4 -5
  111. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Pow.php +4 -5
  112. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/ShiftLeft.php +4 -5
  113. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/ShiftRight.php +4 -5
  114. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Smaller.php +4 -5
  115. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/SmallerOrEqual.php +4 -5
  116. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Spaceship.php +4 -5
  117. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp.php +8 -11
  118. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/BitwiseNot.php +7 -8
  119. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/BooleanNot.php +7 -8
  120. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/CallLike.php +3 -7
  121. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Array_.php +2 -3
  122. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Bool_.php +2 -3
  123. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Double.php +5 -6
  124. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Int_.php +2 -3
  125. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Object_.php +2 -3
  126. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/String_.php +2 -3
  127. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Unset_.php +2 -3
  128. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/Cast.php +5 -6
  129. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/ClassConstFetch.php +10 -10
  130. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/Clone_.php +7 -8
  131. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/Closure.php +33 -26
  132. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/ClosureUse.php +4 -27
  133. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/ConstFetch.php +7 -8
  134. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/Empty_.php +7 -8
  135. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/Error.php +5 -6
  136. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/ErrorSuppress.php +7 -8
  137. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/Eval_.php +7 -8
  138. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/Exit_.php +10 -11
  139. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/FuncCall.php +10 -11
  140. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/Include_.php +13 -14
  141. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/Instanceof_.php +11 -11
  142. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/Isset_.php +7 -8
  143. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/List_.php +12 -8
  144. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/Match_.php +8 -7
  145. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/MethodCall.php +12 -12
  146. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/New_.php +10 -11
  147. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/NullsafeMethodCall.php +12 -12
  148. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/NullsafePropertyFetch.php +10 -10
  149. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/PostDec.php +7 -8
  150. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/PostInc.php +7 -8
  151. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/PreDec.php +6 -7
  152. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/PreInc.php +7 -8
  153. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/Print_.php +7 -8
  154. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/PropertyFetch.php +10 -10
  155. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/ShellExec.php +9 -9
  156. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/StaticCall.php +12 -13
  157. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/StaticPropertyFetch.php +11 -11
  158. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/Ternary.php +12 -13
  159. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/Throw_.php +6 -7
  160. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/UnaryMinus.php +7 -8
  161. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/UnaryPlus.php +7 -8
  162. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/Variable.php +6 -7
  163. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/YieldFrom.php +7 -8
  164. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/Yield_.php +10 -11
  165. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr.php +1 -2
  166. package/plugins/nikic/php-parser/lib/PhpParser/Node/FunctionLike.php +5 -8
  167. package/plugins/nikic/php-parser/lib/PhpParser/Node/Identifier.php +24 -14
  168. package/plugins/nikic/php-parser/lib/PhpParser/Node/InterpolatedStringPart.php +32 -0
  169. package/plugins/nikic/php-parser/lib/PhpParser/Node/IntersectionType.php +6 -9
  170. package/plugins/nikic/php-parser/lib/PhpParser/Node/MatchArm.php +8 -10
  171. package/plugins/nikic/php-parser/lib/PhpParser/Node/Name/FullyQualified.php +8 -9
  172. package/plugins/nikic/php-parser/lib/PhpParser/Node/Name/Relative.php +8 -9
  173. package/plugins/nikic/php-parser/lib/PhpParser/Node/Name.php +78 -54
  174. package/plugins/nikic/php-parser/lib/PhpParser/Node/NullableType.php +11 -10
  175. package/plugins/nikic/php-parser/lib/PhpParser/Node/Param.php +83 -24
  176. package/plugins/nikic/php-parser/lib/PhpParser/Node/PropertyHook.php +105 -0
  177. package/plugins/nikic/php-parser/lib/PhpParser/Node/PropertyItem.php +37 -0
  178. package/plugins/nikic/php-parser/lib/PhpParser/Node/Scalar/DNumber.php +4 -70
  179. package/plugins/nikic/php-parser/lib/PhpParser/Node/Scalar/Encapsed.php +4 -24
  180. package/plugins/nikic/php-parser/lib/PhpParser/Node/Scalar/EncapsedStringPart.php +5 -22
  181. package/plugins/nikic/php-parser/lib/PhpParser/Node/Scalar/Float_.php +78 -0
  182. package/plugins/nikic/php-parser/lib/PhpParser/Node/Scalar/Int_.php +82 -0
  183. package/plugins/nikic/php-parser/lib/PhpParser/Node/Scalar/InterpolatedString.php +34 -0
  184. package/plugins/nikic/php-parser/lib/PhpParser/Node/Scalar/LNumber.php +4 -73
  185. package/plugins/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Class_.php +4 -5
  186. package/plugins/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Dir.php +4 -5
  187. package/plugins/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/File.php +4 -5
  188. package/plugins/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Function_.php +4 -5
  189. package/plugins/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Line.php +4 -5
  190. package/plugins/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Method.php +4 -5
  191. package/plugins/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Namespace_.php +4 -5
  192. package/plugins/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Property.php +15 -0
  193. package/plugins/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Trait_.php +4 -5
  194. package/plugins/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst.php +4 -5
  195. package/plugins/nikic/php-parser/lib/PhpParser/Node/Scalar/String_.php +30 -26
  196. package/plugins/nikic/php-parser/lib/PhpParser/Node/Scalar.php +1 -2
  197. package/plugins/nikic/php-parser/lib/PhpParser/Node/StaticVar.php +39 -0
  198. package/plugins/nikic/php-parser/lib/PhpParser/Node/Stmt/Block.php +29 -0
  199. package/plugins/nikic/php-parser/lib/PhpParser/Node/Stmt/Break_.php +8 -9
  200. package/plugins/nikic/php-parser/lib/PhpParser/Node/Stmt/Case_.php +10 -11
  201. package/plugins/nikic/php-parser/lib/PhpParser/Node/Stmt/Catch_.php +11 -12
  202. package/plugins/nikic/php-parser/lib/PhpParser/Node/Stmt/ClassConst.php +24 -32
  203. package/plugins/nikic/php-parser/lib/PhpParser/Node/Stmt/ClassLike.php +17 -17
  204. package/plugins/nikic/php-parser/lib/PhpParser/Node/Stmt/ClassMethod.php +47 -54
  205. package/plugins/nikic/php-parser/lib/PhpParser/Node/Stmt/Class_.php +46 -89
  206. package/plugins/nikic/php-parser/lib/PhpParser/Node/Stmt/Const_.php +17 -10
  207. package/plugins/nikic/php-parser/lib/PhpParser/Node/Stmt/Continue_.php +8 -9
  208. package/plugins/nikic/php-parser/lib/PhpParser/Node/Stmt/DeclareDeclare.php +5 -26
  209. package/plugins/nikic/php-parser/lib/PhpParser/Node/Stmt/Declare_.php +12 -12
  210. package/plugins/nikic/php-parser/lib/PhpParser/Node/Stmt/Do_.php +9 -10
  211. package/plugins/nikic/php-parser/lib/PhpParser/Node/Stmt/Echo_.php +7 -8
  212. package/plugins/nikic/php-parser/lib/PhpParser/Node/Stmt/ElseIf_.php +9 -10
  213. package/plugins/nikic/php-parser/lib/PhpParser/Node/Stmt/Else_.php +7 -8
  214. package/plugins/nikic/php-parser/lib/PhpParser/Node/Stmt/EnumCase.php +11 -12
  215. package/plugins/nikic/php-parser/lib/PhpParser/Node/Stmt/Enum_.php +17 -13
  216. package/plugins/nikic/php-parser/lib/PhpParser/Node/Stmt/Expression.php +7 -8
  217. package/plugins/nikic/php-parser/lib/PhpParser/Node/Stmt/Finally_.php +7 -8
  218. package/plugins/nikic/php-parser/lib/PhpParser/Node/Stmt/For_.php +19 -15
  219. package/plugins/nikic/php-parser/lib/PhpParser/Node/Stmt/Foreach_.php +20 -17
  220. package/plugins/nikic/php-parser/lib/PhpParser/Node/Stmt/Function_.php +28 -24
  221. package/plugins/nikic/php-parser/lib/PhpParser/Node/Stmt/Global_.php +7 -8
  222. package/plugins/nikic/php-parser/lib/PhpParser/Node/Stmt/Goto_.php +7 -8
  223. package/plugins/nikic/php-parser/lib/PhpParser/Node/Stmt/GroupUse.php +16 -14
  224. package/plugins/nikic/php-parser/lib/PhpParser/Node/Stmt/HaltCompiler.php +7 -8
  225. package/plugins/nikic/php-parser/lib/PhpParser/Node/Stmt/If_.php +18 -15
  226. package/plugins/nikic/php-parser/lib/PhpParser/Node/Stmt/InlineHTML.php +7 -8
  227. package/plugins/nikic/php-parser/lib/PhpParser/Node/Stmt/Interface_.php +13 -10
  228. package/plugins/nikic/php-parser/lib/PhpParser/Node/Stmt/Label.php +7 -8
  229. package/plugins/nikic/php-parser/lib/PhpParser/Node/Stmt/Namespace_.php +11 -12
  230. package/plugins/nikic/php-parser/lib/PhpParser/Node/Stmt/Nop.php +4 -5
  231. package/plugins/nikic/php-parser/lib/PhpParser/Node/Stmt/Property.php +68 -38
  232. package/plugins/nikic/php-parser/lib/PhpParser/Node/Stmt/PropertyProperty.php +5 -26
  233. package/plugins/nikic/php-parser/lib/PhpParser/Node/Stmt/Return_.php +8 -9
  234. package/plugins/nikic/php-parser/lib/PhpParser/Node/Stmt/StaticVar.php +4 -30
  235. package/plugins/nikic/php-parser/lib/PhpParser/Node/Stmt/Static_.php +8 -8
  236. package/plugins/nikic/php-parser/lib/PhpParser/Node/Stmt/Switch_.php +9 -10
  237. package/plugins/nikic/php-parser/lib/PhpParser/Node/Stmt/TraitUse.php +8 -9
  238. package/plugins/nikic/php-parser/lib/PhpParser/Node/Stmt/TraitUseAdaptation/Alias.php +12 -13
  239. package/plugins/nikic/php-parser/lib/PhpParser/Node/Stmt/TraitUseAdaptation/Precedence.php +9 -10
  240. package/plugins/nikic/php-parser/lib/PhpParser/Node/Stmt/TraitUseAdaptation.php +3 -4
  241. package/plugins/nikic/php-parser/lib/PhpParser/Node/Stmt/Trait_.php +10 -8
  242. package/plugins/nikic/php-parser/lib/PhpParser/Node/Stmt/TryCatch.php +11 -12
  243. package/plugins/nikic/php-parser/lib/PhpParser/Node/Stmt/Unset_.php +7 -8
  244. package/plugins/nikic/php-parser/lib/PhpParser/Node/Stmt/UseUse.php +5 -44
  245. package/plugins/nikic/php-parser/lib/PhpParser/Node/Stmt/Use_.php +16 -16
  246. package/plugins/nikic/php-parser/lib/PhpParser/Node/Stmt/While_.php +9 -10
  247. package/plugins/nikic/php-parser/lib/PhpParser/Node/Stmt.php +1 -2
  248. package/plugins/nikic/php-parser/lib/PhpParser/Node/UnionType.php +7 -8
  249. package/plugins/nikic/php-parser/lib/PhpParser/Node/UseItem.php +55 -0
  250. package/plugins/nikic/php-parser/lib/PhpParser/Node/VarLikeIdentifier.php +2 -3
  251. package/plugins/nikic/php-parser/lib/PhpParser/Node/VariadicPlaceholder.php +2 -2
  252. package/plugins/nikic/php-parser/lib/PhpParser/Node.php +28 -29
  253. package/plugins/nikic/php-parser/lib/PhpParser/NodeAbstract.php +23 -20
  254. package/plugins/nikic/php-parser/lib/PhpParser/NodeDumper.php +177 -84
  255. package/plugins/nikic/php-parser/lib/PhpParser/NodeFinder.php +28 -19
  256. package/plugins/nikic/php-parser/lib/PhpParser/NodeTraverser.php +156 -160
  257. package/plugins/nikic/php-parser/lib/PhpParser/NodeTraverserInterface.php +4 -7
  258. package/plugins/nikic/php-parser/lib/PhpParser/NodeVisitor/CloningVisitor.php +1 -2
  259. package/plugins/nikic/php-parser/lib/PhpParser/NodeVisitor/CommentAnnotatingVisitor.php +82 -0
  260. package/plugins/nikic/php-parser/lib/PhpParser/NodeVisitor/FindingVisitor.php +6 -7
  261. package/plugins/nikic/php-parser/lib/PhpParser/NodeVisitor/FirstFindingVisitor.php +6 -7
  262. package/plugins/nikic/php-parser/lib/PhpParser/NodeVisitor/NameResolver.php +37 -28
  263. package/plugins/nikic/php-parser/lib/PhpParser/NodeVisitor/NodeConnectingVisitor.php +29 -8
  264. package/plugins/nikic/php-parser/lib/PhpParser/NodeVisitor/ParentConnectingVisitor.php +23 -13
  265. package/plugins/nikic/php-parser/lib/PhpParser/NodeVisitor.php +59 -7
  266. package/plugins/nikic/php-parser/lib/PhpParser/NodeVisitorAbstract.php +1 -2
  267. package/plugins/nikic/php-parser/lib/PhpParser/Parser/Php7.php +2034 -2141
  268. package/plugins/nikic/php-parser/lib/PhpParser/Parser/Php8.php +2814 -0
  269. package/plugins/nikic/php-parser/lib/PhpParser/Parser.php +9 -3
  270. package/plugins/nikic/php-parser/lib/PhpParser/ParserAbstract.php +503 -269
  271. package/plugins/nikic/php-parser/lib/PhpParser/ParserFactory.php +15 -49
  272. package/plugins/nikic/php-parser/lib/PhpParser/PhpVersion.php +171 -0
  273. package/plugins/nikic/php-parser/lib/PhpParser/PrettyPrinter/Standard.php +428 -339
  274. package/plugins/nikic/php-parser/lib/PhpParser/PrettyPrinter.php +51 -0
  275. package/plugins/nikic/php-parser/lib/PhpParser/PrettyPrinterAbstract.php +563 -445
  276. package/plugins/nikic/php-parser/lib/PhpParser/Token.php +18 -0
  277. package/plugins/nikic/php-parser/lib/PhpParser/compatibility_tokens.php +68 -0
  278. package/plugins/rubyastgen/Gemfile +3 -2
  279. package/plugins/rubyastgen/Gemfile.lock +10 -5
  280. package/plugins/rubyastgen/bundle/bundler/setup.rb +4 -2
  281. package/plugins/rubyastgen/bundle/ruby/3.4.0/bin/bundle +29 -0
  282. package/plugins/rubyastgen/bundle/ruby/3.4.0/bin/bundler +29 -0
  283. package/plugins/rubyastgen/bundle/ruby/3.4.0/bundler/gems/{ruby_ast_gen-2a9186207494 → ruby_ast_gen-8738b155eb4f}/Gemfile +2 -1
  284. package/plugins/rubyastgen/bundle/ruby/3.4.0/bundler/gems/{ruby_ast_gen-2a9186207494 → ruby_ast_gen-8738b155eb4f}/README.md +7 -4
  285. package/plugins/rubyastgen/bundle/ruby/3.4.0/bundler/gems/ruby_ast_gen-8738b155eb4f/bin/console +11 -0
  286. package/plugins/rubyastgen/bundle/ruby/3.4.0/bundler/gems/ruby_ast_gen-8738b155eb4f/exe/ruby_ast_gen +60 -0
  287. package/plugins/rubyastgen/bundle/ruby/3.4.0/bundler/gems/{ruby_ast_gen-2a9186207494 → ruby_ast_gen-8738b155eb4f}/lib/ruby_ast_gen/node_handling.rb +49 -31
  288. package/plugins/rubyastgen/bundle/ruby/3.4.0/bundler/gems/{ruby_ast_gen-2a9186207494 → ruby_ast_gen-8738b155eb4f}/lib/ruby_ast_gen/version.rb +1 -1
  289. package/plugins/rubyastgen/bundle/ruby/3.4.0/bundler/gems/{ruby_ast_gen-2a9186207494 → ruby_ast_gen-8738b155eb4f}/lib/ruby_ast_gen.rb +24 -10
  290. package/plugins/rubyastgen/bundle/ruby/3.4.0/bundler/gems/{ruby_ast_gen-2a9186207494 → ruby_ast_gen-8738b155eb4f}/ruby_ast_gen.gemspec +4 -4
  291. package/plugins/rubyastgen/bundle/ruby/3.4.0/bundler/gems/ruby_ast_gen-8738b155eb4f/spec/ruby_ast_gen_spec.rb +299 -0
  292. package/plugins/rubyastgen/bundle/ruby/3.4.0/bundler/gems/{ruby_ast_gen-2a9186207494 → ruby_ast_gen-8738b155eb4f}/update_version.rb +6 -5
  293. package/plugins/rubyastgen/bundle/ruby/3.4.0/extensions/x86_64-linux/3.4.0/prism-1.4.0/gem.build_complete +0 -0
  294. package/plugins/rubyastgen/bundle/ruby/3.4.0/extensions/x86_64-linux/3.4.0/prism-1.4.0/gem_make.out +44 -0
  295. package/plugins/rubyastgen/bundle/ruby/3.4.0/extensions/x86_64-linux/3.4.0/prism-1.4.0/mkmf.log +74 -0
  296. package/plugins/rubyastgen/bundle/ruby/3.4.0/extensions/x86_64-linux/3.4.0/prism-1.4.0/prism/prism.so +0 -0
  297. package/plugins/rubyastgen/bundle/ruby/3.4.0/extensions/x86_64-linux/3.4.0/racc-1.8.1/gem_make.out +6 -6
  298. package/plugins/rubyastgen/bundle/ruby/3.4.0/extensions/x86_64-linux/3.4.0/racc-1.8.1/racc/cparse.so +0 -0
  299. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/CHANGELOG.md +5239 -0
  300. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/LICENSE.md +22 -0
  301. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/README.md +58 -0
  302. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/bundler.gemspec +46 -0
  303. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/exe/bundle +29 -0
  304. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/exe/bundler +4 -0
  305. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/.document +1 -0
  306. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/build_metadata.rb +45 -0
  307. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/capistrano.rb +22 -0
  308. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/checksum.rb +264 -0
  309. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/ci_detector.rb +75 -0
  310. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/cli/add.rb +49 -0
  311. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/cli/binstubs.rb +57 -0
  312. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/cli/cache.rb +43 -0
  313. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/cli/check.rb +40 -0
  314. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/cli/clean.rb +25 -0
  315. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/cli/common.rb +138 -0
  316. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/cli/config.rb +204 -0
  317. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/cli/console.rb +42 -0
  318. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/cli/doctor.rb +161 -0
  319. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/cli/exec.rb +89 -0
  320. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/cli/fund.rb +36 -0
  321. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/cli/gem.rb +467 -0
  322. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/cli/info.rb +83 -0
  323. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/cli/init.rb +51 -0
  324. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/cli/inject.rb +60 -0
  325. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/cli/install.rb +199 -0
  326. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/cli/issue.rb +41 -0
  327. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/cli/list.rb +66 -0
  328. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/cli/lock.rb +94 -0
  329. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/cli/open.rb +29 -0
  330. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/cli/outdated.rb +297 -0
  331. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/cli/platform.rb +48 -0
  332. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/cli/plugin.rb +35 -0
  333. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/cli/pristine.rb +60 -0
  334. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/cli/remove.rb +17 -0
  335. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/cli/show.rb +75 -0
  336. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/cli/update.rb +123 -0
  337. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/cli/viz.rb +31 -0
  338. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/cli.rb +799 -0
  339. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/compact_index_client/cache.rb +96 -0
  340. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/compact_index_client/cache_file.rb +148 -0
  341. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/compact_index_client/parser.rb +84 -0
  342. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/compact_index_client/updater.rb +105 -0
  343. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/compact_index_client.rb +97 -0
  344. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/constants.rb +14 -0
  345. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/current_ruby.rb +82 -0
  346. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/definition.rb +1170 -0
  347. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/dependency.rb +151 -0
  348. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/deployment.rb +69 -0
  349. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/deprecate.rb +44 -0
  350. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/digest.rb +71 -0
  351. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/dsl.rb +638 -0
  352. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/endpoint_specification.rb +174 -0
  353. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/env.rb +148 -0
  354. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/environment_preserver.rb +68 -0
  355. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/errors.rb +281 -0
  356. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/feature_flag.rb +50 -0
  357. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/fetcher/base.rb +52 -0
  358. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/fetcher/compact_index.rb +120 -0
  359. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/fetcher/dependency.rb +78 -0
  360. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/fetcher/downloader.rb +91 -0
  361. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/fetcher/gem_remote_fetcher.rb +16 -0
  362. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/fetcher/index.rb +25 -0
  363. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/fetcher.rb +331 -0
  364. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/force_platform.rb +16 -0
  365. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/friendly_errors.rb +126 -0
  366. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/gem_helper.rb +237 -0
  367. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/gem_helpers.rb +144 -0
  368. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/gem_tasks.rb +7 -0
  369. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/gem_version_promoter.rb +147 -0
  370. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/graph.rb +152 -0
  371. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/index.rb +205 -0
  372. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/injector.rb +285 -0
  373. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/inline.rb +98 -0
  374. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/installer/gem_installer.rb +85 -0
  375. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/installer/parallel_installer.rb +203 -0
  376. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/installer/standalone.rb +113 -0
  377. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/installer.rb +243 -0
  378. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/lazy_specification.rb +234 -0
  379. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/lockfile_generator.rb +104 -0
  380. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/lockfile_parser.rb +300 -0
  381. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/man/.document +1 -0
  382. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/man/bundle-add.1 +76 -0
  383. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/man/bundle-add.1.ronn +87 -0
  384. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/man/bundle-binstubs.1 +33 -0
  385. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/man/bundle-binstubs.1.ronn +44 -0
  386. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/man/bundle-cache.1 +68 -0
  387. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/man/bundle-cache.1.ronn +108 -0
  388. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/man/bundle-check.1 +24 -0
  389. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/man/bundle-check.1.ronn +31 -0
  390. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/man/bundle-clean.1 +17 -0
  391. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/man/bundle-clean.1.ronn +18 -0
  392. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/man/bundle-config.1 +317 -0
  393. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/man/bundle-config.1.ronn +408 -0
  394. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/man/bundle-console.1 +33 -0
  395. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/man/bundle-console.1.ronn +39 -0
  396. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/man/bundle-doctor.1 +30 -0
  397. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/man/bundle-doctor.1.ronn +33 -0
  398. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/man/bundle-env.1 +9 -0
  399. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/man/bundle-env.1.ronn +10 -0
  400. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/man/bundle-exec.1 +107 -0
  401. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/man/bundle-exec.1.ronn +154 -0
  402. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/man/bundle-fund.1 +22 -0
  403. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/man/bundle-fund.1.ronn +25 -0
  404. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/man/bundle-gem.1 +87 -0
  405. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/man/bundle-gem.1.ronn +149 -0
  406. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/man/bundle-help.1 +9 -0
  407. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/man/bundle-help.1.ronn +12 -0
  408. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/man/bundle-info.1 +17 -0
  409. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/man/bundle-info.1.ronn +21 -0
  410. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/man/bundle-init.1 +20 -0
  411. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/man/bundle-init.1.ronn +32 -0
  412. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/man/bundle-inject.1 +31 -0
  413. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/man/bundle-inject.1.ronn +32 -0
  414. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/man/bundle-install.1 +218 -0
  415. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/man/bundle-install.1.ronn +387 -0
  416. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/man/bundle-issue.1 +45 -0
  417. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/man/bundle-issue.1.ronn +37 -0
  418. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/man/bundle-licenses.1 +9 -0
  419. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/man/bundle-licenses.1.ronn +10 -0
  420. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/man/bundle-list.1 +35 -0
  421. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/man/bundle-list.1.ronn +36 -0
  422. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/man/bundle-lock.1 +75 -0
  423. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/man/bundle-lock.1.ronn +115 -0
  424. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/man/bundle-open.1 +32 -0
  425. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/man/bundle-open.1.ronn +28 -0
  426. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/man/bundle-outdated.1 +103 -0
  427. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/man/bundle-outdated.1.ronn +110 -0
  428. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/man/bundle-platform.1 +49 -0
  429. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/man/bundle-platform.1.ronn +49 -0
  430. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/man/bundle-plugin.1 +58 -0
  431. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/man/bundle-plugin.1.ronn +63 -0
  432. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/man/bundle-pristine.1 +23 -0
  433. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/man/bundle-pristine.1.ronn +34 -0
  434. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/man/bundle-remove.1 +21 -0
  435. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/man/bundle-remove.1.ronn +23 -0
  436. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/man/bundle-show.1 +19 -0
  437. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/man/bundle-show.1.ronn +25 -0
  438. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/man/bundle-update.1 +281 -0
  439. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/man/bundle-update.1.ronn +359 -0
  440. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/man/bundle-version.1 +22 -0
  441. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/man/bundle-version.1.ronn +24 -0
  442. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/man/bundle-viz.1 +30 -0
  443. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/man/bundle-viz.1.ronn +36 -0
  444. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/man/bundle.1 +102 -0
  445. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/man/bundle.1.ronn +116 -0
  446. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/man/gemfile.5 +472 -0
  447. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/man/gemfile.5.ronn +558 -0
  448. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/man/index.txt +33 -0
  449. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/match_metadata.rb +30 -0
  450. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/match_platform.rb +23 -0
  451. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/match_remote_metadata.rb +29 -0
  452. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/materialization.rb +59 -0
  453. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/mirror.rb +221 -0
  454. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/plugin/api/source.rb +322 -0
  455. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/plugin/api.rb +81 -0
  456. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/plugin/dsl.rb +53 -0
  457. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/plugin/events.rb +85 -0
  458. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/plugin/index.rb +197 -0
  459. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/plugin/installer/git.rb +34 -0
  460. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/plugin/installer/path.rb +26 -0
  461. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/plugin/installer/rubygems.rb +19 -0
  462. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/plugin/installer.rb +132 -0
  463. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/plugin/source_list.rb +31 -0
  464. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/plugin.rb +378 -0
  465. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/process_lock.rb +20 -0
  466. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/remote_specification.rb +126 -0
  467. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/resolver/base.rb +118 -0
  468. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/resolver/candidate.rb +85 -0
  469. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/resolver/incompatibility.rb +15 -0
  470. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/resolver/package.rb +94 -0
  471. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/resolver/root.rb +25 -0
  472. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/resolver/spec_group.rb +74 -0
  473. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/resolver/strategy.rb +40 -0
  474. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/resolver.rb +522 -0
  475. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/retry.rb +66 -0
  476. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/ruby_dsl.rb +62 -0
  477. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/ruby_version.rb +137 -0
  478. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/rubygems_ext.rb +485 -0
  479. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/rubygems_gem_installer.rb +172 -0
  480. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/rubygems_integration.rb +455 -0
  481. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/runtime.rb +320 -0
  482. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/safe_marshal.rb +31 -0
  483. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/self_manager.rb +206 -0
  484. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/settings/validator.rb +102 -0
  485. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/settings.rb +599 -0
  486. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/setup.rb +39 -0
  487. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/shared_helpers.rb +398 -0
  488. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/similarity_detector.rb +63 -0
  489. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/source/gemspec.rb +15 -0
  490. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/source/git/git_proxy.rb +472 -0
  491. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/source/git.rb +452 -0
  492. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/source/metadata.rb +63 -0
  493. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/source/path/installer.rb +53 -0
  494. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/source/path.rb +250 -0
  495. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/source/rubygems/remote.rb +76 -0
  496. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/source/rubygems.rb +522 -0
  497. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/source/rubygems_aggregate.rb +68 -0
  498. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/source.rb +118 -0
  499. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/source_list.rb +273 -0
  500. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/source_map.rb +71 -0
  501. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/spec_set.rb +367 -0
  502. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/stub_specification.rb +146 -0
  503. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/templates/.document +1 -0
  504. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/templates/Executable +27 -0
  505. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/templates/Executable.bundler +109 -0
  506. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/templates/Executable.standalone +14 -0
  507. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/templates/Gemfile +5 -0
  508. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/templates/newgem/CHANGELOG.md.tt +5 -0
  509. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/templates/newgem/CODE_OF_CONDUCT.md.tt +132 -0
  510. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/templates/newgem/Cargo.toml.tt +7 -0
  511. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/templates/newgem/Gemfile.tt +24 -0
  512. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/templates/newgem/LICENSE.txt.tt +21 -0
  513. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/templates/newgem/README.md.tt +49 -0
  514. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/templates/newgem/Rakefile.tt +67 -0
  515. package/plugins/rubyastgen/bundle/ruby/3.4.0/{bundler/gems/ruby_ast_gen-2a9186207494/bin/console → gems/bundler-2.6.7/lib/bundler/templates/newgem/bin/console.tt} +1 -1
  516. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/{ostruct-0.6.1/bin/setup → bundler-2.6.7/lib/bundler/templates/newgem/bin/setup.tt} +0 -0
  517. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/templates/newgem/circleci/config.yml.tt +25 -0
  518. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/templates/newgem/exe/newgem.tt +3 -0
  519. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/templates/newgem/ext/newgem/Cargo.toml.tt +15 -0
  520. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/templates/newgem/ext/newgem/extconf-c.rb.tt +10 -0
  521. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/templates/newgem/ext/newgem/extconf-rust.rb.tt +6 -0
  522. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/templates/newgem/ext/newgem/newgem.c.tt +9 -0
  523. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/templates/newgem/ext/newgem/newgem.h.tt +6 -0
  524. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/templates/newgem/ext/newgem/src/lib.rs.tt +12 -0
  525. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/templates/newgem/github/workflows/main.yml.tt +37 -0
  526. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/templates/newgem/gitignore.tt +23 -0
  527. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/templates/newgem/gitlab-ci.yml.tt +18 -0
  528. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/templates/newgem/lib/newgem/version.rb.tt +9 -0
  529. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/templates/newgem/lib/newgem.rb.tt +15 -0
  530. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/templates/newgem/newgem.gemspec.tt +52 -0
  531. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/templates/newgem/rspec.tt +3 -0
  532. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/templates/newgem/rubocop.yml.tt +8 -0
  533. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/templates/newgem/sig/newgem.rbs.tt +8 -0
  534. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/templates/newgem/spec/newgem_spec.rb.tt +11 -0
  535. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/templates/newgem/spec/spec_helper.rb.tt +15 -0
  536. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/templates/newgem/standard.yml.tt +3 -0
  537. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/templates/newgem/test/minitest/test_helper.rb.tt +6 -0
  538. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/templates/newgem/test/minitest/test_newgem.rb.tt +13 -0
  539. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/templates/newgem/test/test-unit/newgem_test.rb.tt +15 -0
  540. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/templates/newgem/test/test-unit/test_helper.rb.tt +6 -0
  541. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/ui/rg_proxy.rb +19 -0
  542. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/ui/shell.rb +187 -0
  543. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/ui/silent.rb +96 -0
  544. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/ui.rb +9 -0
  545. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/uri_credentials_filter.rb +43 -0
  546. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/uri_normalizer.rb +23 -0
  547. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/vendor/.document +1 -0
  548. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/vendor/connection_pool/.document +1 -0
  549. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/vendor/connection_pool/LICENSE +20 -0
  550. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/vendor/connection_pool/lib/connection_pool/timed_stack.rb +224 -0
  551. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/vendor/connection_pool/lib/connection_pool/version.rb +3 -0
  552. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/vendor/connection_pool/lib/connection_pool/wrapper.rb +56 -0
  553. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/vendor/connection_pool/lib/connection_pool.rb +186 -0
  554. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/vendor/fileutils/.document +1 -0
  555. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/vendor/fileutils/lib/fileutils.rb +2696 -0
  556. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/vendor/net-http-persistent/.document +1 -0
  557. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/vendor/net-http-persistent/README.rdoc +82 -0
  558. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/connection.rb +41 -0
  559. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/pool.rb +65 -0
  560. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/timed_stack_multi.rb +79 -0
  561. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +1111 -0
  562. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/vendor/pub_grub/.document +1 -0
  563. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/vendor/pub_grub/LICENSE.txt +21 -0
  564. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/vendor/pub_grub/lib/pub_grub/assignment.rb +20 -0
  565. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/vendor/pub_grub/lib/pub_grub/basic_package_source.rb +169 -0
  566. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/vendor/pub_grub/lib/pub_grub/failure_writer.rb +182 -0
  567. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/vendor/pub_grub/lib/pub_grub/incompatibility.rb +150 -0
  568. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/vendor/pub_grub/lib/pub_grub/package.rb +43 -0
  569. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/vendor/pub_grub/lib/pub_grub/partial_solution.rb +121 -0
  570. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/vendor/pub_grub/lib/pub_grub/rubygems.rb +45 -0
  571. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/vendor/pub_grub/lib/pub_grub/solve_failure.rb +19 -0
  572. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/vendor/pub_grub/lib/pub_grub/static_package_source.rb +61 -0
  573. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/vendor/pub_grub/lib/pub_grub/strategy.rb +42 -0
  574. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/vendor/pub_grub/lib/pub_grub/term.rb +105 -0
  575. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/vendor/pub_grub/lib/pub_grub/version.rb +3 -0
  576. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/vendor/pub_grub/lib/pub_grub/version_constraint.rb +129 -0
  577. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/vendor/pub_grub/lib/pub_grub/version_range.rb +423 -0
  578. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/vendor/pub_grub/lib/pub_grub/version_solver.rb +236 -0
  579. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/vendor/pub_grub/lib/pub_grub/version_union.rb +178 -0
  580. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/vendor/pub_grub/lib/pub_grub.rb +31 -0
  581. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/vendor/securerandom/.document +1 -0
  582. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/vendor/securerandom/COPYING +56 -0
  583. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/vendor/securerandom/lib/securerandom.rb +102 -0
  584. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/vendor/thor/.document +1 -0
  585. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/vendor/thor/LICENSE.md +20 -0
  586. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/vendor/thor/lib/thor/actions/create_file.rb +105 -0
  587. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/vendor/thor/lib/thor/actions/create_link.rb +61 -0
  588. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/vendor/thor/lib/thor/actions/directory.rb +108 -0
  589. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/vendor/thor/lib/thor/actions/empty_directory.rb +143 -0
  590. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/vendor/thor/lib/thor/actions/file_manipulation.rb +371 -0
  591. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/vendor/thor/lib/thor/actions/inject_into_file.rb +130 -0
  592. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/vendor/thor/lib/thor/actions.rb +340 -0
  593. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/vendor/thor/lib/thor/base.rb +825 -0
  594. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/vendor/thor/lib/thor/command.rb +151 -0
  595. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/vendor/thor/lib/thor/core_ext/hash_with_indifferent_access.rb +107 -0
  596. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/vendor/thor/lib/thor/error.rb +106 -0
  597. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/vendor/thor/lib/thor/group.rb +292 -0
  598. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/vendor/thor/lib/thor/invocation.rb +178 -0
  599. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/vendor/thor/lib/thor/line_editor/basic.rb +37 -0
  600. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/vendor/thor/lib/thor/line_editor/readline.rb +88 -0
  601. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/vendor/thor/lib/thor/line_editor.rb +17 -0
  602. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/vendor/thor/lib/thor/nested_context.rb +29 -0
  603. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/vendor/thor/lib/thor/parser/argument.rb +86 -0
  604. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/vendor/thor/lib/thor/parser/arguments.rb +195 -0
  605. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/vendor/thor/lib/thor/parser/option.rb +178 -0
  606. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/vendor/thor/lib/thor/parser/options.rb +294 -0
  607. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/vendor/thor/lib/thor/parser.rb +4 -0
  608. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/vendor/thor/lib/thor/rake_compat.rb +72 -0
  609. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/vendor/thor/lib/thor/runner.rb +335 -0
  610. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/vendor/thor/lib/thor/shell/basic.rb +388 -0
  611. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/vendor/thor/lib/thor/shell/color.rb +112 -0
  612. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/vendor/thor/lib/thor/shell/column_printer.rb +29 -0
  613. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/vendor/thor/lib/thor/shell/html.rb +81 -0
  614. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/vendor/thor/lib/thor/shell/table_printer.rb +118 -0
  615. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/vendor/thor/lib/thor/shell/terminal.rb +42 -0
  616. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/vendor/thor/lib/thor/shell/wrapped_printer.rb +38 -0
  617. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/vendor/thor/lib/thor/shell.rb +81 -0
  618. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/vendor/thor/lib/thor/util.rb +285 -0
  619. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/vendor/thor/lib/thor/version.rb +3 -0
  620. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/vendor/thor/lib/thor.rb +674 -0
  621. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/vendor/tsort/.document +1 -0
  622. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/vendor/tsort/LICENSE.txt +22 -0
  623. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/vendor/tsort/lib/tsort.rb +455 -0
  624. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/vendor/uri/.document +1 -0
  625. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/vendor/uri/COPYING +56 -0
  626. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/vendor/uri/lib/uri/common.rb +880 -0
  627. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/vendor/uri/lib/uri/file.rb +100 -0
  628. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/vendor/uri/lib/uri/ftp.rb +267 -0
  629. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/vendor/uri/lib/uri/generic.rb +1579 -0
  630. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/vendor/uri/lib/uri/http.rb +125 -0
  631. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/vendor/uri/lib/uri/https.rb +23 -0
  632. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/vendor/uri/lib/uri/ldap.rb +261 -0
  633. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/vendor/uri/lib/uri/ldaps.rb +22 -0
  634. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/vendor/uri/lib/uri/mailto.rb +293 -0
  635. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/vendor/uri/lib/uri/rfc2396_parser.rb +546 -0
  636. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/vendor/uri/lib/uri/rfc3986_parser.rb +206 -0
  637. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/vendor/uri/lib/uri/version.rb +6 -0
  638. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/vendor/uri/lib/uri/ws.rb +83 -0
  639. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/vendor/uri/lib/uri/wss.rb +23 -0
  640. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/vendor/uri/lib/uri.rb +104 -0
  641. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/vendored_fileutils.rb +4 -0
  642. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/vendored_net_http.rb +23 -0
  643. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/vendored_persistent.rb +11 -0
  644. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/vendored_pub_grub.rb +4 -0
  645. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/vendored_securerandom.rb +12 -0
  646. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/vendored_thor.rb +8 -0
  647. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/vendored_timeout.rb +12 -0
  648. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/vendored_tsort.rb +4 -0
  649. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/vendored_uri.rb +21 -0
  650. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/version.rb +13 -0
  651. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/vlad.rb +17 -0
  652. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/worker.rb +117 -0
  653. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler/yaml_serializer.rb +98 -0
  654. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/bundler-2.6.7/lib/bundler.rb +701 -0
  655. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/ostruct-0.6.3/COPYING +56 -0
  656. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/ostruct-0.6.3/bin/setup +8 -0
  657. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/{ostruct-0.6.1 → ostruct-0.6.3}/lib/ostruct.rb +5 -2
  658. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/{ostruct-0.6.1 → ostruct-0.6.3}/ostruct.gemspec +2 -0
  659. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/prism-1.4.0/BSDmakefile +58 -0
  660. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/prism-1.4.0/CHANGELOG.md +684 -0
  661. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/prism-1.4.0/CODE_OF_CONDUCT.md +76 -0
  662. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/prism-1.4.0/CONTRIBUTING.md +58 -0
  663. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/prism-1.4.0/LICENSE.md +7 -0
  664. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/prism-1.4.0/Makefile +108 -0
  665. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/prism-1.4.0/README.md +141 -0
  666. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/prism-1.4.0/config.yml +4486 -0
  667. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/prism-1.4.0/docs/build_system.md +119 -0
  668. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/prism-1.4.0/docs/configuration.md +68 -0
  669. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/prism-1.4.0/docs/cruby_compilation.md +27 -0
  670. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/prism-1.4.0/docs/design.md +53 -0
  671. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/prism-1.4.0/docs/encoding.md +121 -0
  672. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/prism-1.4.0/docs/fuzzing.md +88 -0
  673. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/prism-1.4.0/docs/heredocs.md +36 -0
  674. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/prism-1.4.0/docs/javascript.md +118 -0
  675. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/prism-1.4.0/docs/local_variable_depth.md +229 -0
  676. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/prism-1.4.0/docs/mapping.md +117 -0
  677. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/prism-1.4.0/docs/parser_translation.md +39 -0
  678. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/prism-1.4.0/docs/parsing_rules.md +22 -0
  679. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/prism-1.4.0/docs/releasing.md +96 -0
  680. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/prism-1.4.0/docs/relocation.md +34 -0
  681. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/prism-1.4.0/docs/ripper_translation.md +72 -0
  682. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/prism-1.4.0/docs/ruby_api.md +44 -0
  683. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/prism-1.4.0/docs/ruby_parser_translation.md +19 -0
  684. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/prism-1.4.0/docs/serialization.md +233 -0
  685. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/prism-1.4.0/docs/testing.md +55 -0
  686. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/prism-1.4.0/ext/prism/Makefile +273 -0
  687. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/prism-1.4.0/ext/prism/api_node.c +6939 -0
  688. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/prism-1.4.0/ext/prism/api_pack.c +276 -0
  689. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/prism-1.4.0/ext/prism/extconf.rb +127 -0
  690. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/prism-1.4.0/ext/prism/extension.c +1406 -0
  691. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/prism-1.4.0/ext/prism/extension.h +19 -0
  692. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/prism-1.4.0/include/prism/ast.h +7964 -0
  693. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/prism-1.4.0/include/prism/defines.h +260 -0
  694. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/prism-1.4.0/include/prism/diagnostic.h +451 -0
  695. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/prism-1.4.0/include/prism/encoding.h +283 -0
  696. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/prism-1.4.0/include/prism/node.h +129 -0
  697. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/prism-1.4.0/include/prism/options.h +442 -0
  698. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/prism-1.4.0/include/prism/pack.h +163 -0
  699. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/prism-1.4.0/include/prism/parser.h +933 -0
  700. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/prism-1.4.0/include/prism/prettyprint.h +34 -0
  701. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/prism-1.4.0/include/prism/regexp.h +43 -0
  702. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/prism-1.4.0/include/prism/static_literals.h +121 -0
  703. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/prism-1.4.0/include/prism/util/pm_buffer.h +228 -0
  704. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/prism-1.4.0/include/prism/util/pm_char.h +204 -0
  705. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/prism-1.4.0/include/prism/util/pm_constant_pool.h +218 -0
  706. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/prism-1.4.0/include/prism/util/pm_integer.h +126 -0
  707. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/prism-1.4.0/include/prism/util/pm_list.h +97 -0
  708. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/prism-1.4.0/include/prism/util/pm_memchr.h +29 -0
  709. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/prism-1.4.0/include/prism/util/pm_newline_list.h +113 -0
  710. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/prism-1.4.0/include/prism/util/pm_string.h +190 -0
  711. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/prism-1.4.0/include/prism/util/pm_strncasecmp.h +32 -0
  712. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/prism-1.4.0/include/prism/util/pm_strpbrk.h +46 -0
  713. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/prism-1.4.0/include/prism/version.h +29 -0
  714. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/prism-1.4.0/include/prism.h +383 -0
  715. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/prism-1.4.0/lib/prism/compiler.rb +496 -0
  716. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/prism-1.4.0/lib/prism/desugar_compiler.rb +391 -0
  717. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/prism-1.4.0/lib/prism/dispatcher.rb +2194 -0
  718. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/prism-1.4.0/lib/prism/dot_visitor.rb +4758 -0
  719. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/prism-1.4.0/lib/prism/dsl.rb +1000 -0
  720. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/prism-1.4.0/lib/prism/ffi.rb +560 -0
  721. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/prism-1.4.0/lib/prism/inspect_visitor.rb +2389 -0
  722. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/prism-1.4.0/lib/prism/lex_compat.rb +927 -0
  723. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/prism-1.4.0/lib/prism/mutation_compiler.rb +769 -0
  724. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/prism-1.4.0/lib/prism/node.rb +18645 -0
  725. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/prism-1.4.0/lib/prism/node_ext.rb +508 -0
  726. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/prism-1.4.0/lib/prism/pack.rb +228 -0
  727. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/prism-1.4.0/lib/prism/parse_result/comments.rb +187 -0
  728. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/prism-1.4.0/lib/prism/parse_result/errors.rb +65 -0
  729. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/prism-1.4.0/lib/prism/parse_result/newlines.rb +154 -0
  730. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/prism-1.4.0/lib/prism/parse_result.rb +910 -0
  731. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/prism-1.4.0/lib/prism/pattern.rb +268 -0
  732. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/prism-1.4.0/lib/prism/polyfill/append_as_bytes.rb +15 -0
  733. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/prism-1.4.0/lib/prism/polyfill/byteindex.rb +13 -0
  734. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/prism-1.4.0/lib/prism/polyfill/unpack1.rb +14 -0
  735. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/prism-1.4.0/lib/prism/prism.so +0 -0
  736. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/prism-1.4.0/lib/prism/reflection.rb +413 -0
  737. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/prism-1.4.0/lib/prism/relocation.rb +504 -0
  738. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/prism-1.4.0/lib/prism/serialize.rb +2392 -0
  739. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/prism-1.4.0/lib/prism/string_query.rb +30 -0
  740. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/prism-1.4.0/lib/prism/translation/parser/builder.rb +61 -0
  741. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/prism-1.4.0/lib/prism/translation/parser/compiler.rb +2212 -0
  742. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/prism-1.4.0/lib/prism/translation/parser/lexer.rb +812 -0
  743. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/prism-1.4.0/lib/prism/translation/parser.rb +355 -0
  744. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/prism-1.4.0/lib/prism/translation/parser33.rb +12 -0
  745. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/prism-1.4.0/lib/prism/translation/parser34.rb +12 -0
  746. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/prism-1.4.0/lib/prism/translation/parser35.rb +12 -0
  747. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/prism-1.4.0/lib/prism/translation/ripper/sexp.rb +125 -0
  748. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/prism-1.4.0/lib/prism/translation/ripper/shim.rb +5 -0
  749. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/prism-1.4.0/lib/prism/translation/ripper.rb +3458 -0
  750. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/prism-1.4.0/lib/prism/translation/ruby_parser.rb +1646 -0
  751. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/prism-1.4.0/lib/prism/translation.rb +14 -0
  752. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/prism-1.4.0/lib/prism/visitor.rb +508 -0
  753. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/prism-1.4.0/lib/prism.rb +89 -0
  754. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/prism-1.4.0/prism.gemspec +170 -0
  755. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/prism-1.4.0/rbi/prism/compiler.rbi +12 -0
  756. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/prism-1.4.0/rbi/prism/dsl.rbi +524 -0
  757. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/prism-1.4.0/rbi/prism/inspect_visitor.rbi +12 -0
  758. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/prism-1.4.0/rbi/prism/node.rbi +8722 -0
  759. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/prism-1.4.0/rbi/prism/node_ext.rbi +107 -0
  760. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/prism-1.4.0/rbi/prism/parse_result.rbi +404 -0
  761. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/prism-1.4.0/rbi/prism/reflection.rbi +58 -0
  762. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/prism-1.4.0/rbi/prism/string_query.rbi +12 -0
  763. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/prism-1.4.0/rbi/prism/translation/parser.rbi +11 -0
  764. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/prism-1.4.0/rbi/prism/translation/parser33.rbi +6 -0
  765. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/prism-1.4.0/rbi/prism/translation/parser34.rbi +6 -0
  766. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/prism-1.4.0/rbi/prism/translation/parser35.rbi +6 -0
  767. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/prism-1.4.0/rbi/prism/translation/ripper.rbi +15 -0
  768. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/prism-1.4.0/rbi/prism/visitor.rbi +473 -0
  769. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/prism-1.4.0/rbi/prism.rbi +66 -0
  770. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/prism-1.4.0/sig/prism/compiler.rbs +9 -0
  771. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/prism-1.4.0/sig/prism/dispatcher.rbs +16 -0
  772. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/prism-1.4.0/sig/prism/dot_visitor.rbs +6 -0
  773. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/prism-1.4.0/sig/prism/dsl.rbs +351 -0
  774. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/prism-1.4.0/sig/prism/inspect_visitor.rbs +22 -0
  775. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/prism-1.4.0/sig/prism/lex_compat.rbs +10 -0
  776. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/prism-1.4.0/sig/prism/mutation_compiler.rbs +159 -0
  777. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/prism-1.4.0/sig/prism/node.rbs +3614 -0
  778. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/prism-1.4.0/sig/prism/node_ext.rbs +82 -0
  779. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/prism-1.4.0/sig/prism/pack.rbs +43 -0
  780. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/prism-1.4.0/sig/prism/parse_result.rbs +192 -0
  781. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/prism-1.4.0/sig/prism/pattern.rbs +13 -0
  782. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/prism-1.4.0/sig/prism/reflection.rbs +50 -0
  783. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/prism-1.4.0/sig/prism/relocation.rbs +185 -0
  784. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/prism-1.4.0/sig/prism/serialize.rbs +8 -0
  785. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/prism-1.4.0/sig/prism/string_query.rbs +11 -0
  786. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/prism-1.4.0/sig/prism/visitor.rbs +169 -0
  787. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/prism-1.4.0/sig/prism.rbs +254 -0
  788. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/prism-1.4.0/src/diagnostic.c +842 -0
  789. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/prism-1.4.0/src/encoding.c +5235 -0
  790. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/prism-1.4.0/src/node.c +8674 -0
  791. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/prism-1.4.0/src/options.c +328 -0
  792. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/prism-1.4.0/src/pack.c +509 -0
  793. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/prism-1.4.0/src/prettyprint.c +8939 -0
  794. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/prism-1.4.0/src/prism.c +23184 -0
  795. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/prism-1.4.0/src/regexp.c +790 -0
  796. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/prism-1.4.0/src/serialize.c +2266 -0
  797. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/prism-1.4.0/src/static_literals.c +617 -0
  798. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/prism-1.4.0/src/token_type.c +701 -0
  799. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/prism-1.4.0/src/util/pm_buffer.c +357 -0
  800. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/prism-1.4.0/src/util/pm_char.c +318 -0
  801. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/prism-1.4.0/src/util/pm_constant_pool.c +342 -0
  802. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/prism-1.4.0/src/util/pm_integer.c +670 -0
  803. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/prism-1.4.0/src/util/pm_list.c +49 -0
  804. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/prism-1.4.0/src/util/pm_memchr.c +35 -0
  805. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/prism-1.4.0/src/util/pm_newline_list.c +125 -0
  806. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/prism-1.4.0/src/util/pm_string.c +383 -0
  807. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/prism-1.4.0/src/util/pm_strncasecmp.c +36 -0
  808. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/prism-1.4.0/src/util/pm_strpbrk.c +206 -0
  809. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/racc-1.8.1/ext/racc/cparse/Makefile +3 -3
  810. package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/racc-1.8.1/lib/racc/cparse.so +0 -0
  811. package/plugins/rubyastgen/bundle/ruby/3.4.0/specifications/ast-2.4.3.gemspec +1 -1
  812. package/plugins/rubyastgen/bundle/ruby/3.4.0/specifications/bundler-2.6.7.gemspec +25 -0
  813. package/plugins/rubyastgen/bundle/ruby/3.4.0/specifications/{ostruct-0.6.1.gemspec → ostruct-0.6.3.gemspec} +5 -4
  814. package/plugins/rubyastgen/bundle/ruby/3.4.0/specifications/parser-3.3.8.0.gemspec +1 -1
  815. package/plugins/rubyastgen/bundle/ruby/3.4.0/specifications/prism-1.4.0.gemspec +24 -0
  816. package/plugins/rubyastgen/bundle/ruby/3.4.0/specifications/racc-1.8.1.gemspec +1 -1
  817. package/rbastgen.js +1 -1
  818. package/plugins/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/CoaleseEqualTokenEmulator.php +0 -47
  819. package/plugins/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/FlexibleDocStringEmulator.php +0 -76
  820. package/plugins/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/FnTokenEmulator.php +0 -23
  821. package/plugins/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/NumericLiteralSeparatorEmulator.php +0 -105
  822. package/plugins/nikic/php-parser/lib/PhpParser/Node/Stmt/Throw_.php +0 -30
  823. package/plugins/nikic/php-parser/lib/PhpParser/Parser/Multiple.php +0 -55
  824. package/plugins/nikic/php-parser/lib/PhpParser/Parser/Php5.php +0 -2682
  825. package/plugins/nikic/php-parser/lib/PhpParser/Parser/Tokens.php +0 -148
  826. package/plugins/rubyastgen/bundle/ruby/3.4.0/bundler/gems/ruby_ast_gen-2a9186207494/exe/ruby_ast_gen +0 -59
  827. package/plugins/rubyastgen/bundle/ruby/3.4.0/bundler/gems/ruby_ast_gen-2a9186207494/spec/ruby_ast_gen_spec.rb +0 -175
  828. /package/plugins/rubyastgen/bundle/ruby/3.4.0/bundler/gems/{ruby_ast_gen-2a9186207494 → ruby_ast_gen-8738b155eb4f}/.rspec +0 -0
  829. /package/plugins/rubyastgen/bundle/ruby/3.4.0/bundler/gems/{ruby_ast_gen-2a9186207494 → ruby_ast_gen-8738b155eb4f}/LICENSE.txt +0 -0
  830. /package/plugins/rubyastgen/bundle/ruby/3.4.0/bundler/gems/{ruby_ast_gen-2a9186207494 → ruby_ast_gen-8738b155eb4f}/Rakefile +0 -0
  831. /package/plugins/rubyastgen/bundle/ruby/3.4.0/bundler/gems/{ruby_ast_gen-2a9186207494 → ruby_ast_gen-8738b155eb4f}/bin/setup +0 -0
  832. /package/plugins/rubyastgen/bundle/ruby/3.4.0/bundler/gems/{ruby_ast_gen-2a9186207494 → ruby_ast_gen-8738b155eb4f}/spec/spec_helper.rb +0 -0
  833. /package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/{ostruct-0.6.1 → bundler-2.6.7/lib/bundler/vendor/fileutils}/COPYING +0 -0
  834. /package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/{ostruct-0.6.1 → ostruct-0.6.3}/BSDL +0 -0
  835. /package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/{ostruct-0.6.1 → ostruct-0.6.3}/Gemfile +0 -0
  836. /package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/{ostruct-0.6.1 → ostruct-0.6.3}/README.md +0 -0
  837. /package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/{ostruct-0.6.1 → ostruct-0.6.3}/Rakefile +0 -0
  838. /package/plugins/rubyastgen/bundle/ruby/3.4.0/gems/{ostruct-0.6.1 → ostruct-0.6.3}/bin/console +0 -0
@@ -0,0 +1,2212 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Prism
4
+ module Translation
5
+ class Parser
6
+ # A visitor that knows how to convert a prism syntax tree into the
7
+ # whitequark/parser gem's syntax tree.
8
+ class Compiler < ::Prism::Compiler
9
+ # Raised when the tree is malformed or there is a bug in the compiler.
10
+ class CompilationError < StandardError
11
+ end
12
+
13
+ # The Parser::Base instance that is being used to build the AST.
14
+ attr_reader :parser
15
+
16
+ # The Parser::Builders::Default instance that is being used to build the
17
+ # AST.
18
+ attr_reader :builder
19
+
20
+ # The Parser::Source::Buffer instance that is holding a reference to the
21
+ # source code.
22
+ attr_reader :source_buffer
23
+
24
+ # The offset cache that is used to map between byte and character
25
+ # offsets in the file.
26
+ attr_reader :offset_cache
27
+
28
+ # The types of values that can be forwarded in the current scope.
29
+ attr_reader :forwarding
30
+
31
+ # Whether or not the current node is in a destructure.
32
+ attr_reader :in_destructure
33
+
34
+ # Whether or not the current node is in a pattern.
35
+ attr_reader :in_pattern
36
+
37
+ # Initialize a new compiler with the given parser, offset cache, and
38
+ # options.
39
+ def initialize(parser, offset_cache, forwarding: [], in_destructure: false, in_pattern: false)
40
+ @parser = parser
41
+ @builder = parser.builder
42
+ @source_buffer = parser.source_buffer
43
+ @offset_cache = offset_cache
44
+
45
+ @forwarding = forwarding
46
+ @in_destructure = in_destructure
47
+ @in_pattern = in_pattern
48
+ end
49
+
50
+ # alias foo bar
51
+ # ^^^^^^^^^^^^^
52
+ def visit_alias_method_node(node)
53
+ builder.alias(token(node.keyword_loc), visit(node.new_name), visit(node.old_name))
54
+ end
55
+
56
+ # alias $foo $bar
57
+ # ^^^^^^^^^^^^^^^
58
+ def visit_alias_global_variable_node(node)
59
+ builder.alias(token(node.keyword_loc), visit(node.new_name), visit(node.old_name))
60
+ end
61
+
62
+ # foo => bar | baz
63
+ # ^^^^^^^^^
64
+ def visit_alternation_pattern_node(node)
65
+ builder.match_alt(visit(node.left), token(node.operator_loc), visit(node.right))
66
+ end
67
+
68
+ # a and b
69
+ # ^^^^^^^
70
+ def visit_and_node(node)
71
+ builder.logical_op(:and, visit(node.left), token(node.operator_loc), visit(node.right))
72
+ end
73
+
74
+ # []
75
+ # ^^
76
+ def visit_array_node(node)
77
+ if node.opening&.start_with?("%w", "%W", "%i", "%I")
78
+ elements = node.elements.flat_map do |element|
79
+ if element.is_a?(StringNode)
80
+ if element.content.include?("\n")
81
+ string_nodes_from_line_continuations(element.unescaped, element.content, element.content_loc.start_offset, node.opening)
82
+ else
83
+ [builder.string_internal([element.unescaped, srange(element.content_loc)])]
84
+ end
85
+ elsif element.is_a?(InterpolatedStringNode)
86
+ builder.string_compose(
87
+ token(element.opening_loc),
88
+ string_nodes_from_interpolation(element, node.opening),
89
+ token(element.closing_loc)
90
+ )
91
+ else
92
+ [visit(element)]
93
+ end
94
+ end
95
+ else
96
+ elements = visit_all(node.elements)
97
+ end
98
+
99
+ builder.array(token(node.opening_loc), elements, token(node.closing_loc))
100
+ end
101
+
102
+ # foo => [bar]
103
+ # ^^^^^
104
+ def visit_array_pattern_node(node)
105
+ elements = [*node.requireds]
106
+ elements << node.rest if !node.rest.nil? && !node.rest.is_a?(ImplicitRestNode)
107
+ elements.concat(node.posts)
108
+ visited = visit_all(elements)
109
+
110
+ if node.rest.is_a?(ImplicitRestNode)
111
+ visited[-1] = builder.match_with_trailing_comma(visited[-1], token(node.rest.location))
112
+ end
113
+
114
+ if node.constant
115
+ if visited.empty?
116
+ builder.const_pattern(visit(node.constant), token(node.opening_loc), builder.array_pattern(token(node.opening_loc), visited, token(node.closing_loc)), token(node.closing_loc))
117
+ else
118
+ builder.const_pattern(visit(node.constant), token(node.opening_loc), builder.array_pattern(nil, visited, nil), token(node.closing_loc))
119
+ end
120
+ else
121
+ builder.array_pattern(token(node.opening_loc), visited, token(node.closing_loc))
122
+ end
123
+ end
124
+
125
+ # foo(bar)
126
+ # ^^^
127
+ def visit_arguments_node(node)
128
+ visit_all(node.arguments)
129
+ end
130
+
131
+ # { a: 1 }
132
+ # ^^^^
133
+ def visit_assoc_node(node)
134
+ key = node.key
135
+
136
+ if in_pattern
137
+ if node.value.is_a?(ImplicitNode)
138
+ if key.is_a?(SymbolNode)
139
+ if key.opening.nil?
140
+ builder.match_hash_var([key.unescaped, srange(key.location)])
141
+ else
142
+ builder.match_hash_var_from_str(token(key.opening_loc), [builder.string_internal([key.unescaped, srange(key.value_loc)])], token(key.closing_loc))
143
+ end
144
+ else
145
+ builder.match_hash_var_from_str(token(key.opening_loc), visit_all(key.parts), token(key.closing_loc))
146
+ end
147
+ elsif key.opening.nil?
148
+ builder.pair_keyword([key.unescaped, srange(key.location)], visit(node.value))
149
+ else
150
+ builder.pair_quoted(token(key.opening_loc), [builder.string_internal([key.unescaped, srange(key.value_loc)])], token(key.closing_loc), visit(node.value))
151
+ end
152
+ elsif node.value.is_a?(ImplicitNode)
153
+ value = node.value.value
154
+
155
+ implicit_value = if value.is_a?(CallNode)
156
+ builder.call_method(nil, nil, [value.name, srange(value.message_loc)])
157
+ elsif value.is_a?(ConstantReadNode)
158
+ builder.const([value.name, srange(key.value_loc)])
159
+ else
160
+ builder.ident([value.name, srange(key.value_loc)]).updated(:lvar)
161
+ end
162
+
163
+ builder.pair_keyword([key.unescaped, srange(key)], implicit_value)
164
+ elsif node.operator_loc
165
+ builder.pair(visit(key), token(node.operator_loc), visit(node.value))
166
+ elsif key.is_a?(SymbolNode) && key.opening_loc.nil?
167
+ builder.pair_keyword([key.unescaped, srange(key.location)], visit(node.value))
168
+ else
169
+ parts =
170
+ if key.is_a?(SymbolNode)
171
+ [builder.string_internal([key.unescaped, srange(key.value_loc)])]
172
+ else
173
+ visit_all(key.parts)
174
+ end
175
+
176
+ builder.pair_quoted(token(key.opening_loc), parts, token(key.closing_loc), visit(node.value))
177
+ end
178
+ end
179
+
180
+ # def foo(**); bar(**); end
181
+ # ^^
182
+ #
183
+ # { **foo }
184
+ # ^^^^^
185
+ def visit_assoc_splat_node(node)
186
+ if in_pattern
187
+ builder.match_rest(token(node.operator_loc), token(node.value&.location))
188
+ elsif node.value.nil? && forwarding.include?(:**)
189
+ builder.forwarded_kwrestarg(token(node.operator_loc))
190
+ else
191
+ builder.kwsplat(token(node.operator_loc), visit(node.value))
192
+ end
193
+ end
194
+
195
+ # $+
196
+ # ^^
197
+ def visit_back_reference_read_node(node)
198
+ builder.back_ref(token(node.location))
199
+ end
200
+
201
+ # begin end
202
+ # ^^^^^^^^^
203
+ def visit_begin_node(node)
204
+ rescue_bodies = []
205
+
206
+ if (rescue_clause = node.rescue_clause)
207
+ begin
208
+ find_start_offset = (rescue_clause.reference&.location || rescue_clause.exceptions.last&.location || rescue_clause.keyword_loc).end_offset
209
+ find_end_offset = (
210
+ rescue_clause.statements&.location&.start_offset ||
211
+ rescue_clause.subsequent&.location&.start_offset ||
212
+ node.else_clause&.location&.start_offset ||
213
+ node.ensure_clause&.location&.start_offset ||
214
+ node.end_keyword_loc&.start_offset ||
215
+ find_start_offset + 1
216
+ )
217
+
218
+ rescue_bodies << builder.rescue_body(
219
+ token(rescue_clause.keyword_loc),
220
+ rescue_clause.exceptions.any? ? builder.array(nil, visit_all(rescue_clause.exceptions), nil) : nil,
221
+ token(rescue_clause.operator_loc),
222
+ visit(rescue_clause.reference),
223
+ srange_find(find_start_offset, find_end_offset, ";"),
224
+ visit(rescue_clause.statements)
225
+ )
226
+ end until (rescue_clause = rescue_clause.subsequent).nil?
227
+ end
228
+
229
+ begin_body =
230
+ builder.begin_body(
231
+ visit(node.statements),
232
+ rescue_bodies,
233
+ token(node.else_clause&.else_keyword_loc),
234
+ visit(node.else_clause),
235
+ token(node.ensure_clause&.ensure_keyword_loc),
236
+ visit(node.ensure_clause&.statements)
237
+ )
238
+
239
+ if node.begin_keyword_loc
240
+ builder.begin_keyword(token(node.begin_keyword_loc), begin_body, token(node.end_keyword_loc))
241
+ else
242
+ begin_body
243
+ end
244
+ end
245
+
246
+ # foo(&bar)
247
+ # ^^^^
248
+ def visit_block_argument_node(node)
249
+ builder.block_pass(token(node.operator_loc), visit(node.expression))
250
+ end
251
+
252
+ # foo { |; bar| }
253
+ # ^^^
254
+ def visit_block_local_variable_node(node)
255
+ builder.shadowarg(token(node.location))
256
+ end
257
+
258
+ # A block on a keyword or method call.
259
+ def visit_block_node(node)
260
+ raise CompilationError, "Cannot directly compile block nodes"
261
+ end
262
+
263
+ # def foo(&bar); end
264
+ # ^^^^
265
+ def visit_block_parameter_node(node)
266
+ builder.blockarg(token(node.operator_loc), token(node.name_loc))
267
+ end
268
+
269
+ # A block's parameters.
270
+ def visit_block_parameters_node(node)
271
+ [*visit(node.parameters)].concat(visit_all(node.locals))
272
+ end
273
+
274
+ # break
275
+ # ^^^^^
276
+ #
277
+ # break foo
278
+ # ^^^^^^^^^
279
+ def visit_break_node(node)
280
+ builder.keyword_cmd(:break, token(node.keyword_loc), nil, visit(node.arguments) || [], nil)
281
+ end
282
+
283
+ # foo
284
+ # ^^^
285
+ #
286
+ # foo.bar
287
+ # ^^^^^^^
288
+ #
289
+ # foo.bar() {}
290
+ # ^^^^^^^^^^^^
291
+ def visit_call_node(node)
292
+ name = node.name
293
+ arguments = node.arguments&.arguments || []
294
+ block = node.block
295
+
296
+ if block.is_a?(BlockArgumentNode)
297
+ arguments = [*arguments, block]
298
+ block = nil
299
+ end
300
+
301
+ if node.call_operator_loc.nil?
302
+ case name
303
+ when :-@
304
+ case (receiver = node.receiver).type
305
+ when :integer_node, :float_node, :rational_node, :imaginary_node
306
+ return visit(numeric_negate(node.message_loc, receiver))
307
+ end
308
+ when :!
309
+ return visit_block(builder.not_op(token(node.message_loc), token(node.opening_loc), visit(node.receiver), token(node.closing_loc)), block)
310
+ when :=~
311
+ if (receiver = node.receiver).is_a?(RegularExpressionNode)
312
+ return builder.match_op(visit(receiver), token(node.message_loc), visit(node.arguments.arguments.first))
313
+ end
314
+ when :[]
315
+ return visit_block(builder.index(visit(node.receiver), token(node.opening_loc), visit_all(arguments), token(node.closing_loc)), block)
316
+ when :[]=
317
+ if node.message != "[]=" && node.arguments && block.nil? && !node.safe_navigation?
318
+ arguments = node.arguments.arguments[...-1]
319
+ arguments << node.block if node.block
320
+
321
+ return visit_block(
322
+ builder.assign(
323
+ builder.index_asgn(
324
+ visit(node.receiver),
325
+ token(node.opening_loc),
326
+ visit_all(arguments),
327
+ token(node.closing_loc),
328
+ ),
329
+ srange_find(node.message_loc.end_offset, node.arguments.arguments.last.location.start_offset, "="),
330
+ visit(node.arguments.arguments.last)
331
+ ),
332
+ block
333
+ )
334
+ end
335
+ end
336
+ end
337
+
338
+ message_loc = node.message_loc
339
+ call_operator_loc = node.call_operator_loc
340
+ call_operator = [{ "." => :dot, "&." => :anddot, "::" => "::" }.fetch(call_operator_loc.slice), srange(call_operator_loc)] if call_operator_loc
341
+
342
+ visit_block(
343
+ if name.end_with?("=") && !message_loc.slice.end_with?("=") && node.arguments && block.nil?
344
+ builder.assign(
345
+ builder.attr_asgn(visit(node.receiver), call_operator, token(message_loc)),
346
+ srange_find(message_loc.end_offset, node.arguments.location.start_offset, "="),
347
+ visit(node.arguments.arguments.last)
348
+ )
349
+ else
350
+ builder.call_method(
351
+ visit(node.receiver),
352
+ call_operator,
353
+ message_loc ? [node.name, srange(message_loc)] : nil,
354
+ token(node.opening_loc),
355
+ visit_all(arguments),
356
+ token(node.closing_loc)
357
+ )
358
+ end,
359
+ block
360
+ )
361
+ end
362
+
363
+ # foo.bar += baz
364
+ # ^^^^^^^^^^^^^^^
365
+ def visit_call_operator_write_node(node)
366
+ call_operator_loc = node.call_operator_loc
367
+
368
+ builder.op_assign(
369
+ builder.call_method(
370
+ visit(node.receiver),
371
+ call_operator_loc.nil? ? nil : [{ "." => :dot, "&." => :anddot, "::" => "::" }.fetch(call_operator_loc.slice), srange(call_operator_loc)],
372
+ node.message_loc ? [node.read_name, srange(node.message_loc)] : nil,
373
+ nil,
374
+ [],
375
+ nil
376
+ ),
377
+ [node.binary_operator_loc.slice.chomp("="), srange(node.binary_operator_loc)],
378
+ visit(node.value)
379
+ )
380
+ end
381
+
382
+ # foo.bar &&= baz
383
+ # ^^^^^^^^^^^^^^^
384
+ def visit_call_and_write_node(node)
385
+ call_operator_loc = node.call_operator_loc
386
+
387
+ builder.op_assign(
388
+ builder.call_method(
389
+ visit(node.receiver),
390
+ call_operator_loc.nil? ? nil : [{ "." => :dot, "&." => :anddot, "::" => "::" }.fetch(call_operator_loc.slice), srange(call_operator_loc)],
391
+ node.message_loc ? [node.read_name, srange(node.message_loc)] : nil,
392
+ nil,
393
+ [],
394
+ nil
395
+ ),
396
+ [node.operator_loc.slice.chomp("="), srange(node.operator_loc)],
397
+ visit(node.value)
398
+ )
399
+ end
400
+
401
+ # foo.bar ||= baz
402
+ # ^^^^^^^^^^^^^^^
403
+ def visit_call_or_write_node(node)
404
+ call_operator_loc = node.call_operator_loc
405
+
406
+ builder.op_assign(
407
+ builder.call_method(
408
+ visit(node.receiver),
409
+ call_operator_loc.nil? ? nil : [{ "." => :dot, "&." => :anddot, "::" => "::" }.fetch(call_operator_loc.slice), srange(call_operator_loc)],
410
+ node.message_loc ? [node.read_name, srange(node.message_loc)] : nil,
411
+ nil,
412
+ [],
413
+ nil
414
+ ),
415
+ [node.operator_loc.slice.chomp("="), srange(node.operator_loc)],
416
+ visit(node.value)
417
+ )
418
+ end
419
+
420
+ # foo.bar, = 1
421
+ # ^^^^^^^
422
+ def visit_call_target_node(node)
423
+ call_operator_loc = node.call_operator_loc
424
+
425
+ builder.attr_asgn(
426
+ visit(node.receiver),
427
+ call_operator_loc.nil? ? nil : [{ "." => :dot, "&." => :anddot, "::" => "::" }.fetch(call_operator_loc.slice), srange(call_operator_loc)],
428
+ token(node.message_loc)
429
+ )
430
+ end
431
+
432
+ # foo => bar => baz
433
+ # ^^^^^^^^^^
434
+ def visit_capture_pattern_node(node)
435
+ builder.match_as(visit(node.value), token(node.operator_loc), visit(node.target))
436
+ end
437
+
438
+ # case foo; when bar; end
439
+ # ^^^^^^^^^^^^^^^^^^^^^^^
440
+ def visit_case_node(node)
441
+ builder.case(
442
+ token(node.case_keyword_loc),
443
+ visit(node.predicate),
444
+ visit_all(node.conditions),
445
+ token(node.else_clause&.else_keyword_loc),
446
+ visit(node.else_clause),
447
+ token(node.end_keyword_loc)
448
+ )
449
+ end
450
+
451
+ # case foo; in bar; end
452
+ # ^^^^^^^^^^^^^^^^^^^^^
453
+ def visit_case_match_node(node)
454
+ builder.case_match(
455
+ token(node.case_keyword_loc),
456
+ visit(node.predicate),
457
+ visit_all(node.conditions),
458
+ token(node.else_clause&.else_keyword_loc),
459
+ visit(node.else_clause),
460
+ token(node.end_keyword_loc)
461
+ )
462
+ end
463
+
464
+ # class Foo; end
465
+ # ^^^^^^^^^^^^^^
466
+ def visit_class_node(node)
467
+ builder.def_class(
468
+ token(node.class_keyword_loc),
469
+ visit(node.constant_path),
470
+ token(node.inheritance_operator_loc),
471
+ visit(node.superclass),
472
+ node.body&.accept(copy_compiler(forwarding: [])),
473
+ token(node.end_keyword_loc)
474
+ )
475
+ end
476
+
477
+ # @@foo
478
+ # ^^^^^
479
+ def visit_class_variable_read_node(node)
480
+ builder.cvar(token(node.location))
481
+ end
482
+
483
+ # @@foo = 1
484
+ # ^^^^^^^^^
485
+ def visit_class_variable_write_node(node)
486
+ builder.assign(
487
+ builder.assignable(builder.cvar(token(node.name_loc))),
488
+ token(node.operator_loc),
489
+ visit(node.value)
490
+ )
491
+ end
492
+
493
+ # @@foo += bar
494
+ # ^^^^^^^^^^^^
495
+ def visit_class_variable_operator_write_node(node)
496
+ builder.op_assign(
497
+ builder.assignable(builder.cvar(token(node.name_loc))),
498
+ [node.binary_operator_loc.slice.chomp("="), srange(node.binary_operator_loc)],
499
+ visit(node.value)
500
+ )
501
+ end
502
+
503
+ # @@foo &&= bar
504
+ # ^^^^^^^^^^^^^
505
+ def visit_class_variable_and_write_node(node)
506
+ builder.op_assign(
507
+ builder.assignable(builder.cvar(token(node.name_loc))),
508
+ [node.operator_loc.slice.chomp("="), srange(node.operator_loc)],
509
+ visit(node.value)
510
+ )
511
+ end
512
+
513
+ # @@foo ||= bar
514
+ # ^^^^^^^^^^^^^
515
+ def visit_class_variable_or_write_node(node)
516
+ builder.op_assign(
517
+ builder.assignable(builder.cvar(token(node.name_loc))),
518
+ [node.operator_loc.slice.chomp("="), srange(node.operator_loc)],
519
+ visit(node.value)
520
+ )
521
+ end
522
+
523
+ # @@foo, = bar
524
+ # ^^^^^
525
+ def visit_class_variable_target_node(node)
526
+ builder.assignable(builder.cvar(token(node.location)))
527
+ end
528
+
529
+ # Foo
530
+ # ^^^
531
+ def visit_constant_read_node(node)
532
+ builder.const([node.name, srange(node.location)])
533
+ end
534
+
535
+ # Foo = 1
536
+ # ^^^^^^^
537
+ #
538
+ # Foo, Bar = 1
539
+ # ^^^ ^^^
540
+ def visit_constant_write_node(node)
541
+ builder.assign(builder.assignable(builder.const([node.name, srange(node.name_loc)])), token(node.operator_loc), visit(node.value))
542
+ end
543
+
544
+ # Foo += bar
545
+ # ^^^^^^^^^^^
546
+ def visit_constant_operator_write_node(node)
547
+ builder.op_assign(
548
+ builder.assignable(builder.const([node.name, srange(node.name_loc)])),
549
+ [node.binary_operator_loc.slice.chomp("="), srange(node.binary_operator_loc)],
550
+ visit(node.value)
551
+ )
552
+ end
553
+
554
+ # Foo &&= bar
555
+ # ^^^^^^^^^^^^
556
+ def visit_constant_and_write_node(node)
557
+ builder.op_assign(
558
+ builder.assignable(builder.const([node.name, srange(node.name_loc)])),
559
+ [node.operator_loc.slice.chomp("="), srange(node.operator_loc)],
560
+ visit(node.value)
561
+ )
562
+ end
563
+
564
+ # Foo ||= bar
565
+ # ^^^^^^^^^^^^
566
+ def visit_constant_or_write_node(node)
567
+ builder.op_assign(
568
+ builder.assignable(builder.const([node.name, srange(node.name_loc)])),
569
+ [node.operator_loc.slice.chomp("="), srange(node.operator_loc)],
570
+ visit(node.value)
571
+ )
572
+ end
573
+
574
+ # Foo, = bar
575
+ # ^^^
576
+ def visit_constant_target_node(node)
577
+ builder.assignable(builder.const([node.name, srange(node.location)]))
578
+ end
579
+
580
+ # Foo::Bar
581
+ # ^^^^^^^^
582
+ def visit_constant_path_node(node)
583
+ if node.parent.nil?
584
+ builder.const_global(
585
+ token(node.delimiter_loc),
586
+ [node.name, srange(node.name_loc)]
587
+ )
588
+ else
589
+ builder.const_fetch(
590
+ visit(node.parent),
591
+ token(node.delimiter_loc),
592
+ [node.name, srange(node.name_loc)]
593
+ )
594
+ end
595
+ end
596
+
597
+ # Foo::Bar = 1
598
+ # ^^^^^^^^^^^^
599
+ #
600
+ # Foo::Foo, Bar::Bar = 1
601
+ # ^^^^^^^^ ^^^^^^^^
602
+ def visit_constant_path_write_node(node)
603
+ builder.assign(
604
+ builder.assignable(visit(node.target)),
605
+ token(node.operator_loc),
606
+ visit(node.value)
607
+ )
608
+ end
609
+
610
+ # Foo::Bar += baz
611
+ # ^^^^^^^^^^^^^^^
612
+ def visit_constant_path_operator_write_node(node)
613
+ builder.op_assign(
614
+ builder.assignable(visit(node.target)),
615
+ [node.binary_operator_loc.slice.chomp("="), srange(node.binary_operator_loc)],
616
+ visit(node.value)
617
+ )
618
+ end
619
+
620
+ # Foo::Bar &&= baz
621
+ # ^^^^^^^^^^^^^^^^
622
+ def visit_constant_path_and_write_node(node)
623
+ builder.op_assign(
624
+ builder.assignable(visit(node.target)),
625
+ [node.operator_loc.slice.chomp("="), srange(node.operator_loc)],
626
+ visit(node.value)
627
+ )
628
+ end
629
+
630
+ # Foo::Bar ||= baz
631
+ # ^^^^^^^^^^^^^^^^
632
+ def visit_constant_path_or_write_node(node)
633
+ builder.op_assign(
634
+ builder.assignable(visit(node.target)),
635
+ [node.operator_loc.slice.chomp("="), srange(node.operator_loc)],
636
+ visit(node.value)
637
+ )
638
+ end
639
+
640
+ # Foo::Bar, = baz
641
+ # ^^^^^^^^
642
+ def visit_constant_path_target_node(node)
643
+ builder.assignable(visit_constant_path_node(node))
644
+ end
645
+
646
+ # def foo; end
647
+ # ^^^^^^^^^^^^
648
+ #
649
+ # def self.foo; end
650
+ # ^^^^^^^^^^^^^^^^^
651
+ def visit_def_node(node)
652
+ if node.equal_loc
653
+ if node.receiver
654
+ builder.def_endless_singleton(
655
+ token(node.def_keyword_loc),
656
+ visit(node.receiver.is_a?(ParenthesesNode) ? node.receiver.body : node.receiver),
657
+ token(node.operator_loc),
658
+ token(node.name_loc),
659
+ builder.args(token(node.lparen_loc), visit(node.parameters) || [], token(node.rparen_loc), false),
660
+ token(node.equal_loc),
661
+ node.body&.accept(copy_compiler(forwarding: find_forwarding(node.parameters)))
662
+ )
663
+ else
664
+ builder.def_endless_method(
665
+ token(node.def_keyword_loc),
666
+ token(node.name_loc),
667
+ builder.args(token(node.lparen_loc), visit(node.parameters) || [], token(node.rparen_loc), false),
668
+ token(node.equal_loc),
669
+ node.body&.accept(copy_compiler(forwarding: find_forwarding(node.parameters)))
670
+ )
671
+ end
672
+ elsif node.receiver
673
+ builder.def_singleton(
674
+ token(node.def_keyword_loc),
675
+ visit(node.receiver.is_a?(ParenthesesNode) ? node.receiver.body : node.receiver),
676
+ token(node.operator_loc),
677
+ token(node.name_loc),
678
+ builder.args(token(node.lparen_loc), visit(node.parameters) || [], token(node.rparen_loc), false),
679
+ node.body&.accept(copy_compiler(forwarding: find_forwarding(node.parameters))),
680
+ token(node.end_keyword_loc)
681
+ )
682
+ else
683
+ builder.def_method(
684
+ token(node.def_keyword_loc),
685
+ token(node.name_loc),
686
+ builder.args(token(node.lparen_loc), visit(node.parameters) || [], token(node.rparen_loc), false),
687
+ node.body&.accept(copy_compiler(forwarding: find_forwarding(node.parameters))),
688
+ token(node.end_keyword_loc)
689
+ )
690
+ end
691
+ end
692
+
693
+ # defined? a
694
+ # ^^^^^^^^^^
695
+ #
696
+ # defined?(a)
697
+ # ^^^^^^^^^^^
698
+ def visit_defined_node(node)
699
+ builder.keyword_cmd(
700
+ :defined?,
701
+ token(node.keyword_loc),
702
+ token(node.lparen_loc),
703
+ [visit(node.value)],
704
+ token(node.rparen_loc)
705
+ )
706
+ end
707
+
708
+ # if foo then bar else baz end
709
+ # ^^^^^^^^^^^^
710
+ def visit_else_node(node)
711
+ visit(node.statements)
712
+ end
713
+
714
+ # "foo #{bar}"
715
+ # ^^^^^^
716
+ def visit_embedded_statements_node(node)
717
+ builder.begin(
718
+ token(node.opening_loc),
719
+ visit(node.statements),
720
+ token(node.closing_loc)
721
+ )
722
+ end
723
+
724
+ # "foo #@bar"
725
+ # ^^^^^
726
+ def visit_embedded_variable_node(node)
727
+ visit(node.variable)
728
+ end
729
+
730
+ # begin; foo; ensure; bar; end
731
+ # ^^^^^^^^^^^^
732
+ def visit_ensure_node(node)
733
+ raise CompilationError, "Cannot directly compile ensure nodes"
734
+ end
735
+
736
+ # false
737
+ # ^^^^^
738
+ def visit_false_node(node)
739
+ builder.false(token(node.location))
740
+ end
741
+
742
+ # foo => [*, bar, *]
743
+ # ^^^^^^^^^^^
744
+ def visit_find_pattern_node(node)
745
+ elements = [node.left, *node.requireds, node.right]
746
+
747
+ if node.constant
748
+ builder.const_pattern(visit(node.constant), token(node.opening_loc), builder.find_pattern(nil, visit_all(elements), nil), token(node.closing_loc))
749
+ else
750
+ builder.find_pattern(token(node.opening_loc), visit_all(elements), token(node.closing_loc))
751
+ end
752
+ end
753
+
754
+ # 1.0
755
+ # ^^^
756
+ def visit_float_node(node)
757
+ visit_numeric(node, builder.float([node.value, srange(node.location)]))
758
+ end
759
+
760
+ # for foo in bar do end
761
+ # ^^^^^^^^^^^^^^^^^^^^^
762
+ def visit_for_node(node)
763
+ builder.for(
764
+ token(node.for_keyword_loc),
765
+ visit(node.index),
766
+ token(node.in_keyword_loc),
767
+ visit(node.collection),
768
+ if (do_keyword_loc = node.do_keyword_loc)
769
+ token(do_keyword_loc)
770
+ else
771
+ srange_find(node.collection.location.end_offset, (node.statements&.location || node.end_keyword_loc).start_offset, ";")
772
+ end,
773
+ visit(node.statements),
774
+ token(node.end_keyword_loc)
775
+ )
776
+ end
777
+
778
+ # def foo(...); bar(...); end
779
+ # ^^^
780
+ def visit_forwarding_arguments_node(node)
781
+ builder.forwarded_args(token(node.location))
782
+ end
783
+
784
+ # def foo(...); end
785
+ # ^^^
786
+ def visit_forwarding_parameter_node(node)
787
+ builder.forward_arg(token(node.location))
788
+ end
789
+
790
+ # super
791
+ # ^^^^^
792
+ #
793
+ # super {}
794
+ # ^^^^^^^^
795
+ def visit_forwarding_super_node(node)
796
+ visit_block(
797
+ builder.keyword_cmd(
798
+ :zsuper,
799
+ ["super", srange_offsets(node.location.start_offset, node.location.start_offset + 5)]
800
+ ),
801
+ node.block
802
+ )
803
+ end
804
+
805
+ # $foo
806
+ # ^^^^
807
+ def visit_global_variable_read_node(node)
808
+ builder.gvar(token(node.location))
809
+ end
810
+
811
+ # $foo = 1
812
+ # ^^^^^^^^
813
+ def visit_global_variable_write_node(node)
814
+ builder.assign(
815
+ builder.assignable(builder.gvar(token(node.name_loc))),
816
+ token(node.operator_loc),
817
+ visit(node.value)
818
+ )
819
+ end
820
+
821
+ # $foo += bar
822
+ # ^^^^^^^^^^^
823
+ def visit_global_variable_operator_write_node(node)
824
+ builder.op_assign(
825
+ builder.assignable(builder.gvar(token(node.name_loc))),
826
+ [node.binary_operator_loc.slice.chomp("="), srange(node.binary_operator_loc)],
827
+ visit(node.value)
828
+ )
829
+ end
830
+
831
+ # $foo &&= bar
832
+ # ^^^^^^^^^^^^
833
+ def visit_global_variable_and_write_node(node)
834
+ builder.op_assign(
835
+ builder.assignable(builder.gvar(token(node.name_loc))),
836
+ [node.operator_loc.slice.chomp("="), srange(node.operator_loc)],
837
+ visit(node.value)
838
+ )
839
+ end
840
+
841
+ # $foo ||= bar
842
+ # ^^^^^^^^^^^^
843
+ def visit_global_variable_or_write_node(node)
844
+ builder.op_assign(
845
+ builder.assignable(builder.gvar(token(node.name_loc))),
846
+ [node.operator_loc.slice.chomp("="), srange(node.operator_loc)],
847
+ visit(node.value)
848
+ )
849
+ end
850
+
851
+ # $foo, = bar
852
+ # ^^^^
853
+ def visit_global_variable_target_node(node)
854
+ builder.assignable(builder.gvar([node.slice, srange(node.location)]))
855
+ end
856
+
857
+ # {}
858
+ # ^^
859
+ def visit_hash_node(node)
860
+ builder.associate(
861
+ token(node.opening_loc),
862
+ visit_all(node.elements),
863
+ token(node.closing_loc)
864
+ )
865
+ end
866
+
867
+ # foo => {}
868
+ # ^^
869
+ def visit_hash_pattern_node(node)
870
+ elements = [*node.elements, *node.rest]
871
+
872
+ if node.constant
873
+ builder.const_pattern(visit(node.constant), token(node.opening_loc), builder.hash_pattern(nil, visit_all(elements), nil), token(node.closing_loc))
874
+ else
875
+ builder.hash_pattern(token(node.opening_loc), visit_all(elements), token(node.closing_loc))
876
+ end
877
+ end
878
+
879
+ # if foo then bar end
880
+ # ^^^^^^^^^^^^^^^^^^^
881
+ #
882
+ # bar if foo
883
+ # ^^^^^^^^^^
884
+ #
885
+ # foo ? bar : baz
886
+ # ^^^^^^^^^^^^^^^
887
+ def visit_if_node(node)
888
+ if !node.if_keyword_loc
889
+ builder.ternary(
890
+ visit(node.predicate),
891
+ token(node.then_keyword_loc),
892
+ visit(node.statements),
893
+ token(node.subsequent.else_keyword_loc),
894
+ visit(node.subsequent)
895
+ )
896
+ elsif node.if_keyword_loc.start_offset == node.location.start_offset
897
+ builder.condition(
898
+ token(node.if_keyword_loc),
899
+ visit(node.predicate),
900
+ if (then_keyword_loc = node.then_keyword_loc)
901
+ token(then_keyword_loc)
902
+ else
903
+ srange_find(node.predicate.location.end_offset, (node.statements&.location || node.subsequent&.location || node.end_keyword_loc).start_offset, ";")
904
+ end,
905
+ visit(node.statements),
906
+ case node.subsequent
907
+ when IfNode
908
+ token(node.subsequent.if_keyword_loc)
909
+ when ElseNode
910
+ token(node.subsequent.else_keyword_loc)
911
+ end,
912
+ visit(node.subsequent),
913
+ if node.if_keyword != "elsif"
914
+ token(node.end_keyword_loc)
915
+ end
916
+ )
917
+ else
918
+ builder.condition_mod(
919
+ visit(node.statements),
920
+ visit(node.subsequent),
921
+ token(node.if_keyword_loc),
922
+ visit(node.predicate)
923
+ )
924
+ end
925
+ end
926
+
927
+ # 1i
928
+ # ^^
929
+ def visit_imaginary_node(node)
930
+ visit_numeric(node, builder.complex([Complex(0, node.numeric.value), srange(node.location)]))
931
+ end
932
+
933
+ # { foo: }
934
+ # ^^^^
935
+ def visit_implicit_node(node)
936
+ raise CompilationError, "Cannot directly compile implicit nodes"
937
+ end
938
+
939
+ # foo { |bar,| }
940
+ # ^
941
+ def visit_implicit_rest_node(node)
942
+ raise CompilationError, "Cannot compile implicit rest nodes"
943
+ end
944
+
945
+ # case foo; in bar; end
946
+ # ^^^^^^^^^^^^^^^^^^^^^
947
+ def visit_in_node(node)
948
+ pattern = nil
949
+ guard = nil
950
+
951
+ case node.pattern
952
+ when IfNode
953
+ pattern = within_pattern { |compiler| node.pattern.statements.accept(compiler) }
954
+ guard = builder.if_guard(token(node.pattern.if_keyword_loc), visit(node.pattern.predicate))
955
+ when UnlessNode
956
+ pattern = within_pattern { |compiler| node.pattern.statements.accept(compiler) }
957
+ guard = builder.unless_guard(token(node.pattern.keyword_loc), visit(node.pattern.predicate))
958
+ else
959
+ pattern = within_pattern { |compiler| node.pattern.accept(compiler) }
960
+ end
961
+
962
+ builder.in_pattern(
963
+ token(node.in_loc),
964
+ pattern,
965
+ guard,
966
+ if (then_loc = node.then_loc)
967
+ token(then_loc)
968
+ else
969
+ srange_find(node.pattern.location.end_offset, node.statements&.location&.start_offset, ";")
970
+ end,
971
+ visit(node.statements)
972
+ )
973
+ end
974
+
975
+ # foo[bar] += baz
976
+ # ^^^^^^^^^^^^^^^
977
+ def visit_index_operator_write_node(node)
978
+ arguments = node.arguments&.arguments || []
979
+ arguments << node.block if node.block
980
+
981
+ builder.op_assign(
982
+ builder.index(
983
+ visit(node.receiver),
984
+ token(node.opening_loc),
985
+ visit_all(arguments),
986
+ token(node.closing_loc)
987
+ ),
988
+ [node.binary_operator_loc.slice.chomp("="), srange(node.binary_operator_loc)],
989
+ visit(node.value)
990
+ )
991
+ end
992
+
993
+ # foo[bar] &&= baz
994
+ # ^^^^^^^^^^^^^^^^
995
+ def visit_index_and_write_node(node)
996
+ arguments = node.arguments&.arguments || []
997
+ arguments << node.block if node.block
998
+
999
+ builder.op_assign(
1000
+ builder.index(
1001
+ visit(node.receiver),
1002
+ token(node.opening_loc),
1003
+ visit_all(arguments),
1004
+ token(node.closing_loc)
1005
+ ),
1006
+ [node.operator_loc.slice.chomp("="), srange(node.operator_loc)],
1007
+ visit(node.value)
1008
+ )
1009
+ end
1010
+
1011
+ # foo[bar] ||= baz
1012
+ # ^^^^^^^^^^^^^^^^
1013
+ def visit_index_or_write_node(node)
1014
+ arguments = node.arguments&.arguments || []
1015
+ arguments << node.block if node.block
1016
+
1017
+ builder.op_assign(
1018
+ builder.index(
1019
+ visit(node.receiver),
1020
+ token(node.opening_loc),
1021
+ visit_all(arguments),
1022
+ token(node.closing_loc)
1023
+ ),
1024
+ [node.operator_loc.slice.chomp("="), srange(node.operator_loc)],
1025
+ visit(node.value)
1026
+ )
1027
+ end
1028
+
1029
+ # foo[bar], = 1
1030
+ # ^^^^^^^^
1031
+ def visit_index_target_node(node)
1032
+ builder.index_asgn(
1033
+ visit(node.receiver),
1034
+ token(node.opening_loc),
1035
+ visit_all(node.arguments.arguments),
1036
+ token(node.closing_loc),
1037
+ )
1038
+ end
1039
+
1040
+ # @foo
1041
+ # ^^^^
1042
+ def visit_instance_variable_read_node(node)
1043
+ builder.ivar(token(node.location))
1044
+ end
1045
+
1046
+ # @foo = 1
1047
+ # ^^^^^^^^
1048
+ def visit_instance_variable_write_node(node)
1049
+ builder.assign(
1050
+ builder.assignable(builder.ivar(token(node.name_loc))),
1051
+ token(node.operator_loc),
1052
+ visit(node.value)
1053
+ )
1054
+ end
1055
+
1056
+ # @foo += bar
1057
+ # ^^^^^^^^^^^
1058
+ def visit_instance_variable_operator_write_node(node)
1059
+ builder.op_assign(
1060
+ builder.assignable(builder.ivar(token(node.name_loc))),
1061
+ [node.binary_operator_loc.slice.chomp("="), srange(node.binary_operator_loc)],
1062
+ visit(node.value)
1063
+ )
1064
+ end
1065
+
1066
+ # @foo &&= bar
1067
+ # ^^^^^^^^^^^^
1068
+ def visit_instance_variable_and_write_node(node)
1069
+ builder.op_assign(
1070
+ builder.assignable(builder.ivar(token(node.name_loc))),
1071
+ [node.operator_loc.slice.chomp("="), srange(node.operator_loc)],
1072
+ visit(node.value)
1073
+ )
1074
+ end
1075
+
1076
+ # @foo ||= bar
1077
+ # ^^^^^^^^^^^^
1078
+ def visit_instance_variable_or_write_node(node)
1079
+ builder.op_assign(
1080
+ builder.assignable(builder.ivar(token(node.name_loc))),
1081
+ [node.operator_loc.slice.chomp("="), srange(node.operator_loc)],
1082
+ visit(node.value)
1083
+ )
1084
+ end
1085
+
1086
+ # @foo, = bar
1087
+ # ^^^^
1088
+ def visit_instance_variable_target_node(node)
1089
+ builder.assignable(builder.ivar(token(node.location)))
1090
+ end
1091
+
1092
+ # 1
1093
+ # ^
1094
+ def visit_integer_node(node)
1095
+ visit_numeric(node, builder.integer([node.value, srange(node.location)]))
1096
+ end
1097
+
1098
+ # /foo #{bar}/
1099
+ # ^^^^^^^^^^^^
1100
+ def visit_interpolated_regular_expression_node(node)
1101
+ builder.regexp_compose(
1102
+ token(node.opening_loc),
1103
+ string_nodes_from_interpolation(node, node.opening),
1104
+ [node.closing[0], srange_offsets(node.closing_loc.start_offset, node.closing_loc.start_offset + 1)],
1105
+ builder.regexp_options([node.closing[1..], srange_offsets(node.closing_loc.start_offset + 1, node.closing_loc.end_offset)])
1106
+ )
1107
+ end
1108
+
1109
+ # if /foo #{bar}/ then end
1110
+ # ^^^^^^^^^^^^
1111
+ alias visit_interpolated_match_last_line_node visit_interpolated_regular_expression_node
1112
+
1113
+ # "foo #{bar}"
1114
+ # ^^^^^^^^^^^^
1115
+ def visit_interpolated_string_node(node)
1116
+ if node.heredoc?
1117
+ return visit_heredoc(node) { |children, closing| builder.string_compose(token(node.opening_loc), children, closing) }
1118
+ end
1119
+
1120
+ builder.string_compose(
1121
+ token(node.opening_loc),
1122
+ string_nodes_from_interpolation(node, node.opening),
1123
+ token(node.closing_loc)
1124
+ )
1125
+ end
1126
+
1127
+ # :"foo #{bar}"
1128
+ # ^^^^^^^^^^^^^
1129
+ def visit_interpolated_symbol_node(node)
1130
+ builder.symbol_compose(
1131
+ token(node.opening_loc),
1132
+ string_nodes_from_interpolation(node, node.opening),
1133
+ token(node.closing_loc)
1134
+ )
1135
+ end
1136
+
1137
+ # `foo #{bar}`
1138
+ # ^^^^^^^^^^^^
1139
+ def visit_interpolated_x_string_node(node)
1140
+ if node.heredoc?
1141
+ return visit_heredoc(node) { |children, closing| builder.xstring_compose(token(node.opening_loc), children, closing) }
1142
+ end
1143
+
1144
+ builder.xstring_compose(
1145
+ token(node.opening_loc),
1146
+ string_nodes_from_interpolation(node, node.opening),
1147
+ token(node.closing_loc)
1148
+ )
1149
+ end
1150
+
1151
+ # -> { it }
1152
+ # ^^
1153
+ def visit_it_local_variable_read_node(node)
1154
+ builder.ident([:it, srange(node.location)]).updated(:lvar)
1155
+ end
1156
+
1157
+ # -> { it }
1158
+ # ^^^^^^^^^
1159
+ def visit_it_parameters_node(node)
1160
+ # FIXME: The builder _should_ always be a subclass of the prism builder.
1161
+ # Currently RuboCop passes in its own builder that always inherits from the
1162
+ # parser builder (which is lacking the `itarg` method). Once rubocop-ast
1163
+ # opts in to use the custom prism builder a warning can be emitted when
1164
+ # it is not the expected class, and eventually raise.
1165
+ # https://github.com/rubocop/rubocop-ast/pull/354
1166
+ if builder.is_a?(Translation::Parser::Builder)
1167
+ builder.itarg
1168
+ else
1169
+ builder.args(nil, [], nil, false)
1170
+ end
1171
+ end
1172
+
1173
+ # foo(bar: baz)
1174
+ # ^^^^^^^^
1175
+ def visit_keyword_hash_node(node)
1176
+ builder.associate(nil, visit_all(node.elements), nil)
1177
+ end
1178
+
1179
+ # def foo(**bar); end
1180
+ # ^^^^^
1181
+ #
1182
+ # def foo(**); end
1183
+ # ^^
1184
+ def visit_keyword_rest_parameter_node(node)
1185
+ builder.kwrestarg(
1186
+ token(node.operator_loc),
1187
+ node.name ? [node.name, srange(node.name_loc)] : nil
1188
+ )
1189
+ end
1190
+
1191
+ # -> {}
1192
+ # ^^^^^
1193
+ def visit_lambda_node(node)
1194
+ parameters = node.parameters
1195
+ implicit_parameters = parameters.is_a?(NumberedParametersNode) || parameters.is_a?(ItParametersNode)
1196
+
1197
+ builder.block(
1198
+ builder.call_lambda(token(node.operator_loc)),
1199
+ [node.opening, srange(node.opening_loc)],
1200
+ if parameters.nil?
1201
+ builder.args(nil, [], nil, false)
1202
+ elsif implicit_parameters
1203
+ visit(node.parameters)
1204
+ else
1205
+ builder.args(
1206
+ token(node.parameters.opening_loc),
1207
+ visit(node.parameters),
1208
+ token(node.parameters.closing_loc),
1209
+ false
1210
+ )
1211
+ end,
1212
+ visit(node.body),
1213
+ [node.closing, srange(node.closing_loc)]
1214
+ )
1215
+ end
1216
+
1217
+ # foo
1218
+ # ^^^
1219
+ def visit_local_variable_read_node(node)
1220
+ builder.ident([node.name, srange(node.location)]).updated(:lvar)
1221
+ end
1222
+
1223
+ # foo = 1
1224
+ # ^^^^^^^
1225
+ def visit_local_variable_write_node(node)
1226
+ builder.assign(
1227
+ builder.assignable(builder.ident(token(node.name_loc))),
1228
+ token(node.operator_loc),
1229
+ visit(node.value)
1230
+ )
1231
+ end
1232
+
1233
+ # foo += bar
1234
+ # ^^^^^^^^^^
1235
+ def visit_local_variable_operator_write_node(node)
1236
+ builder.op_assign(
1237
+ builder.assignable(builder.ident(token(node.name_loc))),
1238
+ [node.binary_operator_loc.slice.chomp("="), srange(node.binary_operator_loc)],
1239
+ visit(node.value)
1240
+ )
1241
+ end
1242
+
1243
+ # foo &&= bar
1244
+ # ^^^^^^^^^^^
1245
+ def visit_local_variable_and_write_node(node)
1246
+ builder.op_assign(
1247
+ builder.assignable(builder.ident(token(node.name_loc))),
1248
+ [node.operator_loc.slice.chomp("="), srange(node.operator_loc)],
1249
+ visit(node.value)
1250
+ )
1251
+ end
1252
+
1253
+ # foo ||= bar
1254
+ # ^^^^^^^^^^^
1255
+ def visit_local_variable_or_write_node(node)
1256
+ builder.op_assign(
1257
+ builder.assignable(builder.ident(token(node.name_loc))),
1258
+ [node.operator_loc.slice.chomp("="), srange(node.operator_loc)],
1259
+ visit(node.value)
1260
+ )
1261
+ end
1262
+
1263
+ # foo, = bar
1264
+ # ^^^
1265
+ def visit_local_variable_target_node(node)
1266
+ if in_pattern
1267
+ builder.assignable(builder.match_var([node.name, srange(node.location)]))
1268
+ else
1269
+ builder.assignable(builder.ident(token(node.location)))
1270
+ end
1271
+ end
1272
+
1273
+ # foo in bar
1274
+ # ^^^^^^^^^^
1275
+ def visit_match_predicate_node(node)
1276
+ builder.match_pattern_p(
1277
+ visit(node.value),
1278
+ token(node.operator_loc),
1279
+ within_pattern { |compiler| node.pattern.accept(compiler) }
1280
+ )
1281
+ end
1282
+
1283
+ # foo => bar
1284
+ # ^^^^^^^^^^
1285
+ def visit_match_required_node(node)
1286
+ builder.match_pattern(
1287
+ visit(node.value),
1288
+ token(node.operator_loc),
1289
+ within_pattern { |compiler| node.pattern.accept(compiler) }
1290
+ )
1291
+ end
1292
+
1293
+ # /(?<foo>foo)/ =~ bar
1294
+ # ^^^^^^^^^^^^^^^^^^^^
1295
+ def visit_match_write_node(node)
1296
+ builder.match_op(
1297
+ visit(node.call.receiver),
1298
+ token(node.call.message_loc),
1299
+ visit(node.call.arguments.arguments.first)
1300
+ )
1301
+ end
1302
+
1303
+ # A node that is missing from the syntax tree. This is only used in the
1304
+ # case of a syntax error. The parser gem doesn't have such a concept, so
1305
+ # we invent our own here.
1306
+ def visit_missing_node(node)
1307
+ ::AST::Node.new(:missing, [], location: ::Parser::Source::Map.new(srange(node.location)))
1308
+ end
1309
+
1310
+ # module Foo; end
1311
+ # ^^^^^^^^^^^^^^^
1312
+ def visit_module_node(node)
1313
+ builder.def_module(
1314
+ token(node.module_keyword_loc),
1315
+ visit(node.constant_path),
1316
+ node.body&.accept(copy_compiler(forwarding: [])),
1317
+ token(node.end_keyword_loc)
1318
+ )
1319
+ end
1320
+
1321
+ # foo, bar = baz
1322
+ # ^^^^^^^^
1323
+ def visit_multi_target_node(node)
1324
+ builder.multi_lhs(
1325
+ token(node.lparen_loc),
1326
+ visit_all(multi_target_elements(node)),
1327
+ token(node.rparen_loc)
1328
+ )
1329
+ end
1330
+
1331
+ # foo, bar = baz
1332
+ # ^^^^^^^^^^^^^^
1333
+ def visit_multi_write_node(node)
1334
+ elements = multi_target_elements(node)
1335
+
1336
+ if elements.length == 1 && elements.first.is_a?(MultiTargetNode) && !node.rest
1337
+ elements = multi_target_elements(elements.first)
1338
+ end
1339
+
1340
+ builder.multi_assign(
1341
+ builder.multi_lhs(
1342
+ token(node.lparen_loc),
1343
+ visit_all(elements),
1344
+ token(node.rparen_loc)
1345
+ ),
1346
+ token(node.operator_loc),
1347
+ visit(node.value)
1348
+ )
1349
+ end
1350
+
1351
+ # next
1352
+ # ^^^^
1353
+ #
1354
+ # next foo
1355
+ # ^^^^^^^^
1356
+ def visit_next_node(node)
1357
+ builder.keyword_cmd(
1358
+ :next,
1359
+ token(node.keyword_loc),
1360
+ nil,
1361
+ visit(node.arguments) || [],
1362
+ nil
1363
+ )
1364
+ end
1365
+
1366
+ # nil
1367
+ # ^^^
1368
+ def visit_nil_node(node)
1369
+ builder.nil(token(node.location))
1370
+ end
1371
+
1372
+ # def foo(**nil); end
1373
+ # ^^^^^
1374
+ def visit_no_keywords_parameter_node(node)
1375
+ if in_pattern
1376
+ builder.match_nil_pattern(token(node.operator_loc), token(node.keyword_loc))
1377
+ else
1378
+ builder.kwnilarg(token(node.operator_loc), token(node.keyword_loc))
1379
+ end
1380
+ end
1381
+
1382
+ # -> { _1 + _2 }
1383
+ # ^^^^^^^^^^^^^^
1384
+ def visit_numbered_parameters_node(node)
1385
+ builder.numargs(node.maximum)
1386
+ end
1387
+
1388
+ # $1
1389
+ # ^^
1390
+ def visit_numbered_reference_read_node(node)
1391
+ builder.nth_ref([node.number, srange(node.location)])
1392
+ end
1393
+
1394
+ # def foo(bar: baz); end
1395
+ # ^^^^^^^^
1396
+ def visit_optional_keyword_parameter_node(node)
1397
+ builder.kwoptarg([node.name, srange(node.name_loc)], visit(node.value))
1398
+ end
1399
+
1400
+ # def foo(bar = 1); end
1401
+ # ^^^^^^^
1402
+ def visit_optional_parameter_node(node)
1403
+ builder.optarg(token(node.name_loc), token(node.operator_loc), visit(node.value))
1404
+ end
1405
+
1406
+ # a or b
1407
+ # ^^^^^^
1408
+ def visit_or_node(node)
1409
+ builder.logical_op(:or, visit(node.left), token(node.operator_loc), visit(node.right))
1410
+ end
1411
+
1412
+ # def foo(bar, *baz); end
1413
+ # ^^^^^^^^^
1414
+ def visit_parameters_node(node)
1415
+ params = []
1416
+
1417
+ if node.requireds.any?
1418
+ node.requireds.each do |required|
1419
+ params <<
1420
+ if required.is_a?(RequiredParameterNode)
1421
+ visit(required)
1422
+ else
1423
+ required.accept(copy_compiler(in_destructure: true))
1424
+ end
1425
+ end
1426
+ end
1427
+
1428
+ params.concat(visit_all(node.optionals)) if node.optionals.any?
1429
+ params << visit(node.rest) if !node.rest.nil? && !node.rest.is_a?(ImplicitRestNode)
1430
+
1431
+ if node.posts.any?
1432
+ node.posts.each do |post|
1433
+ params <<
1434
+ if post.is_a?(RequiredParameterNode)
1435
+ visit(post)
1436
+ else
1437
+ post.accept(copy_compiler(in_destructure: true))
1438
+ end
1439
+ end
1440
+ end
1441
+
1442
+ params.concat(visit_all(node.keywords)) if node.keywords.any?
1443
+ params << visit(node.keyword_rest) if !node.keyword_rest.nil?
1444
+ params << visit(node.block) if !node.block.nil?
1445
+ params
1446
+ end
1447
+
1448
+ # ()
1449
+ # ^^
1450
+ #
1451
+ # (1)
1452
+ # ^^^
1453
+ def visit_parentheses_node(node)
1454
+ builder.begin(
1455
+ token(node.opening_loc),
1456
+ visit(node.body),
1457
+ token(node.closing_loc)
1458
+ )
1459
+ end
1460
+
1461
+ # foo => ^(bar)
1462
+ # ^^^^^^
1463
+ def visit_pinned_expression_node(node)
1464
+ expression = builder.begin(token(node.lparen_loc), visit(node.expression), token(node.rparen_loc))
1465
+ builder.pin(token(node.operator_loc), expression)
1466
+ end
1467
+
1468
+ # foo = 1 and bar => ^foo
1469
+ # ^^^^
1470
+ def visit_pinned_variable_node(node)
1471
+ builder.pin(token(node.operator_loc), visit(node.variable))
1472
+ end
1473
+
1474
+ # END {}
1475
+ def visit_post_execution_node(node)
1476
+ builder.postexe(
1477
+ token(node.keyword_loc),
1478
+ token(node.opening_loc),
1479
+ visit(node.statements),
1480
+ token(node.closing_loc)
1481
+ )
1482
+ end
1483
+
1484
+ # BEGIN {}
1485
+ def visit_pre_execution_node(node)
1486
+ builder.preexe(
1487
+ token(node.keyword_loc),
1488
+ token(node.opening_loc),
1489
+ visit(node.statements),
1490
+ token(node.closing_loc)
1491
+ )
1492
+ end
1493
+
1494
+ # The top-level program node.
1495
+ def visit_program_node(node)
1496
+ visit(node.statements)
1497
+ end
1498
+
1499
+ # 0..5
1500
+ # ^^^^
1501
+ def visit_range_node(node)
1502
+ if node.exclude_end?
1503
+ builder.range_exclusive(
1504
+ visit(node.left),
1505
+ token(node.operator_loc),
1506
+ visit(node.right)
1507
+ )
1508
+ else
1509
+ builder.range_inclusive(
1510
+ visit(node.left),
1511
+ token(node.operator_loc),
1512
+ visit(node.right)
1513
+ )
1514
+ end
1515
+ end
1516
+
1517
+ # if foo .. bar; end
1518
+ # ^^^^^^^^^^
1519
+ alias visit_flip_flop_node visit_range_node
1520
+
1521
+ # 1r
1522
+ # ^^
1523
+ def visit_rational_node(node)
1524
+ visit_numeric(node, builder.rational([node.value, srange(node.location)]))
1525
+ end
1526
+
1527
+ # redo
1528
+ # ^^^^
1529
+ def visit_redo_node(node)
1530
+ builder.keyword_cmd(:redo, token(node.location))
1531
+ end
1532
+
1533
+ # /foo/
1534
+ # ^^^^^
1535
+ def visit_regular_expression_node(node)
1536
+ parts =
1537
+ if node.content == ""
1538
+ []
1539
+ elsif node.content.include?("\n")
1540
+ string_nodes_from_line_continuations(node.unescaped, node.content, node.content_loc.start_offset, node.opening)
1541
+ else
1542
+ [builder.string_internal([node.unescaped, srange(node.content_loc)])]
1543
+ end
1544
+
1545
+ builder.regexp_compose(
1546
+ token(node.opening_loc),
1547
+ parts,
1548
+ [node.closing[0], srange_offsets(node.closing_loc.start_offset, node.closing_loc.start_offset + 1)],
1549
+ builder.regexp_options([node.closing[1..], srange_offsets(node.closing_loc.start_offset + 1, node.closing_loc.end_offset)])
1550
+ )
1551
+ end
1552
+
1553
+ # if /foo/ then end
1554
+ # ^^^^^
1555
+ alias visit_match_last_line_node visit_regular_expression_node
1556
+
1557
+ # def foo(bar:); end
1558
+ # ^^^^
1559
+ def visit_required_keyword_parameter_node(node)
1560
+ builder.kwarg([node.name, srange(node.name_loc)])
1561
+ end
1562
+
1563
+ # def foo(bar); end
1564
+ # ^^^
1565
+ def visit_required_parameter_node(node)
1566
+ builder.arg(token(node.location))
1567
+ end
1568
+
1569
+ # foo rescue bar
1570
+ # ^^^^^^^^^^^^^^
1571
+ def visit_rescue_modifier_node(node)
1572
+ builder.begin_body(
1573
+ visit(node.expression),
1574
+ [
1575
+ builder.rescue_body(
1576
+ token(node.keyword_loc),
1577
+ nil,
1578
+ nil,
1579
+ nil,
1580
+ nil,
1581
+ visit(node.rescue_expression)
1582
+ )
1583
+ ]
1584
+ )
1585
+ end
1586
+
1587
+ # begin; rescue; end
1588
+ # ^^^^^^^
1589
+ def visit_rescue_node(node)
1590
+ raise CompilationError, "Cannot directly compile rescue nodes"
1591
+ end
1592
+
1593
+ # def foo(*bar); end
1594
+ # ^^^^
1595
+ #
1596
+ # def foo(*); end
1597
+ # ^
1598
+ def visit_rest_parameter_node(node)
1599
+ builder.restarg(token(node.operator_loc), token(node.name_loc))
1600
+ end
1601
+
1602
+ # retry
1603
+ # ^^^^^
1604
+ def visit_retry_node(node)
1605
+ builder.keyword_cmd(:retry, token(node.location))
1606
+ end
1607
+
1608
+ # return
1609
+ # ^^^^^^
1610
+ #
1611
+ # return 1
1612
+ # ^^^^^^^^
1613
+ def visit_return_node(node)
1614
+ builder.keyword_cmd(
1615
+ :return,
1616
+ token(node.keyword_loc),
1617
+ nil,
1618
+ visit(node.arguments) || [],
1619
+ nil
1620
+ )
1621
+ end
1622
+
1623
+ # self
1624
+ # ^^^^
1625
+ def visit_self_node(node)
1626
+ builder.self(token(node.location))
1627
+ end
1628
+
1629
+ # A shareable constant.
1630
+ def visit_shareable_constant_node(node)
1631
+ visit(node.write)
1632
+ end
1633
+
1634
+ # class << self; end
1635
+ # ^^^^^^^^^^^^^^^^^^
1636
+ def visit_singleton_class_node(node)
1637
+ builder.def_sclass(
1638
+ token(node.class_keyword_loc),
1639
+ token(node.operator_loc),
1640
+ visit(node.expression),
1641
+ node.body&.accept(copy_compiler(forwarding: [])),
1642
+ token(node.end_keyword_loc)
1643
+ )
1644
+ end
1645
+
1646
+ # __ENCODING__
1647
+ # ^^^^^^^^^^^^
1648
+ def visit_source_encoding_node(node)
1649
+ builder.accessible(builder.__ENCODING__(token(node.location)))
1650
+ end
1651
+
1652
+ # __FILE__
1653
+ # ^^^^^^^^
1654
+ def visit_source_file_node(node)
1655
+ builder.accessible(builder.__FILE__(token(node.location)))
1656
+ end
1657
+
1658
+ # __LINE__
1659
+ # ^^^^^^^^
1660
+ def visit_source_line_node(node)
1661
+ builder.accessible(builder.__LINE__(token(node.location)))
1662
+ end
1663
+
1664
+ # foo(*bar)
1665
+ # ^^^^
1666
+ #
1667
+ # def foo((bar, *baz)); end
1668
+ # ^^^^
1669
+ #
1670
+ # def foo(*); bar(*); end
1671
+ # ^
1672
+ def visit_splat_node(node)
1673
+ if node.expression.nil? && forwarding.include?(:*)
1674
+ builder.forwarded_restarg(token(node.operator_loc))
1675
+ elsif in_destructure
1676
+ builder.restarg(token(node.operator_loc), token(node.expression&.location))
1677
+ elsif in_pattern
1678
+ builder.match_rest(token(node.operator_loc), token(node.expression&.location))
1679
+ else
1680
+ builder.splat(token(node.operator_loc), visit(node.expression))
1681
+ end
1682
+ end
1683
+
1684
+ # A list of statements.
1685
+ def visit_statements_node(node)
1686
+ builder.compstmt(visit_all(node.body))
1687
+ end
1688
+
1689
+ # "foo"
1690
+ # ^^^^^
1691
+ def visit_string_node(node)
1692
+ if node.heredoc?
1693
+ visit_heredoc(node.to_interpolated) { |children, closing| builder.string_compose(token(node.opening_loc), children, closing) }
1694
+ elsif node.opening == "?"
1695
+ builder.character([node.unescaped, srange(node.location)])
1696
+ elsif node.opening&.start_with?("%") && node.unescaped.empty?
1697
+ builder.string_compose(token(node.opening_loc), [], token(node.closing_loc))
1698
+ else
1699
+ parts =
1700
+ if node.content.include?("\n")
1701
+ string_nodes_from_line_continuations(node.unescaped, node.content, node.content_loc.start_offset, node.opening)
1702
+ else
1703
+ [builder.string_internal([node.unescaped, srange(node.content_loc)])]
1704
+ end
1705
+
1706
+ builder.string_compose(
1707
+ token(node.opening_loc),
1708
+ parts,
1709
+ token(node.closing_loc)
1710
+ )
1711
+ end
1712
+ end
1713
+
1714
+ # super(foo)
1715
+ # ^^^^^^^^^^
1716
+ def visit_super_node(node)
1717
+ arguments = node.arguments&.arguments || []
1718
+ block = node.block
1719
+
1720
+ if block.is_a?(BlockArgumentNode)
1721
+ arguments = [*arguments, block]
1722
+ block = nil
1723
+ end
1724
+
1725
+ visit_block(
1726
+ builder.keyword_cmd(
1727
+ :super,
1728
+ token(node.keyword_loc),
1729
+ token(node.lparen_loc),
1730
+ visit_all(arguments),
1731
+ token(node.rparen_loc)
1732
+ ),
1733
+ block
1734
+ )
1735
+ end
1736
+
1737
+ # :foo
1738
+ # ^^^^
1739
+ def visit_symbol_node(node)
1740
+ if node.closing_loc.nil?
1741
+ if node.opening_loc.nil?
1742
+ builder.symbol_internal([node.unescaped, srange(node.location)])
1743
+ else
1744
+ builder.symbol([node.unescaped, srange(node.location)])
1745
+ end
1746
+ else
1747
+ parts =
1748
+ if node.value == ""
1749
+ []
1750
+ elsif node.value.include?("\n")
1751
+ string_nodes_from_line_continuations(node.unescaped, node.value, node.value_loc.start_offset, node.opening)
1752
+ else
1753
+ [builder.string_internal([node.unescaped, srange(node.value_loc)])]
1754
+ end
1755
+
1756
+ builder.symbol_compose(
1757
+ token(node.opening_loc),
1758
+ parts,
1759
+ token(node.closing_loc)
1760
+ )
1761
+ end
1762
+ end
1763
+
1764
+ # true
1765
+ # ^^^^
1766
+ def visit_true_node(node)
1767
+ builder.true(token(node.location))
1768
+ end
1769
+
1770
+ # undef foo
1771
+ # ^^^^^^^^^
1772
+ def visit_undef_node(node)
1773
+ builder.undef_method(token(node.keyword_loc), visit_all(node.names))
1774
+ end
1775
+
1776
+ # unless foo; bar end
1777
+ # ^^^^^^^^^^^^^^^^^^^
1778
+ #
1779
+ # bar unless foo
1780
+ # ^^^^^^^^^^^^^^
1781
+ def visit_unless_node(node)
1782
+ if node.keyword_loc.start_offset == node.location.start_offset
1783
+ builder.condition(
1784
+ token(node.keyword_loc),
1785
+ visit(node.predicate),
1786
+ if (then_keyword_loc = node.then_keyword_loc)
1787
+ token(then_keyword_loc)
1788
+ else
1789
+ srange_find(node.predicate.location.end_offset, (node.statements&.location || node.else_clause&.location || node.end_keyword_loc).start_offset, ";")
1790
+ end,
1791
+ visit(node.else_clause),
1792
+ token(node.else_clause&.else_keyword_loc),
1793
+ visit(node.statements),
1794
+ token(node.end_keyword_loc)
1795
+ )
1796
+ else
1797
+ builder.condition_mod(
1798
+ visit(node.else_clause),
1799
+ visit(node.statements),
1800
+ token(node.keyword_loc),
1801
+ visit(node.predicate)
1802
+ )
1803
+ end
1804
+ end
1805
+
1806
+ # until foo; bar end
1807
+ # ^^^^^^^^^^^^^^^^^^
1808
+ #
1809
+ # bar until foo
1810
+ # ^^^^^^^^^^^^^
1811
+ def visit_until_node(node)
1812
+ if node.location.start_offset == node.keyword_loc.start_offset
1813
+ builder.loop(
1814
+ :until,
1815
+ token(node.keyword_loc),
1816
+ visit(node.predicate),
1817
+ if (do_keyword_loc = node.do_keyword_loc)
1818
+ token(do_keyword_loc)
1819
+ else
1820
+ srange_find(node.predicate.location.end_offset, (node.statements&.location || node.closing_loc).start_offset, ";")
1821
+ end,
1822
+ visit(node.statements),
1823
+ token(node.closing_loc)
1824
+ )
1825
+ else
1826
+ builder.loop_mod(
1827
+ :until,
1828
+ visit(node.statements),
1829
+ token(node.keyword_loc),
1830
+ visit(node.predicate)
1831
+ )
1832
+ end
1833
+ end
1834
+
1835
+ # case foo; when bar; end
1836
+ # ^^^^^^^^^^^^^
1837
+ def visit_when_node(node)
1838
+ builder.when(
1839
+ token(node.keyword_loc),
1840
+ visit_all(node.conditions),
1841
+ if (then_keyword_loc = node.then_keyword_loc)
1842
+ token(then_keyword_loc)
1843
+ else
1844
+ srange_find(node.conditions.last.location.end_offset, node.statements&.location&.start_offset, ";")
1845
+ end,
1846
+ visit(node.statements)
1847
+ )
1848
+ end
1849
+
1850
+ # while foo; bar end
1851
+ # ^^^^^^^^^^^^^^^^^^
1852
+ #
1853
+ # bar while foo
1854
+ # ^^^^^^^^^^^^^
1855
+ def visit_while_node(node)
1856
+ if node.location.start_offset == node.keyword_loc.start_offset
1857
+ builder.loop(
1858
+ :while,
1859
+ token(node.keyword_loc),
1860
+ visit(node.predicate),
1861
+ if (do_keyword_loc = node.do_keyword_loc)
1862
+ token(do_keyword_loc)
1863
+ else
1864
+ srange_find(node.predicate.location.end_offset, (node.statements&.location || node.closing_loc).start_offset, ";")
1865
+ end,
1866
+ visit(node.statements),
1867
+ token(node.closing_loc)
1868
+ )
1869
+ else
1870
+ builder.loop_mod(
1871
+ :while,
1872
+ visit(node.statements),
1873
+ token(node.keyword_loc),
1874
+ visit(node.predicate)
1875
+ )
1876
+ end
1877
+ end
1878
+
1879
+ # `foo`
1880
+ # ^^^^^
1881
+ def visit_x_string_node(node)
1882
+ if node.heredoc?
1883
+ return visit_heredoc(node.to_interpolated) { |children, closing| builder.xstring_compose(token(node.opening_loc), children, closing) }
1884
+ end
1885
+
1886
+ parts =
1887
+ if node.content == ""
1888
+ []
1889
+ elsif node.content.include?("\n")
1890
+ string_nodes_from_line_continuations(node.unescaped, node.content, node.content_loc.start_offset, node.opening)
1891
+ else
1892
+ [builder.string_internal([node.unescaped, srange(node.content_loc)])]
1893
+ end
1894
+
1895
+ builder.xstring_compose(
1896
+ token(node.opening_loc),
1897
+ parts,
1898
+ token(node.closing_loc)
1899
+ )
1900
+ end
1901
+
1902
+ # yield
1903
+ # ^^^^^
1904
+ #
1905
+ # yield 1
1906
+ # ^^^^^^^
1907
+ def visit_yield_node(node)
1908
+ builder.keyword_cmd(
1909
+ :yield,
1910
+ token(node.keyword_loc),
1911
+ token(node.lparen_loc),
1912
+ visit(node.arguments) || [],
1913
+ token(node.rparen_loc)
1914
+ )
1915
+ end
1916
+
1917
+ private
1918
+
1919
+ # Initialize a new compiler with the given option overrides, used to
1920
+ # visit a subtree with the given options.
1921
+ def copy_compiler(forwarding: self.forwarding, in_destructure: self.in_destructure, in_pattern: self.in_pattern)
1922
+ Compiler.new(parser, offset_cache, forwarding: forwarding, in_destructure: in_destructure, in_pattern: in_pattern)
1923
+ end
1924
+
1925
+ # When *, **, &, or ... are used as an argument in a method call, we
1926
+ # check if they were allowed by the current context. To determine that
1927
+ # we build this lookup table.
1928
+ def find_forwarding(node)
1929
+ return [] if node.nil?
1930
+
1931
+ forwarding = []
1932
+ forwarding << :* if node.rest.is_a?(RestParameterNode) && node.rest.name.nil?
1933
+ forwarding << :** if node.keyword_rest.is_a?(KeywordRestParameterNode) && node.keyword_rest.name.nil?
1934
+ forwarding << :& if !node.block.nil? && node.block.name.nil?
1935
+ forwarding |= [:&, :"..."] if node.keyword_rest.is_a?(ForwardingParameterNode)
1936
+
1937
+ forwarding
1938
+ end
1939
+
1940
+ # Returns the set of targets for a MultiTargetNode or a MultiWriteNode.
1941
+ def multi_target_elements(node)
1942
+ elements = [*node.lefts]
1943
+ elements << node.rest if !node.rest.nil? && !node.rest.is_a?(ImplicitRestNode)
1944
+ elements.concat(node.rights)
1945
+ elements
1946
+ end
1947
+
1948
+ # Negate the value of a numeric node. This is a special case where you
1949
+ # have a negative sign on one line and then a number on the next line.
1950
+ # In normal Ruby, this will always be a method call. The parser gem,
1951
+ # however, marks this as a numeric literal. We have to massage the tree
1952
+ # here to get it into the correct form.
1953
+ def numeric_negate(message_loc, receiver)
1954
+ case receiver.type
1955
+ when :integer_node, :float_node
1956
+ receiver.copy(value: -receiver.value, location: message_loc.join(receiver.location))
1957
+ when :rational_node
1958
+ receiver.copy(numerator: -receiver.numerator, location: message_loc.join(receiver.location))
1959
+ when :imaginary_node
1960
+ receiver.copy(numeric: numeric_negate(message_loc, receiver.numeric), location: message_loc.join(receiver.location))
1961
+ end
1962
+ end
1963
+
1964
+ # Blocks can have a special set of parameters that automatically expand
1965
+ # when given arrays if they have a single required parameter and no
1966
+ # other parameters.
1967
+ def procarg0?(parameters)
1968
+ parameters &&
1969
+ parameters.requireds.length == 1 &&
1970
+ parameters.optionals.empty? &&
1971
+ parameters.rest.nil? &&
1972
+ parameters.posts.empty? &&
1973
+ parameters.keywords.empty? &&
1974
+ parameters.keyword_rest.nil? &&
1975
+ parameters.block.nil?
1976
+ end
1977
+
1978
+ # Locations in the parser gem AST are generated using this class. We
1979
+ # store a reference to its constant to make it slightly faster to look
1980
+ # up.
1981
+ Range = ::Parser::Source::Range
1982
+
1983
+ # Constructs a new source range from the given start and end offsets.
1984
+ def srange(location)
1985
+ Range.new(source_buffer, offset_cache[location.start_offset], offset_cache[location.end_offset]) if location
1986
+ end
1987
+
1988
+ # Constructs a new source range from the given start and end offsets.
1989
+ def srange_offsets(start_offset, end_offset)
1990
+ Range.new(source_buffer, offset_cache[start_offset], offset_cache[end_offset])
1991
+ end
1992
+
1993
+ # Constructs a new source range by finding the given character between
1994
+ # the given start offset and end offset. If the needle is not found, it
1995
+ # returns nil. Importantly it does not search past newlines or comments.
1996
+ #
1997
+ # Note that end_offset is allowed to be nil, in which case this will
1998
+ # search until the end of the string.
1999
+ def srange_find(start_offset, end_offset, character)
2000
+ if (match = source_buffer.source.byteslice(start_offset...end_offset)[/\A\s*#{character}/])
2001
+ final_offset = start_offset + match.bytesize
2002
+ [character, Range.new(source_buffer, offset_cache[final_offset - character.bytesize], offset_cache[final_offset])]
2003
+ end
2004
+ end
2005
+
2006
+ # Transform a location into a token that the parser gem expects.
2007
+ def token(location)
2008
+ [location.slice, Range.new(source_buffer, offset_cache[location.start_offset], offset_cache[location.end_offset])] if location
2009
+ end
2010
+
2011
+ # Visit a block node on a call.
2012
+ def visit_block(call, block)
2013
+ if block
2014
+ parameters = block.parameters
2015
+ implicit_parameters = parameters.is_a?(NumberedParametersNode) || parameters.is_a?(ItParametersNode)
2016
+
2017
+ builder.block(
2018
+ call,
2019
+ token(block.opening_loc),
2020
+ if parameters.nil?
2021
+ builder.args(nil, [], nil, false)
2022
+ elsif implicit_parameters
2023
+ visit(parameters)
2024
+ else
2025
+ builder.args(
2026
+ token(parameters.opening_loc),
2027
+ if procarg0?(parameters.parameters)
2028
+ parameter = parameters.parameters.requireds.first
2029
+ visited = parameter.is_a?(RequiredParameterNode) ? visit(parameter) : parameter.accept(copy_compiler(in_destructure: true))
2030
+ [builder.procarg0(visited)].concat(visit_all(parameters.locals))
2031
+ else
2032
+ visit(parameters)
2033
+ end,
2034
+ token(parameters.closing_loc),
2035
+ false
2036
+ )
2037
+ end,
2038
+ visit(block.body),
2039
+ token(block.closing_loc)
2040
+ )
2041
+ else
2042
+ call
2043
+ end
2044
+ end
2045
+
2046
+ # Visit a heredoc that can be either a string or an xstring.
2047
+ def visit_heredoc(node)
2048
+ children = Array.new
2049
+ indented = false
2050
+
2051
+ # If this is a dedenting heredoc, then we need to insert the opening
2052
+ # content into the children as well.
2053
+ if node.opening.start_with?("<<~") && node.parts.length > 0 && !node.parts.first.is_a?(StringNode)
2054
+ location = node.parts.first.location
2055
+ location = location.copy(start_offset: location.start_offset - location.start_line_slice.bytesize)
2056
+ children << builder.string_internal(token(location))
2057
+ indented = true
2058
+ end
2059
+
2060
+ node.parts.each do |part|
2061
+ pushing =
2062
+ if part.is_a?(StringNode) && part.content.include?("\n")
2063
+ string_nodes_from_line_continuations(part.unescaped, part.content, part.location.start_offset, node.opening)
2064
+ else
2065
+ [visit(part)]
2066
+ end
2067
+
2068
+ pushing.each do |child|
2069
+ if child.type == :str && child.children.last == ""
2070
+ # nothing
2071
+ elsif child.type == :str && children.last && children.last.type == :str && !children.last.children.first.end_with?("\n")
2072
+ appendee = children[-1]
2073
+
2074
+ location = appendee.loc
2075
+ location = location.with_expression(location.expression.join(child.loc.expression))
2076
+
2077
+ children[-1] = appendee.updated(:str, ["#{appendee.children.first}#{child.children.first}"], location: location)
2078
+ else
2079
+ children << child
2080
+ end
2081
+ end
2082
+ end
2083
+
2084
+ closing = node.closing
2085
+ closing_t = [closing.chomp, srange_offsets(node.closing_loc.start_offset, node.closing_loc.end_offset - (closing[/\s+$/]&.length || 0))]
2086
+ composed = yield children, closing_t
2087
+
2088
+ composed = composed.updated(nil, children[1..-1]) if indented
2089
+ composed
2090
+ end
2091
+
2092
+ # Visit a numeric node and account for the optional sign.
2093
+ def visit_numeric(node, value)
2094
+ if (slice = node.slice).match?(/^[+-]/)
2095
+ builder.unary_num(
2096
+ [slice[0].to_sym, srange_offsets(node.location.start_offset, node.location.start_offset + 1)],
2097
+ value
2098
+ )
2099
+ else
2100
+ value
2101
+ end
2102
+ end
2103
+
2104
+ # Within the given block, track that we're within a pattern.
2105
+ def within_pattern
2106
+ begin
2107
+ parser.pattern_variables.push
2108
+ yield copy_compiler(in_pattern: true)
2109
+ ensure
2110
+ parser.pattern_variables.pop
2111
+ end
2112
+ end
2113
+
2114
+ # When the content of a string node is split across multiple lines, the
2115
+ # parser gem creates individual string nodes for each line the content is part of.
2116
+ def string_nodes_from_interpolation(node, opening)
2117
+ node.parts.flat_map do |part|
2118
+ if part.type == :string_node && part.content.include?("\n") && part.opening_loc.nil?
2119
+ string_nodes_from_line_continuations(part.unescaped, part.content, part.content_loc.start_offset, opening)
2120
+ else
2121
+ visit(part)
2122
+ end
2123
+ end
2124
+ end
2125
+
2126
+ # Create parser string nodes from a single prism node. The parser gem
2127
+ # "glues" strings together when a line continuation is encountered.
2128
+ def string_nodes_from_line_continuations(unescaped, escaped, start_offset, opening)
2129
+ unescaped = unescaped.lines
2130
+ escaped = escaped.lines
2131
+ percent_array = opening&.start_with?("%w", "%W", "%i", "%I")
2132
+ regex = opening == "/" || opening&.start_with?("%r")
2133
+
2134
+ # Non-interpolating strings
2135
+ if opening&.end_with?("'") || opening&.start_with?("%q", "%s", "%w", "%i")
2136
+ current_length = 0
2137
+ current_line = +""
2138
+
2139
+ escaped.filter_map.with_index do |escaped_line, index|
2140
+ unescaped_line = unescaped.fetch(index, "")
2141
+ current_length += escaped_line.bytesize
2142
+ current_line << unescaped_line
2143
+
2144
+ # Glue line continuations together. Only %w and %i arrays can contain these.
2145
+ if percent_array && escaped_line[/(\\)*\n$/, 1]&.length&.odd?
2146
+ next unless index == escaped.count - 1
2147
+ end
2148
+ s = builder.string_internal([current_line, srange_offsets(start_offset, start_offset + current_length)])
2149
+ start_offset += escaped_line.bytesize
2150
+ current_line = +""
2151
+ current_length = 0
2152
+ s
2153
+ end
2154
+ else
2155
+ escaped_lengths = []
2156
+ normalized_lengths = []
2157
+ # Keeps track of where an unescaped line should start a new token. An unescaped
2158
+ # \n would otherwise be indistinguishable from the actual newline at the end of
2159
+ # of the line. The parser gem only emits a new string node at "real" newlines,
2160
+ # line continuations don't start a new node as well.
2161
+ do_next_tokens = []
2162
+
2163
+ escaped
2164
+ .chunk_while { |before, after| before[/(\\*)\r?\n$/, 1]&.length&.odd? || false }
2165
+ .each do |lines|
2166
+ escaped_lengths << lines.sum(&:bytesize)
2167
+
2168
+ unescaped_lines_count =
2169
+ if regex
2170
+ 0 # Will always be preserved as is
2171
+ else
2172
+ lines.sum do |line|
2173
+ count = line.scan(/(\\*)n/).count { |(backslashes)| backslashes&.length&.odd? }
2174
+ count -= 1 if !line.end_with?("\n") && count > 0
2175
+ count
2176
+ end
2177
+ end
2178
+
2179
+ extra = 1
2180
+ extra = lines.count if percent_array # Account for line continuations in percent arrays
2181
+
2182
+ normalized_lengths.concat(Array.new(unescaped_lines_count + extra, 0))
2183
+ normalized_lengths[-1] = lines.sum { |line| line.bytesize }
2184
+ do_next_tokens.concat(Array.new(unescaped_lines_count + extra, false))
2185
+ do_next_tokens[-1] = true
2186
+ end
2187
+
2188
+ current_line = +""
2189
+ current_normalized_length = 0
2190
+
2191
+ emitted_count = 0
2192
+ unescaped.filter_map.with_index do |unescaped_line, index|
2193
+ current_line << unescaped_line
2194
+ current_normalized_length += normalized_lengths.fetch(index, 0)
2195
+
2196
+ if do_next_tokens[index]
2197
+ inner_part = builder.string_internal([current_line, srange_offsets(start_offset, start_offset + current_normalized_length)])
2198
+ start_offset += escaped_lengths.fetch(emitted_count, 0)
2199
+ current_line = +""
2200
+ current_normalized_length = 0
2201
+ emitted_count += 1
2202
+ inner_part
2203
+ else
2204
+ nil
2205
+ end
2206
+ end
2207
+ end
2208
+ end
2209
+ end
2210
+ end
2211
+ end
2212
+ end