@appthreat/atom-parsetools 1.2.2 → 1.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (267) hide show
  1. package/README.md +118 -7
  2. package/astgen.js +297 -57
  3. package/package.json +9 -6
  4. package/plugins/composer/installed.php +6 -6
  5. package/plugins/rubyastgen/Gemfile +6 -4
  6. package/plugins/rubyastgen/Gemfile.lock +5 -8
  7. package/plugins/rubyastgen/bundle/ruby/4.0.0/bundler/gems/ruby_ast_gen-4ac84327b3af/Gemfile +11 -0
  8. package/plugins/rubyastgen/bundle/ruby/4.0.0/bundler/gems/ruby_ast_gen-4ac84327b3af/exe/ruby_ast_gen +55 -0
  9. package/plugins/rubyastgen/bundle/ruby/4.0.0/bundler/gems/ruby_ast_gen-4ac84327b3af/lib/ruby_ast_gen/cli.rb +133 -0
  10. package/plugins/rubyastgen/bundle/ruby/4.0.0/bundler/gems/ruby_ast_gen-4ac84327b3af/lib/ruby_ast_gen/node_handling.rb +449 -0
  11. package/plugins/rubyastgen/bundle/ruby/4.0.0/bundler/gems/{ruby_ast_gen-cc312ebf06b4 → ruby_ast_gen-4ac84327b3af}/lib/ruby_ast_gen/version.rb +1 -1
  12. package/plugins/rubyastgen/bundle/ruby/4.0.0/bundler/gems/ruby_ast_gen-4ac84327b3af/lib/ruby_ast_gen.rb +888 -0
  13. package/plugins/rubyastgen/bundle/ruby/4.0.0/bundler/gems/ruby_ast_gen-4ac84327b3af/ruby_ast_gen.gemspec +25 -0
  14. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/{parser-3.3.11.1 → parser-3.3.12.0}/lib/parser/current.rb +1 -1
  15. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/{parser-3.3.11.1 → parser-3.3.12.0}/lib/parser/version.rb +1 -1
  16. package/plugins/rubyastgen/bundle/ruby/4.0.0/specifications/ast-2.4.3.gemspec +29 -0
  17. package/plugins/rubyastgen/bundle/ruby/4.0.0/specifications/bundler-2.6.9.gemspec +25 -0
  18. package/plugins/rubyastgen/bundle/ruby/4.0.0/specifications/ostruct-0.6.3.gemspec +22 -0
  19. package/plugins/rubyastgen/bundle/ruby/4.0.0/specifications/parser-3.3.12.0.gemspec +37 -0
  20. package/rbastgen.js +102 -13
  21. package/scalasem.js +11 -2
  22. package/plugins/bin/bundler +0 -14
  23. package/plugins/bin/ruby_ast_gen +0 -14
  24. package/plugins/rubyastgen/bundle/bundler/setup.rb +0 -44
  25. package/plugins/rubyastgen/bundle/ruby/4.0.0/bundler/gems/ruby_ast_gen-cc312ebf06b4/exe/ruby_ast_gen +0 -63
  26. package/plugins/rubyastgen/bundle/ruby/4.0.0/bundler/gems/ruby_ast_gen-cc312ebf06b4/lib/ruby_ast_gen/node_handling.rb +0 -269
  27. package/plugins/rubyastgen/bundle/ruby/4.0.0/bundler/gems/ruby_ast_gen-cc312ebf06b4/lib/ruby_ast_gen.rb +0 -218
  28. package/plugins/rubyastgen/bundle/ruby/4.0.0/extensions/x86_64-linux/4.0.0/prism-1.9.0/gem.build_complete +0 -0
  29. package/plugins/rubyastgen/bundle/ruby/4.0.0/extensions/x86_64-linux/4.0.0/prism-1.9.0/gem_make.out +0 -44
  30. package/plugins/rubyastgen/bundle/ruby/4.0.0/extensions/x86_64-linux/4.0.0/prism-1.9.0/mkmf.log +0 -74
  31. package/plugins/rubyastgen/bundle/ruby/4.0.0/extensions/x86_64-linux/4.0.0/prism-1.9.0/prism/prism.so +0 -0
  32. package/plugins/rubyastgen/bundle/ruby/4.0.0/extensions/x86_64-linux/4.0.0/racc-1.8.1/gem.build_complete +0 -0
  33. package/plugins/rubyastgen/bundle/ruby/4.0.0/extensions/x86_64-linux/4.0.0/racc-1.8.1/gem_make.out +0 -18
  34. package/plugins/rubyastgen/bundle/ruby/4.0.0/extensions/x86_64-linux/4.0.0/racc-1.8.1/racc/cparse.so +0 -0
  35. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/BSDmakefile +0 -58
  36. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/Makefile +0 -116
  37. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/ext/prism/Makefile +0 -273
  38. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/ext/prism/api_node.c +0 -6945
  39. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/ext/prism/api_pack.c +0 -276
  40. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/ext/prism/extconf.rb +0 -127
  41. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/ext/prism/extension.c +0 -1427
  42. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/ext/prism/extension.h +0 -19
  43. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/include/prism/ast.h +0 -8254
  44. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/include/prism/defines.h +0 -260
  45. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/include/prism/diagnostic.h +0 -458
  46. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/include/prism/encoding.h +0 -283
  47. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/include/prism/node.h +0 -129
  48. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/include/prism/options.h +0 -488
  49. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/include/prism/pack.h +0 -163
  50. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/include/prism/parser.h +0 -936
  51. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/include/prism/prettyprint.h +0 -34
  52. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/include/prism/regexp.h +0 -43
  53. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/include/prism/static_literals.h +0 -121
  54. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/include/prism/util/pm_buffer.h +0 -236
  55. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/include/prism/util/pm_char.h +0 -204
  56. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/include/prism/util/pm_constant_pool.h +0 -218
  57. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/include/prism/util/pm_integer.h +0 -130
  58. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/include/prism/util/pm_list.h +0 -103
  59. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/include/prism/util/pm_memchr.h +0 -29
  60. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/include/prism/util/pm_newline_list.h +0 -113
  61. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/include/prism/util/pm_string.h +0 -200
  62. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/include/prism/util/pm_strncasecmp.h +0 -32
  63. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/include/prism/util/pm_strpbrk.h +0 -46
  64. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/include/prism/version.h +0 -29
  65. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/include/prism.h +0 -408
  66. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/lib/prism/compiler.rb +0 -801
  67. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/lib/prism/desugar_compiler.rb +0 -392
  68. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/lib/prism/dispatcher.rb +0 -2210
  69. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/lib/prism/dot_visitor.rb +0 -4767
  70. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/lib/prism/dsl.rb +0 -1003
  71. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/lib/prism/ffi.rb +0 -578
  72. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/lib/prism/inspect_visitor.rb +0 -2393
  73. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/lib/prism/lex_compat.rb +0 -911
  74. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/lib/prism/mutation_compiler.rb +0 -772
  75. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/lib/prism/node.rb +0 -19966
  76. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/lib/prism/node_ext.rb +0 -511
  77. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/lib/prism/pack.rb +0 -230
  78. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/lib/prism/parse_result/comments.rb +0 -188
  79. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/lib/prism/parse_result/errors.rb +0 -66
  80. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/lib/prism/parse_result/newlines.rb +0 -155
  81. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/lib/prism/parse_result.rb +0 -907
  82. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/lib/prism/pattern.rb +0 -269
  83. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/lib/prism/polyfill/append_as_bytes.rb +0 -15
  84. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/lib/prism/polyfill/byteindex.rb +0 -13
  85. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/lib/prism/polyfill/scan_byte.rb +0 -14
  86. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/lib/prism/polyfill/unpack1.rb +0 -14
  87. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/lib/prism/polyfill/warn.rb +0 -36
  88. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/lib/prism/prism.so +0 -0
  89. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/lib/prism/reflection.rb +0 -416
  90. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/lib/prism/relocation.rb +0 -505
  91. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/lib/prism/serialize.rb +0 -2400
  92. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/lib/prism/string_query.rb +0 -31
  93. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/lib/prism/translation/parser/builder.rb +0 -62
  94. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/lib/prism/translation/parser/compiler.rb +0 -2234
  95. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/lib/prism/translation/parser/lexer.rb +0 -820
  96. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/lib/prism/translation/parser.rb +0 -376
  97. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/lib/prism/translation/parser_current.rb +0 -26
  98. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/lib/prism/translation/parser_versions.rb +0 -36
  99. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/lib/prism/translation/ripper/filter.rb +0 -53
  100. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/lib/prism/translation/ripper/lexer.rb +0 -135
  101. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/lib/prism/translation/ripper/sexp.rb +0 -126
  102. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/lib/prism/translation/ripper/shim.rb +0 -5
  103. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/lib/prism/translation/ripper.rb +0 -3520
  104. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/lib/prism/translation/ruby_parser.rb +0 -1964
  105. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/lib/prism/translation.rb +0 -18
  106. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/lib/prism/visitor.rb +0 -813
  107. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/lib/prism.rb +0 -98
  108. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/rbi/prism/compiler.rbi +0 -12
  109. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/rbi/prism/dsl.rbi +0 -524
  110. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/rbi/prism/inspect_visitor.rbi +0 -12
  111. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/rbi/prism/node.rbi +0 -8750
  112. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/rbi/prism/node_ext.rbi +0 -107
  113. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/rbi/prism/parse_result.rbi +0 -404
  114. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/rbi/prism/reflection.rbi +0 -58
  115. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/rbi/prism/string_query.rbi +0 -12
  116. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/rbi/prism/translation/parser.rbi +0 -11
  117. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/rbi/prism/translation/parser_versions.rbi +0 -23
  118. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/rbi/prism/translation/ripper.rbi +0 -15
  119. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/rbi/prism/visitor.rbi +0 -473
  120. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/rbi/prism.rbi +0 -63
  121. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/sig/prism/compiler.rbs +0 -9
  122. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/sig/prism/dispatcher.rbs +0 -19
  123. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/sig/prism/dot_visitor.rbs +0 -6
  124. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/sig/prism/dsl.rbs +0 -351
  125. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/sig/prism/inspect_visitor.rbs +0 -22
  126. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/sig/prism/lex_compat.rbs +0 -10
  127. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/sig/prism/mutation_compiler.rbs +0 -159
  128. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/sig/prism/node.rbs +0 -4042
  129. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/sig/prism/node_ext.rbs +0 -149
  130. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/sig/prism/pack.rbs +0 -43
  131. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/sig/prism/parse_result/comments.rbs +0 -38
  132. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/sig/prism/parse_result.rbs +0 -197
  133. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/sig/prism/pattern.rbs +0 -13
  134. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/sig/prism/reflection.rbs +0 -50
  135. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/sig/prism/relocation.rbs +0 -185
  136. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/sig/prism/serialize.rbs +0 -8
  137. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/sig/prism/string_query.rbs +0 -11
  138. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/sig/prism/visitor.rbs +0 -169
  139. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/sig/prism.rbs +0 -272
  140. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/src/diagnostic.c +0 -854
  141. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/src/encoding.c +0 -5340
  142. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/src/node.c +0 -8685
  143. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/src/options.c +0 -338
  144. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/src/pack.c +0 -509
  145. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/src/prettyprint.c +0 -8957
  146. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/src/prism.c +0 -22679
  147. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/src/regexp.c +0 -790
  148. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/src/serialize.c +0 -2274
  149. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/src/static_literals.c +0 -617
  150. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/src/token_type.c +0 -703
  151. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/src/util/pm_buffer.c +0 -357
  152. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/src/util/pm_char.c +0 -318
  153. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/src/util/pm_constant_pool.c +0 -342
  154. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/src/util/pm_integer.c +0 -670
  155. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/src/util/pm_list.c +0 -49
  156. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/src/util/pm_memchr.c +0 -35
  157. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/src/util/pm_newline_list.c +0 -125
  158. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/src/util/pm_string.c +0 -381
  159. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/src/util/pm_strncasecmp.c +0 -36
  160. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/src/util/pm_strpbrk.c +0 -206
  161. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/racc-1.8.1/BSDL +0 -22
  162. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/racc-1.8.1/COPYING +0 -56
  163. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/racc-1.8.1/ChangeLog +0 -846
  164. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/racc-1.8.1/README.ja.rdoc +0 -58
  165. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/racc-1.8.1/README.rdoc +0 -60
  166. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/racc-1.8.1/TODO +0 -5
  167. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/racc-1.8.1/bin/racc +0 -320
  168. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/racc-1.8.1/ext/racc/cparse/Makefile +0 -273
  169. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/racc-1.8.1/ext/racc/cparse/cparse.c +0 -840
  170. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/racc-1.8.1/ext/racc/cparse/extconf.rb +0 -8
  171. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/racc-1.8.1/lib/racc/compat.rb +0 -33
  172. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/racc-1.8.1/lib/racc/cparse.so +0 -0
  173. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/racc-1.8.1/lib/racc/debugflags.rb +0 -60
  174. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/racc-1.8.1/lib/racc/exception.rb +0 -16
  175. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/racc-1.8.1/lib/racc/grammar.rb +0 -1191
  176. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/racc-1.8.1/lib/racc/grammarfileparser.rb +0 -667
  177. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/racc-1.8.1/lib/racc/info.rb +0 -18
  178. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/racc-1.8.1/lib/racc/iset.rb +0 -92
  179. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/racc-1.8.1/lib/racc/logfilegenerator.rb +0 -212
  180. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/racc-1.8.1/lib/racc/parser-text.rb +0 -644
  181. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/racc-1.8.1/lib/racc/parser.rb +0 -630
  182. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/racc-1.8.1/lib/racc/parserfilegenerator.rb +0 -473
  183. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/racc-1.8.1/lib/racc/sourcetext.rb +0 -35
  184. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/racc-1.8.1/lib/racc/state.rb +0 -976
  185. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/racc-1.8.1/lib/racc/statetransitiontable.rb +0 -311
  186. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/racc-1.8.1/lib/racc/static.rb +0 -5
  187. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/racc-1.8.1/lib/racc.rb +0 -6
  188. /package/plugins/rubyastgen/bundle/ruby/4.0.0/bundler/gems/{ruby_ast_gen-cc312ebf06b4 → ruby_ast_gen-4ac84327b3af}/.rspec +0 -0
  189. /package/plugins/rubyastgen/bundle/ruby/4.0.0/bundler/gems/{ruby_ast_gen-cc312ebf06b4 → ruby_ast_gen-4ac84327b3af}/bin/console +0 -0
  190. /package/plugins/rubyastgen/bundle/ruby/4.0.0/bundler/gems/{ruby_ast_gen-cc312ebf06b4 → ruby_ast_gen-4ac84327b3af}/bin/setup +0 -0
  191. /package/plugins/rubyastgen/bundle/ruby/4.0.0/bundler/gems/{ruby_ast_gen-cc312ebf06b4 → ruby_ast_gen-4ac84327b3af}/update_version.rb +0 -0
  192. /package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/{parser-3.3.11.1 → parser-3.3.12.0}/bin/ruby-parse +0 -0
  193. /package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/{parser-3.3.11.1 → parser-3.3.12.0}/bin/ruby-rewrite +0 -0
  194. /package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/{parser-3.3.11.1 → parser-3.3.12.0}/lib/gauntlet_parser.rb +0 -0
  195. /package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/{parser-3.3.11.1 → parser-3.3.12.0}/lib/parser/all.rb +0 -0
  196. /package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/{parser-3.3.11.1 → parser-3.3.12.0}/lib/parser/ast/node.rb +0 -0
  197. /package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/{parser-3.3.11.1 → parser-3.3.12.0}/lib/parser/ast/processor.rb +0 -0
  198. /package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/{parser-3.3.11.1 → parser-3.3.12.0}/lib/parser/base.rb +0 -0
  199. /package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/{parser-3.3.11.1 → parser-3.3.12.0}/lib/parser/builders/default.rb +0 -0
  200. /package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/{parser-3.3.11.1 → parser-3.3.12.0}/lib/parser/clobbering_error.rb +0 -0
  201. /package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/{parser-3.3.11.1 → parser-3.3.12.0}/lib/parser/color.rb +0 -0
  202. /package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/{parser-3.3.11.1 → parser-3.3.12.0}/lib/parser/context.rb +0 -0
  203. /package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/{parser-3.3.11.1 → parser-3.3.12.0}/lib/parser/current_arg_stack.rb +0 -0
  204. /package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/{parser-3.3.11.1 → parser-3.3.12.0}/lib/parser/deprecation.rb +0 -0
  205. /package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/{parser-3.3.11.1 → parser-3.3.12.0}/lib/parser/diagnostic/engine.rb +0 -0
  206. /package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/{parser-3.3.11.1 → parser-3.3.12.0}/lib/parser/diagnostic.rb +0 -0
  207. /package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/{parser-3.3.11.1 → parser-3.3.12.0}/lib/parser/lexer/dedenter.rb +0 -0
  208. /package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/{parser-3.3.11.1 → parser-3.3.12.0}/lib/parser/lexer/explanation.rb +0 -0
  209. /package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/{parser-3.3.11.1 → parser-3.3.12.0}/lib/parser/lexer/literal.rb +0 -0
  210. /package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/{parser-3.3.11.1 → parser-3.3.12.0}/lib/parser/lexer/stack_state.rb +0 -0
  211. /package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/{parser-3.3.11.1 → parser-3.3.12.0}/lib/parser/lexer-F0.rb +0 -0
  212. /package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/{parser-3.3.11.1 → parser-3.3.12.0}/lib/parser/lexer-F1.rb +0 -0
  213. /package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/{parser-3.3.11.1 → parser-3.3.12.0}/lib/parser/lexer-strings.rb +0 -0
  214. /package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/{parser-3.3.11.1 → parser-3.3.12.0}/lib/parser/macruby.rb +0 -0
  215. /package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/{parser-3.3.11.1 → parser-3.3.12.0}/lib/parser/max_numparam_stack.rb +0 -0
  216. /package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/{parser-3.3.11.1 → parser-3.3.12.0}/lib/parser/messages.rb +0 -0
  217. /package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/{parser-3.3.11.1 → parser-3.3.12.0}/lib/parser/meta.rb +0 -0
  218. /package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/{parser-3.3.11.1 → parser-3.3.12.0}/lib/parser/rewriter.rb +0 -0
  219. /package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/{parser-3.3.11.1 → parser-3.3.12.0}/lib/parser/ruby18.rb +0 -0
  220. /package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/{parser-3.3.11.1 → parser-3.3.12.0}/lib/parser/ruby19.rb +0 -0
  221. /package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/{parser-3.3.11.1 → parser-3.3.12.0}/lib/parser/ruby20.rb +0 -0
  222. /package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/{parser-3.3.11.1 → parser-3.3.12.0}/lib/parser/ruby21.rb +0 -0
  223. /package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/{parser-3.3.11.1 → parser-3.3.12.0}/lib/parser/ruby22.rb +0 -0
  224. /package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/{parser-3.3.11.1 → parser-3.3.12.0}/lib/parser/ruby23.rb +0 -0
  225. /package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/{parser-3.3.11.1 → parser-3.3.12.0}/lib/parser/ruby24.rb +0 -0
  226. /package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/{parser-3.3.11.1 → parser-3.3.12.0}/lib/parser/ruby25.rb +0 -0
  227. /package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/{parser-3.3.11.1 → parser-3.3.12.0}/lib/parser/ruby26.rb +0 -0
  228. /package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/{parser-3.3.11.1 → parser-3.3.12.0}/lib/parser/ruby27.rb +0 -0
  229. /package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/{parser-3.3.11.1 → parser-3.3.12.0}/lib/parser/ruby30.rb +0 -0
  230. /package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/{parser-3.3.11.1 → parser-3.3.12.0}/lib/parser/ruby31.rb +0 -0
  231. /package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/{parser-3.3.11.1 → parser-3.3.12.0}/lib/parser/ruby32.rb +0 -0
  232. /package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/{parser-3.3.11.1 → parser-3.3.12.0}/lib/parser/ruby33.rb +0 -0
  233. /package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/{parser-3.3.11.1 → parser-3.3.12.0}/lib/parser/ruby34.rb +0 -0
  234. /package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/{parser-3.3.11.1 → parser-3.3.12.0}/lib/parser/rubymotion.rb +0 -0
  235. /package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/{parser-3.3.11.1 → parser-3.3.12.0}/lib/parser/runner/ruby_parse.rb +0 -0
  236. /package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/{parser-3.3.11.1 → parser-3.3.12.0}/lib/parser/runner/ruby_rewrite.rb +0 -0
  237. /package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/{parser-3.3.11.1 → parser-3.3.12.0}/lib/parser/runner.rb +0 -0
  238. /package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/{parser-3.3.11.1 → parser-3.3.12.0}/lib/parser/source/buffer.rb +0 -0
  239. /package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/{parser-3.3.11.1 → parser-3.3.12.0}/lib/parser/source/comment/associator.rb +0 -0
  240. /package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/{parser-3.3.11.1 → parser-3.3.12.0}/lib/parser/source/comment.rb +0 -0
  241. /package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/{parser-3.3.11.1 → parser-3.3.12.0}/lib/parser/source/map/collection.rb +0 -0
  242. /package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/{parser-3.3.11.1 → parser-3.3.12.0}/lib/parser/source/map/condition.rb +0 -0
  243. /package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/{parser-3.3.11.1 → parser-3.3.12.0}/lib/parser/source/map/constant.rb +0 -0
  244. /package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/{parser-3.3.11.1 → parser-3.3.12.0}/lib/parser/source/map/definition.rb +0 -0
  245. /package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/{parser-3.3.11.1 → parser-3.3.12.0}/lib/parser/source/map/for.rb +0 -0
  246. /package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/{parser-3.3.11.1 → parser-3.3.12.0}/lib/parser/source/map/heredoc.rb +0 -0
  247. /package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/{parser-3.3.11.1 → parser-3.3.12.0}/lib/parser/source/map/index.rb +0 -0
  248. /package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/{parser-3.3.11.1 → parser-3.3.12.0}/lib/parser/source/map/keyword.rb +0 -0
  249. /package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/{parser-3.3.11.1 → parser-3.3.12.0}/lib/parser/source/map/method_definition.rb +0 -0
  250. /package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/{parser-3.3.11.1 → parser-3.3.12.0}/lib/parser/source/map/objc_kwarg.rb +0 -0
  251. /package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/{parser-3.3.11.1 → parser-3.3.12.0}/lib/parser/source/map/operator.rb +0 -0
  252. /package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/{parser-3.3.11.1 → parser-3.3.12.0}/lib/parser/source/map/rescue_body.rb +0 -0
  253. /package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/{parser-3.3.11.1 → parser-3.3.12.0}/lib/parser/source/map/send.rb +0 -0
  254. /package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/{parser-3.3.11.1 → parser-3.3.12.0}/lib/parser/source/map/ternary.rb +0 -0
  255. /package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/{parser-3.3.11.1 → parser-3.3.12.0}/lib/parser/source/map/variable.rb +0 -0
  256. /package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/{parser-3.3.11.1 → parser-3.3.12.0}/lib/parser/source/map.rb +0 -0
  257. /package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/{parser-3.3.11.1 → parser-3.3.12.0}/lib/parser/source/range.rb +0 -0
  258. /package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/{parser-3.3.11.1 → parser-3.3.12.0}/lib/parser/source/rewriter/action.rb +0 -0
  259. /package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/{parser-3.3.11.1 → parser-3.3.12.0}/lib/parser/source/rewriter.rb +0 -0
  260. /package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/{parser-3.3.11.1 → parser-3.3.12.0}/lib/parser/source/tree_rewriter/action.rb +0 -0
  261. /package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/{parser-3.3.11.1 → parser-3.3.12.0}/lib/parser/source/tree_rewriter.rb +0 -0
  262. /package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/{parser-3.3.11.1 → parser-3.3.12.0}/lib/parser/static_environment.rb +0 -0
  263. /package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/{parser-3.3.11.1 → parser-3.3.12.0}/lib/parser/syntax_error.rb +0 -0
  264. /package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/{parser-3.3.11.1 → parser-3.3.12.0}/lib/parser/tree_rewriter.rb +0 -0
  265. /package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/{parser-3.3.11.1 → parser-3.3.12.0}/lib/parser/unknown_encoding_in_magic_comment_error.rb +0 -0
  266. /package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/{parser-3.3.11.1 → parser-3.3.12.0}/lib/parser/variables_stack.rb +0 -0
  267. /package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/{parser-3.3.11.1 → parser-3.3.12.0}/lib/parser.rb +0 -0
