@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.
- package/README.md +118 -7
- package/astgen.js +297 -57
- package/package.json +9 -6
- package/plugins/composer/installed.php +6 -6
- package/plugins/rubyastgen/Gemfile +6 -4
- package/plugins/rubyastgen/Gemfile.lock +5 -8
- package/plugins/rubyastgen/bundle/ruby/4.0.0/bundler/gems/ruby_ast_gen-4ac84327b3af/Gemfile +11 -0
- package/plugins/rubyastgen/bundle/ruby/4.0.0/bundler/gems/ruby_ast_gen-4ac84327b3af/exe/ruby_ast_gen +55 -0
- package/plugins/rubyastgen/bundle/ruby/4.0.0/bundler/gems/ruby_ast_gen-4ac84327b3af/lib/ruby_ast_gen/cli.rb +133 -0
- package/plugins/rubyastgen/bundle/ruby/4.0.0/bundler/gems/ruby_ast_gen-4ac84327b3af/lib/ruby_ast_gen/node_handling.rb +449 -0
- 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
- package/plugins/rubyastgen/bundle/ruby/4.0.0/bundler/gems/ruby_ast_gen-4ac84327b3af/lib/ruby_ast_gen.rb +888 -0
- package/plugins/rubyastgen/bundle/ruby/4.0.0/bundler/gems/ruby_ast_gen-4ac84327b3af/ruby_ast_gen.gemspec +25 -0
- 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
- 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
- package/plugins/rubyastgen/bundle/ruby/4.0.0/specifications/ast-2.4.3.gemspec +29 -0
- package/plugins/rubyastgen/bundle/ruby/4.0.0/specifications/bundler-2.6.9.gemspec +25 -0
- package/plugins/rubyastgen/bundle/ruby/4.0.0/specifications/ostruct-0.6.3.gemspec +22 -0
- package/plugins/rubyastgen/bundle/ruby/4.0.0/specifications/parser-3.3.12.0.gemspec +37 -0
- package/rbastgen.js +102 -13
- package/scalasem.js +11 -2
- package/plugins/bin/bundler +0 -14
- package/plugins/bin/ruby_ast_gen +0 -14
- package/plugins/rubyastgen/bundle/bundler/setup.rb +0 -44
- package/plugins/rubyastgen/bundle/ruby/4.0.0/bundler/gems/ruby_ast_gen-cc312ebf06b4/exe/ruby_ast_gen +0 -63
- package/plugins/rubyastgen/bundle/ruby/4.0.0/bundler/gems/ruby_ast_gen-cc312ebf06b4/lib/ruby_ast_gen/node_handling.rb +0 -269
- package/plugins/rubyastgen/bundle/ruby/4.0.0/bundler/gems/ruby_ast_gen-cc312ebf06b4/lib/ruby_ast_gen.rb +0 -218
- package/plugins/rubyastgen/bundle/ruby/4.0.0/extensions/x86_64-linux/4.0.0/prism-1.9.0/gem.build_complete +0 -0
- package/plugins/rubyastgen/bundle/ruby/4.0.0/extensions/x86_64-linux/4.0.0/prism-1.9.0/gem_make.out +0 -44
- package/plugins/rubyastgen/bundle/ruby/4.0.0/extensions/x86_64-linux/4.0.0/prism-1.9.0/mkmf.log +0 -74
- package/plugins/rubyastgen/bundle/ruby/4.0.0/extensions/x86_64-linux/4.0.0/prism-1.9.0/prism/prism.so +0 -0
- package/plugins/rubyastgen/bundle/ruby/4.0.0/extensions/x86_64-linux/4.0.0/racc-1.8.1/gem.build_complete +0 -0
- package/plugins/rubyastgen/bundle/ruby/4.0.0/extensions/x86_64-linux/4.0.0/racc-1.8.1/gem_make.out +0 -18
- package/plugins/rubyastgen/bundle/ruby/4.0.0/extensions/x86_64-linux/4.0.0/racc-1.8.1/racc/cparse.so +0 -0
- package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/BSDmakefile +0 -58
- package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/Makefile +0 -116
- package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/ext/prism/Makefile +0 -273
- package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/ext/prism/api_node.c +0 -6945
- package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/ext/prism/api_pack.c +0 -276
- package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/ext/prism/extconf.rb +0 -127
- package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/ext/prism/extension.c +0 -1427
- package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/ext/prism/extension.h +0 -19
- package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/include/prism/ast.h +0 -8254
- package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/include/prism/defines.h +0 -260
- package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/include/prism/diagnostic.h +0 -458
- package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/include/prism/encoding.h +0 -283
- package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/include/prism/node.h +0 -129
- package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/include/prism/options.h +0 -488
- package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/include/prism/pack.h +0 -163
- package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/include/prism/parser.h +0 -936
- package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/include/prism/prettyprint.h +0 -34
- package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/include/prism/regexp.h +0 -43
- package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/include/prism/static_literals.h +0 -121
- package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/include/prism/util/pm_buffer.h +0 -236
- package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/include/prism/util/pm_char.h +0 -204
- package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/include/prism/util/pm_constant_pool.h +0 -218
- package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/include/prism/util/pm_integer.h +0 -130
- package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/include/prism/util/pm_list.h +0 -103
- package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/include/prism/util/pm_memchr.h +0 -29
- package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/include/prism/util/pm_newline_list.h +0 -113
- package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/include/prism/util/pm_string.h +0 -200
- package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/include/prism/util/pm_strncasecmp.h +0 -32
- package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/include/prism/util/pm_strpbrk.h +0 -46
- package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/include/prism/version.h +0 -29
- package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/include/prism.h +0 -408
- package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/lib/prism/compiler.rb +0 -801
- package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/lib/prism/desugar_compiler.rb +0 -392
- package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/lib/prism/dispatcher.rb +0 -2210
- package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/lib/prism/dot_visitor.rb +0 -4767
- package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/lib/prism/dsl.rb +0 -1003
- package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/lib/prism/ffi.rb +0 -578
- package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/lib/prism/inspect_visitor.rb +0 -2393
- package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/lib/prism/lex_compat.rb +0 -911
- package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/lib/prism/mutation_compiler.rb +0 -772
- package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/lib/prism/node.rb +0 -19966
- package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/lib/prism/node_ext.rb +0 -511
- package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/lib/prism/pack.rb +0 -230
- package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/lib/prism/parse_result/comments.rb +0 -188
- package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/lib/prism/parse_result/errors.rb +0 -66
- package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/lib/prism/parse_result/newlines.rb +0 -155
- package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/lib/prism/parse_result.rb +0 -907
- package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/lib/prism/pattern.rb +0 -269
- package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/lib/prism/polyfill/append_as_bytes.rb +0 -15
- package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/lib/prism/polyfill/byteindex.rb +0 -13
- package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/lib/prism/polyfill/scan_byte.rb +0 -14
- package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/lib/prism/polyfill/unpack1.rb +0 -14
- package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/lib/prism/polyfill/warn.rb +0 -36
- package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/lib/prism/prism.so +0 -0
- package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/lib/prism/reflection.rb +0 -416
- package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/lib/prism/relocation.rb +0 -505
- package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/lib/prism/serialize.rb +0 -2400
- package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/lib/prism/string_query.rb +0 -31
- package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/lib/prism/translation/parser/builder.rb +0 -62
- package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/lib/prism/translation/parser/compiler.rb +0 -2234
- package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/lib/prism/translation/parser/lexer.rb +0 -820
- package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/lib/prism/translation/parser.rb +0 -376
- package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/lib/prism/translation/parser_current.rb +0 -26
- package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/lib/prism/translation/parser_versions.rb +0 -36
- package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/lib/prism/translation/ripper/filter.rb +0 -53
- package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/lib/prism/translation/ripper/lexer.rb +0 -135
- package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/lib/prism/translation/ripper/sexp.rb +0 -126
- package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/lib/prism/translation/ripper/shim.rb +0 -5
- package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/lib/prism/translation/ripper.rb +0 -3520
- package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/lib/prism/translation/ruby_parser.rb +0 -1964
- package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/lib/prism/translation.rb +0 -18
- package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/lib/prism/visitor.rb +0 -813
- package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/lib/prism.rb +0 -98
- package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/rbi/prism/compiler.rbi +0 -12
- package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/rbi/prism/dsl.rbi +0 -524
- package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/rbi/prism/inspect_visitor.rbi +0 -12
- package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/rbi/prism/node.rbi +0 -8750
- package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/rbi/prism/node_ext.rbi +0 -107
- package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/rbi/prism/parse_result.rbi +0 -404
- package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/rbi/prism/reflection.rbi +0 -58
- package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/rbi/prism/string_query.rbi +0 -12
- package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/rbi/prism/translation/parser.rbi +0 -11
- package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/rbi/prism/translation/parser_versions.rbi +0 -23
- package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/rbi/prism/translation/ripper.rbi +0 -15
- package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/rbi/prism/visitor.rbi +0 -473
- package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/rbi/prism.rbi +0 -63
- package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/sig/prism/compiler.rbs +0 -9
- package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/sig/prism/dispatcher.rbs +0 -19
- package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/sig/prism/dot_visitor.rbs +0 -6
- package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/sig/prism/dsl.rbs +0 -351
- package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/sig/prism/inspect_visitor.rbs +0 -22
- package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/sig/prism/lex_compat.rbs +0 -10
- package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/sig/prism/mutation_compiler.rbs +0 -159
- package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/sig/prism/node.rbs +0 -4042
- package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/sig/prism/node_ext.rbs +0 -149
- package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/sig/prism/pack.rbs +0 -43
- package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/sig/prism/parse_result/comments.rbs +0 -38
- package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/sig/prism/parse_result.rbs +0 -197
- package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/sig/prism/pattern.rbs +0 -13
- package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/sig/prism/reflection.rbs +0 -50
- package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/sig/prism/relocation.rbs +0 -185
- package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/sig/prism/serialize.rbs +0 -8
- package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/sig/prism/string_query.rbs +0 -11
- package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/sig/prism/visitor.rbs +0 -169
- package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/sig/prism.rbs +0 -272
- package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/src/diagnostic.c +0 -854
- package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/src/encoding.c +0 -5340
- package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/src/node.c +0 -8685
- package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/src/options.c +0 -338
- package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/src/pack.c +0 -509
- package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/src/prettyprint.c +0 -8957
- package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/src/prism.c +0 -22679
- package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/src/regexp.c +0 -790
- package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/src/serialize.c +0 -2274
- package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/src/static_literals.c +0 -617
- package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/src/token_type.c +0 -703
- package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/src/util/pm_buffer.c +0 -357
- package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/src/util/pm_char.c +0 -318
- package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/src/util/pm_constant_pool.c +0 -342
- package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/src/util/pm_integer.c +0 -670
- package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/src/util/pm_list.c +0 -49
- package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/src/util/pm_memchr.c +0 -35
- package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/src/util/pm_newline_list.c +0 -125
- package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/src/util/pm_string.c +0 -381
- package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/src/util/pm_strncasecmp.c +0 -36
- package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/src/util/pm_strpbrk.c +0 -206
- package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/racc-1.8.1/BSDL +0 -22
- package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/racc-1.8.1/COPYING +0 -56
- package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/racc-1.8.1/ChangeLog +0 -846
- package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/racc-1.8.1/README.ja.rdoc +0 -58
- package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/racc-1.8.1/README.rdoc +0 -60
- package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/racc-1.8.1/TODO +0 -5
- package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/racc-1.8.1/bin/racc +0 -320
- package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/racc-1.8.1/ext/racc/cparse/Makefile +0 -273
- package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/racc-1.8.1/ext/racc/cparse/cparse.c +0 -840
- package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/racc-1.8.1/ext/racc/cparse/extconf.rb +0 -8
- package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/racc-1.8.1/lib/racc/compat.rb +0 -33
- package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/racc-1.8.1/lib/racc/cparse.so +0 -0
- package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/racc-1.8.1/lib/racc/debugflags.rb +0 -60
- package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/racc-1.8.1/lib/racc/exception.rb +0 -16
- package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/racc-1.8.1/lib/racc/grammar.rb +0 -1191
- package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/racc-1.8.1/lib/racc/grammarfileparser.rb +0 -667
- package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/racc-1.8.1/lib/racc/info.rb +0 -18
- package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/racc-1.8.1/lib/racc/iset.rb +0 -92
- package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/racc-1.8.1/lib/racc/logfilegenerator.rb +0 -212
- package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/racc-1.8.1/lib/racc/parser-text.rb +0 -644
- package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/racc-1.8.1/lib/racc/parser.rb +0 -630
- package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/racc-1.8.1/lib/racc/parserfilegenerator.rb +0 -473
- package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/racc-1.8.1/lib/racc/sourcetext.rb +0 -35
- package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/racc-1.8.1/lib/racc/state.rb +0 -976
- package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/racc-1.8.1/lib/racc/statetransitiontable.rb +0 -311
- package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/racc-1.8.1/lib/racc/static.rb +0 -5
- package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/racc-1.8.1/lib/racc.rb +0 -6
- /package/plugins/rubyastgen/bundle/ruby/4.0.0/bundler/gems/{ruby_ast_gen-cc312ebf06b4 → ruby_ast_gen-4ac84327b3af}/.rspec +0 -0
- /package/plugins/rubyastgen/bundle/ruby/4.0.0/bundler/gems/{ruby_ast_gen-cc312ebf06b4 → ruby_ast_gen-4ac84327b3af}/bin/console +0 -0
- /package/plugins/rubyastgen/bundle/ruby/4.0.0/bundler/gems/{ruby_ast_gen-cc312ebf06b4 → ruby_ast_gen-4ac84327b3af}/bin/setup +0 -0
- /package/plugins/rubyastgen/bundle/ruby/4.0.0/bundler/gems/{ruby_ast_gen-cc312ebf06b4 → ruby_ast_gen-4ac84327b3af}/update_version.rb +0 -0
- /package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/{parser-3.3.11.1 → parser-3.3.12.0}/bin/ruby-parse +0 -0
- /package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/{parser-3.3.11.1 → parser-3.3.12.0}/bin/ruby-rewrite +0 -0
- /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
- /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
- /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
- /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
- /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
- /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
- /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
- /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
- /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
- /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
- /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
- /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
- /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
- /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
- /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
- /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
- /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
- /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
- /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
- /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
- /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
- /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
- /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
- /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
- /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
- /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
- /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
- /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
- /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
- /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
- /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
- /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
- /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
- /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
- /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
- /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
- /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
- /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
- /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
- /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
- /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
- /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
- /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
- /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
- /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
- /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
- /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
- /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
- /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
- /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
- /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
- /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
- /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
- /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
- /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
- /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
- /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
- /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
- /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
- /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
- /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
- /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
- /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
- /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
- /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
- /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
- /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
- /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
- /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
- /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
- /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
- /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
- /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
- /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
|