@@ -0,0 +1,449 @@
1
+ # frozen_string_literal: true
2
+
3
+ module NodeHandling
4
+ # AST levels to emit before truncating. Each emitted level costs at most two JSON nesting
5
+ # levels (the node object and the array/hash holding its children), so the JSON nesting limit
6
+ # must always be derived from this cap via .json_nesting_limit — JSON.generate's default of
7
+ # 100 dies at an AST depth of ~49, which used to make serialization fail and cost the whole
8
+ # file for inputs this cap never saw.
9
+ MAX_NESTING_DEPTH = 250
10
+
11
+ # The JSON.generate max_nesting that always accepts a tree truncated at +max_depth+ AST
12
+ # levels (+2 for the deepest node's own meta_data, plus headroom).
13
+ def self.json_nesting_limit(max_depth = MAX_NESTING_DEPTH)
14
+ max_depth * 2 + 16
15
+ end
16
+
17
+ # A pre-rendered piece of output. Payload values are never Fragments, which is how the writer
18
+ # below tells punctuation it queued from data it still has to render.
19
+ Fragment = Struct.new(:text)
20
+
21
+ OPEN_OBJECT = Fragment.new("{").freeze
22
+ CLOSE_OBJECT = Fragment.new("}").freeze
23
+ CLOSE_ARRAY = Fragment.new("]").freeze
24
+ COMMA = Fragment.new(",").freeze
25
+
26
+ # Serializes the payload without recursion.
27
+ #
28
+ # `JSON.generate` recurses once per nesting level, and how deep that can go is a property of the
29
+ # runtime, not of the JSON: on CRuby the C extension manages ~100_000 levels, but on TruffleRuby
30
+ # it runs through Sulong and a tree truncated at the default cap of 250 AST levels exhausts a
31
+ # worker thread's stack. The file was then logged and skipped — the outcome the depth cap exists
32
+ # to prevent, and one that made the output depend on the interpreter. Iterating has no depth
33
+ # limit, so a file that parses is emitted on every runtime. Scalars still go through the stdlib,
34
+ # since that is where the escaping rules live.
35
+ def self.dump_json(value)
36
+ out = +""
37
+ stack = [value]
38
+
39
+ until stack.empty?
40
+ item = stack.pop
41
+ case item
42
+ when Fragment
43
+ out << item.text
44
+ when Hash
45
+ out << "{"
46
+ queued = []
47
+ item.each_with_index do |(key, nested), index|
48
+ queued << Fragment.new("#{index.zero? ? "" : ","}#{key.to_s.to_json}:")
49
+ queued << nested
50
+ end
51
+ queued << CLOSE_OBJECT
52
+ stack.concat(queued.reverse!)
53
+ when Array
54
+ out << "["
55
+ queued = []
56
+ item.each_with_index do |nested, index|
57
+ queued << COMMA unless index.zero?
58
+ queued << nested
59
+ end
60
+ queued << CLOSE_ARRAY
61
+ stack.concat(queued.reverse!)
62
+ else
63
+ out << json_scalar(item)
64
+ end
65
+ end
66
+
67
+ out
68
+ end
69
+
70
+ # Scalars are rendered exactly as JSON.generate would, including UTF-8 passed through unescaped.
71
+ def self.json_scalar(value)
72
+ case value
73
+ when nil then "null"
74
+ when true then "true"
75
+ when false then "false"
76
+ when Integer then value.to_s
77
+ when Symbol then value.to_s.to_json
78
+ else value.to_json
79
+ end
80
+ end
81
+
82
+ SINGLETONS = %i[nil true false].freeze
83
+ LITERALS = %i[int float rational complex str sym __FILE__ __LINE__ __ENCODING__].freeze
84
+ CALLS = %i[send csend].freeze
85
+ DYNAMIC_LITERALS = %i[dsym dstr].freeze
86
+ CONTROL_KW = %i[break next].freeze
87
+ ARGUMENTS = %i[arg restarg blockarg kwrestarg shadowarg itarg blocknilarg].freeze
88
+ KW_ARGUMENTS = %i[kwarg kwnilarg kwoptarg].freeze
89
+ REFS = %i[nth_ref back_ref].freeze
90
+ FORWARD_ARGUMENTS = %i[forward_args forwarded_args forward_arg forwarded_restarg
91
+ forwarded_kwrestarg].freeze
92
+ ASSIGNMENTS = %i[or_asgn and_asgn lvasgn ivasgn gvasgn cvasgn match_with_lvasgn match_write].freeze
93
+ BIN_OP = %i[and or in_match match_pattern match_pattern_p].freeze
94
+ ACCESS = %i[self ident lvar cvar gvar ivar splat kwsplat block_pass
95
+ match_var].freeze
96
+ QUAL_ACCESS = [:casgn].freeze
97
+ COLLECTIONS = %i[args array hash mlhs hash_pattern array_pattern
98
+ array_pattern_with_tail find_pattern kwargs undef procarg0].freeze
99
+ SPECIAL_CMD = %i[yield super defined? xstr not].freeze
100
+ RANGE_OP = %i[erange irange eflipflop iflipflop].freeze
101
+
102
+ # A missing location member is expected for synthesized nodes, so it degrades to -1. The rescue
103
+ # is narrow on purpose (plan 03 §9): a bare `rescue` also hid genuine shape changes in the
104
+ # parser's location classes behind a plausible-looking offset.
105
+ def self.fetch_member(loc, method)
106
+ loc.public_send(method)
107
+ rescue NoMethodError => e
108
+ RubyAstGen::Logger.debug "No location member '#{method}' on #{loc.class}: #{e.message}"
109
+ -1
110
+ end
111
+
112
+ # Syntax facts the parser's locations already know, attached at the node level (plan 02 §4).
113
+ # Keys are emitted only when the fact holds, so the plain form stays key-less — the same
114
+ # convention as optional per-type keys like superclass. All values were verified identical on
115
+ # the prism translation and the parser gem.
116
+ #
117
+ # send/csend: call_operator ("." | "::" | "&.") when the call carries an explicit operator,
118
+ # and has_parentheses when it was written with parentheses. A block node's begin/end are
119
+ # `do`/`{` and `end`/`}`, so blocks deliberately get no has_parentheses key.
120
+ # heredoc strings: heredoc: true plus the character offsets of the body. meta_data covers
121
+ # only the `<<~SQL` marker, so these offsets are the only way to reach the body text
122
+ # without re-lexing the source.
123
+ # array: percent_array ("%w" | "%i" | "%W" | "%I") when the literal used percent notation,
124
+ # regardless of the delimiter that follows it.
125
+ def self.syntax_metadata(node_type, loc)
126
+ metadata = {}
127
+ return metadata unless loc
128
+
129
+ if CALLS.include?(node_type)
130
+ dot = loc.respond_to?(:dot) ? loc.dot : nil
131
+ metadata[:call_operator] = dot.source if dot
132
+ metadata[:has_parentheses] = true if loc.begin && loc.end
133
+ elsif loc.is_a?(::Parser::Source::Map::Heredoc)
134
+ metadata[:heredoc] = true
135
+ metadata[:heredoc_body_start] = loc.heredoc_body.begin_pos
136
+ metadata[:heredoc_body_end] = loc.heredoc_body.end_pos
137
+ elsif node_type == :array && loc.begin
138
+ prefix = loc.begin.source[/\A%[wiWI]/]
139
+ metadata[:percent_array] = prefix if prefix
140
+ end
141
+ metadata
142
+ end
143
+
144
+ # +state+ accumulates the truncation count for one file. It is threaded through the recursion
145
+ # (not kept in module state) because 10 worker threads share this module: a shared counter
146
+ # would race and attribute one file's truncations to another. The caller reads the count to
147
+ # emit one warning per file and the top-level truncated_nodes key.
148
+ def self.ast_to_json(node, code, current_depth: 0, file_path: nil, max_depth: MAX_NESTING_DEPTH,
149
+ state: {truncated: 0, first_type: nil})
150
+ return unless node.is_a?(Parser::AST::Node)
151
+
152
+ loc = node.location
153
+ meta_data = {
154
+ start_line: fetch_member(loc, :line),
155
+ start_column: fetch_member(loc, :column),
156
+ end_line: fetch_member(loc, :last_line),
157
+ end_column: fetch_member(loc, :last_column),
158
+ offset_start: loc&.expression&.begin_pos,
159
+ offset_end: loc&.expression&.end_pos,
160
+ code: extract_code_snippet(loc, code)
161
+ }
162
+ if current_depth >= max_depth
163
+ state[:truncated] += 1
164
+ state[:first_type] ||= node.type.to_s
165
+ return {type: node.type.to_s, meta_data: meta_data, nested: true, truncated: true}
166
+ end
167
+
168
+ json_children = node.children.map do |child|
169
+ if child.is_a?(Parser::AST::Node)
170
+ ast_to_json(child, code, current_depth: current_depth + 1, file_path: file_path,
171
+ max_depth: max_depth, state: state) # Recursively process child nodes
172
+ else
173
+ child # If it's not a node (e.g., literal), return as-is
174
+ end
175
+ end
176
+ base_hash = {
177
+ type: node.type.to_s, # Node type (e.g., :send, :def, etc.)
178
+ meta_data: meta_data,
179
+ children: json_children
180
+ }
181
+ add_node_properties(node.type, base_hash, file_path)
182
+ # Truncated nodes keep their documented {type, meta_data, nested, truncated} shape, which is
183
+ # why this happens after the truncation return above.
184
+ metadata = syntax_metadata(node.type, loc)
185
+ base_hash.merge!(metadata) unless metadata.empty?
186
+ # Statement lists live at every level (file root, class/module bodies, method bodies), and a
187
+ # `sig` block attaches to the def that follows it in the same list, so the check runs on
188
+ # every node's children (plan 02 §3).
189
+ mark_sig_attachments(node, json_children)
190
+ base_hash
191
+ end
192
+
193
+ # Marks `has_sig: true` on a def/defs whose immediately preceding sibling in the same
194
+ # statement list is a Sorbet `sig` block (`sig { params(...).returns(...) }` parses as a block
195
+ # on `send nil, :sig`). The consumer otherwise has to stitch the two statements by position.
196
+ # Like the other syntax facts, the key is emitted only when the fact holds.
197
+ def self.mark_sig_attachments(parent_node, json_children)
198
+ raw_children = parent_node.children
199
+ return unless raw_children.is_a?(Array)
200
+
201
+ json_children.each_with_index do |json_child, index|
202
+ next if index.zero?
203
+ next unless sig_block?(raw_children[index - 1])
204
+ next unless json_child.is_a?(Hash) && !json_child[:truncated] && %w[def defs].include?(json_child[:type])
205
+
206
+ json_child[:has_sig] = true
207
+ end
208
+ end
209
+
210
+ # True for every statement Sorbet accepts as a signature, all of which are a `sig` block
211
+ # somewhere underneath:
212
+ #
213
+ # sig { void } block on `send nil, :sig`
214
+ # sig(:final) { void } arguments are irrelevant
215
+ # sig { void }.checked(:never) the block is the receiver of a trailing send chain
216
+ # T::Sig::WithoutRuntime.sig { void } sig called on a constant path
217
+ #
218
+ # The trailing-send and constant-receiver forms are the reason this is not a single shape test:
219
+ # missing them marks a real signature as absent, and a consumer reading has_sig as authoritative
220
+ # (chen does) would type those methods as untyped.
221
+ def self.sig_block?(node)
222
+ return false unless node.is_a?(Parser::AST::Node)
223
+
224
+ case node.type
225
+ when :block then sig_call?(node.children[0])
226
+ when :send then sig_block?(node.children[0]) # `.checked(:never)` and friends
227
+ else false
228
+ end
229
+ end
230
+
231
+ def self.sig_call?(node)
232
+ node.is_a?(Parser::AST::Node) &&
233
+ node.type == :send &&
234
+ node.children[1] == :sig &&
235
+ sig_receiver?(node.children[0])
236
+ end
237
+
238
+ # No receiver (`extend T::Sig`), or a constant path such as T::Sig::WithoutRuntime. Anything
239
+ # else — `helper.sig { }` — is some other DSL, not a signature.
240
+ def self.sig_receiver?(receiver)
241
+ return true if receiver.nil?
242
+
243
+ receiver.is_a?(Parser::AST::Node) && receiver.type == :const &&
244
+ (receiver.children[0].nil? || sig_receiver?(receiver.children[0]))
245
+ end
246
+
247
+ def self.trim_string(string)
248
+ string.tr("\n", " ").gsub(/(\s)+/, " ")
249
+ end
250
+
251
+ def self.extract_code_snippet(location, source_code)
252
+ return nil unless location
253
+
254
+ range = location.expression || location
255
+ return nil unless range.is_a?(Parser::Source::Range)
256
+
257
+ snippet = source_code[range.begin_pos...range.end_pos]
258
+ trim_string(snippet.strip)
259
+ end
260
+
261
+ def self.add_node_properties(node_type, base_map, file_path)
262
+ children = base_map.delete(:children)
263
+
264
+ case node_type
265
+ when :def
266
+ base_map[:name] = children[0]
267
+ base_map[:arguments] = children[1]
268
+ base_map[:body] = children[2]
269
+ when :defs
270
+ base_map[:base] = children[0]
271
+ base_map[:name] = children[1]
272
+ base_map[:arguments] = children[2]
273
+ base_map[:body] = children[3]
274
+
275
+ when :class
276
+ base_map[:name] = children[0]
277
+ base_map[:superclass] = children[1] if children[1]
278
+ base_map[:body] = children[2]
279
+ when :sclass
280
+ base_map[:name] = children[0]
281
+ base_map[:def] = children[1]
282
+ base_map[:body] = children[2]
283
+ when :module
284
+ base_map[:name] = children[0]
285
+ base_map[:body] = children[1]
286
+
287
+ when :if
288
+ base_map[:condition] = children[0]
289
+ base_map[:then_branch] = children[1]
290
+ base_map[:else_branch] = children[2] if children[2]
291
+ when :while, :while_post
292
+ base_map[:condition] = children[0]
293
+ base_map[:body] = children[1]
294
+ when :for, :for_post
295
+ base_map[:variable] = children[0]
296
+ base_map[:collection] = children[1]
297
+ base_map[:body] = children[2]
298
+ when :block
299
+ base_map[:call_name] = children[0]
300
+ base_map[:arguments] = children[1]
301
+ base_map[:body] = children[2]
302
+ when :begin
303
+ base_map[:body] = children
304
+ when :kwbegin
305
+ base_map[:body] = children
306
+ when :case
307
+ base_map[:case_expression] = children[0]
308
+ base_map[:when_clauses] = children[1..-2]
309
+ base_map[:else_clause] = children[-1] if children[-1]
310
+ when :when
311
+ base_map[:conditions] = children[0..-2]
312
+ base_map[:then_branch] = children[-1]
313
+ when :unless
314
+ base_map[:condition] = children[0]
315
+ base_map[:then_branch] = children[1]
316
+ when :until, :until_post
317
+ base_map[:condition] = children[0]
318
+ base_map[:body] = children[1]
319
+ when :rescue, :case_match
320
+ base_map[:statement] = children[0]
321
+ base_map[:bodies] = children[1..-2]
322
+ base_map[:else_clause] = children[-1] if children[-1]
323
+ when :match_as
324
+ base_map[:value] = children[0]
325
+ base_map[:as] = children[1]
326
+ when :in_pattern
327
+ base_map[:pattern] = children[0]
328
+ base_map[:guard] = children[1]
329
+ base_map[:body] = children[2]
330
+ when :const_pattern
331
+ base_map[:const] = children[0]
332
+ base_map[:pattern] = children[1]
333
+ when :if_guard, :unless_guard
334
+ base_map[:condition] = children[0]
335
+ when :match_alt
336
+ base_map[:left] = children[0]
337
+ base_map[:right] = children[1]
338
+ when :match_current_line
339
+ base_map[:value] = children[0]
340
+ when :match_with_trailing_comma
341
+ base_map[:value] = children[0]
342
+ when :resbody
343
+ base_map[:exec_list] = children[0]
344
+ base_map[:exec_var] = children[1]
345
+ base_map[:body] = children[2]
346
+ when :ensure
347
+ base_map[:statement] = children[0]
348
+ base_map[:body] = children[1]
349
+ when :regopt
350
+ # `/x/imx` parses to s(:regopt, :i, :m, :x), so a single `value` loses every flag but the
351
+ # first. `value` stays as it was for readers that predate `options`; `options` carries all
352
+ # of them, and an option-less regexp keeps both keys absent.
353
+ base_map[:value] = children[0] if children[0]
354
+ base_map[:options] = children.compact.map(&:to_s) if children.compact.any?
355
+ when *REFS, :redo
356
+ base_map[:value] = children[0] if children[0]
357
+ when :return
358
+ base_map[:values] = children if children[0]
359
+ when *CONTROL_KW
360
+ base_map[:arguments] = children[0] if children[0]
361
+ when *FORWARD_ARGUMENTS, :empty_else, :lambda, :retry, :zsuper, :match_nil_pattern
362
+ # refer to :type
363
+ when *QUAL_ACCESS
364
+ base_map[:base] = children[0]
365
+ base_map[:lhs] = children[1]
366
+ base_map[:rhs] = children[2]
367
+ when :op_asgn
368
+ base_map[:lhs] = children[0]
369
+ base_map[:op] = children[1]
370
+ base_map[:rhs] = children[2]
371
+ when *ASSIGNMENTS
372
+ base_map[:lhs] = children[0]
373
+ base_map[:rhs] = children[1] if children[1]
374
+ when *BIN_OP
375
+ base_map[:lhs] = children[0]
376
+ base_map[:rhs] = children[1]
377
+ when *SINGLETONS
378
+ base_map[:value] = node_type
379
+ when *KW_ARGUMENTS
380
+ base_map[:key] = children[0]
381
+ base_map[:value] = children[1]
382
+ when *LITERALS, *ARGUMENTS, *ACCESS, :arg_expr, :blockarg_expr, :match_rest,
383
+ :numargs, :objc_restarg, :objc_varargs, :restarg_expr
384
+ base_map[:value] = children[0]
385
+ when :cbase
386
+ base_map[:base] = children[0]
387
+ base_map[:name] = children[1]
388
+
389
+ when *CALLS
390
+ base_map[:receiver] = children[0]
391
+ base_map[:name] = children[1]
392
+ base_map[:arguments] = children[2..] # Variable arguments
393
+ when :index
394
+ base_map[:receiver] = children[0]
395
+ base_map[:arguments] = children[1..]
396
+ when :indexasgn
397
+ base_map[:receiver] = children[0]
398
+ base_map[:arguments] = children[1...-1] || []
399
+ base_map[:value] = children[-1]
400
+ when *SPECIAL_CMD
401
+ base_map[:arguments] = children
402
+
403
+ when :pair, :optarg
404
+ base_map[:key] = children[0]
405
+ base_map[:value] = children[1]
406
+ when :objc_kwarg
407
+ base_map[:key] = children[0]
408
+ base_map[:value] = children[1]
409
+ when :const
410
+ base_map[:base] = children[0]
411
+ base_map[:name] = children[1]
412
+ when :alias
413
+ base_map[:alias] = children[0]
414
+ base_map[:name] = children[1]
415
+ when :regexp
416
+ base_map[:value] = children[0]
417
+ base_map[:opt] = children[1]
418
+ when *RANGE_OP
419
+ base_map[:start] = children[0]
420
+ base_map[:end] = children[1]
421
+ when :itblock
422
+ base_map[:call] = children[0]
423
+ base_map[:param] = children[1]
424
+ base_map[:body] = children[2]
425
+ when :numblock
426
+ base_map[:call] = children[0]
427
+ base_map[:param_idx] = children[1]
428
+ base_map[:body] = children[2]
429
+
430
+ when :masgn
431
+ base_map[:lhs] = children[0]
432
+ base_map[:rhs] = children[1]
433
+
434
+ when :preexe, :postexe
435
+ base_map[:body] = children[0]
436
+
437
+ when :pin
438
+ base_map[:value] = children[0]
439
+
440
+ when *COLLECTIONS, *DYNAMIC_LITERALS
441
+ # put :children back
442
+ base_map[:children] = children
443
+
444
+ else
445
+ RubyAstGen::Logger.warn "Unhandled AST node type: #{node_type} - #{file_path}"
446
+ base_map[:children] = children
447
+ end
448
+ end
449
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module RubyAstGen
4
- VERSION = "1.3.0"
4
+ VERSION = "2.0.1"
5
5
  end