prism 0.30.0 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (57) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +31 -1
  3. data/README.md +3 -1
  4. data/config.yml +185 -126
  5. data/docs/serialization.md +3 -0
  6. data/ext/prism/api_node.c +2843 -2085
  7. data/ext/prism/extconf.rb +1 -1
  8. data/ext/prism/extension.c +35 -25
  9. data/ext/prism/extension.h +2 -2
  10. data/include/prism/ast.h +1048 -69
  11. data/include/prism/defines.h +9 -0
  12. data/include/prism/diagnostic.h +11 -3
  13. data/include/prism/options.h +55 -1
  14. data/include/prism/parser.h +27 -3
  15. data/include/prism/regexp.h +2 -1
  16. data/include/prism/util/pm_integer.h +6 -6
  17. data/include/prism/util/pm_newline_list.h +11 -0
  18. data/include/prism/util/pm_string.h +1 -0
  19. data/include/prism/version.h +3 -3
  20. data/lib/prism/desugar_compiler.rb +111 -74
  21. data/lib/prism/dispatcher.rb +2 -1
  22. data/lib/prism/dot_visitor.rb +21 -31
  23. data/lib/prism/dsl.rb +656 -471
  24. data/lib/prism/ffi.rb +3 -0
  25. data/lib/prism/inspect_visitor.rb +285 -57
  26. data/lib/prism/mutation_compiler.rb +5 -5
  27. data/lib/prism/node.rb +2282 -4754
  28. data/lib/prism/node_ext.rb +72 -11
  29. data/lib/prism/parse_result/errors.rb +65 -0
  30. data/lib/prism/parse_result/newlines.rb +28 -28
  31. data/lib/prism/parse_result.rb +25 -2
  32. data/lib/prism/reflection.rb +7 -7
  33. data/lib/prism/serialize.rb +468 -610
  34. data/lib/prism/translation/parser/compiler.rb +18 -18
  35. data/lib/prism/translation/parser/lexer.rb +1 -1
  36. data/lib/prism/translation/parser.rb +3 -3
  37. data/lib/prism/translation/ripper.rb +14 -14
  38. data/lib/prism/translation/ruby_parser.rb +43 -7
  39. data/prism.gemspec +3 -1
  40. data/rbi/prism/dsl.rbi +521 -0
  41. data/rbi/prism/node.rbi +1456 -5616
  42. data/rbi/prism.rbi +16 -16
  43. data/sig/prism/dsl.rbs +189 -305
  44. data/sig/prism/node.rbs +702 -603
  45. data/sig/prism/parse_result.rbs +2 -0
  46. data/src/diagnostic.c +22 -6
  47. data/src/node.c +277 -284
  48. data/src/options.c +18 -0
  49. data/src/prettyprint.c +99 -108
  50. data/src/prism.c +1282 -760
  51. data/src/regexp.c +72 -4
  52. data/src/serialize.c +165 -50
  53. data/src/token_type.c +2 -2
  54. data/src/util/pm_integer.c +14 -14
  55. data/src/util/pm_newline_list.c +29 -0
  56. data/src/util/pm_string.c +9 -5
  57. metadata +4 -2
@@ -909,10 +909,10 @@ module Prism
909
909
  table.field("conditions", "[]")
910
910
  end
911
911
 
912
- # consequent
913
- unless (consequent = node.consequent).nil?
914
- table.field("consequent", port: true)
915
- digraph.edge("#{id}:consequent -> #{node_id(consequent)};")
912
+ # else_clause
913
+ unless (else_clause = node.else_clause).nil?
914
+ table.field("else_clause", port: true)
915
+ digraph.edge("#{id}:else_clause -> #{node_id(else_clause)};")
916
916
  end
917
917
 
918
918
  # case_keyword_loc
@@ -954,10 +954,10 @@ module Prism
954
954
  table.field("conditions", "[]")
955
955
  end
956
956
 
957
- # consequent
958
- unless (consequent = node.consequent).nil?
959
- table.field("consequent", port: true)
960
- digraph.edge("#{id}:consequent -> #{node_id(consequent)};")
957
+ # else_clause
958
+ unless (else_clause = node.else_clause).nil?
959
+ table.field("else_clause", port: true)
960
+ digraph.edge("#{id}:else_clause -> #{node_id(else_clause)};")
961
961
  end
962
962
 
963
963
  # case_keyword_loc
@@ -2130,10 +2130,10 @@ module Prism
2130
2130
  digraph.edge("#{id}:statements -> #{node_id(statements)};")
2131
2131
  end
2132
2132
 
2133
- # consequent
2134
- unless (consequent = node.consequent).nil?
2135
- table.field("consequent", port: true)
2136
- digraph.edge("#{id}:consequent -> #{node_id(consequent)};")
2133
+ # subsequent
2134
+ unless (subsequent = node.subsequent).nil?
2135
+ table.field("subsequent", port: true)
2136
+ digraph.edge("#{id}:subsequent -> #{node_id(subsequent)};")
2137
2137
  end
2138
2138
 
2139
2139
  # end_keyword_loc
@@ -3960,10 +3960,10 @@ module Prism
3960
3960
  digraph.edge("#{id}:statements -> #{node_id(statements)};")
3961
3961
  end
3962
3962
 
3963
- # consequent
3964
- unless (consequent = node.consequent).nil?
3965
- table.field("consequent", port: true)
3966
- digraph.edge("#{id}:consequent -> #{node_id(consequent)};")
3963
+ # subsequent
3964
+ unless (subsequent = node.subsequent).nil?
3965
+ table.field("subsequent", port: true)
3966
+ digraph.edge("#{id}:subsequent -> #{node_id(subsequent)};")
3967
3967
  end
3968
3968
 
3969
3969
  digraph.nodes << <<~DOT
@@ -4022,9 +4022,6 @@ module Prism
4022
4022
  table = Table.new("ReturnNode")
4023
4023
  id = node_id(node)
4024
4024
 
4025
- # flags
4026
- table.field("flags", return_node_flags_inspect(node))
4027
-
4028
4025
  # keyword_loc
4029
4026
  table.field("keyword_loc", location_inspect(node.keyword_loc))
4030
4027
 
@@ -4386,10 +4383,10 @@ module Prism
4386
4383
  digraph.edge("#{id}:statements -> #{node_id(statements)};")
4387
4384
  end
4388
4385
 
4389
- # consequent
4390
- unless (consequent = node.consequent).nil?
4391
- table.field("consequent", port: true)
4392
- digraph.edge("#{id}:consequent -> #{node_id(consequent)};")
4386
+ # else_clause
4387
+ unless (else_clause = node.else_clause).nil?
4388
+ table.field("else_clause", port: true)
4389
+ digraph.edge("#{id}:else_clause -> #{node_id(else_clause)};")
4393
4390
  end
4394
4391
 
4395
4392
  # end_keyword_loc
@@ -4597,6 +4594,7 @@ module Prism
4597
4594
  flags = [] #: Array[String]
4598
4595
  flags << "contains_keywords" if node.contains_keywords?
4599
4596
  flags << "contains_keyword_splat" if node.contains_keyword_splat?
4597
+ flags << "contains_splat" if node.contains_splat?
4600
4598
  flags.join(", ")
4601
4599
  end
4602
4600
 
@@ -4698,14 +4696,6 @@ module Prism
4698
4696
  flags.join(", ")
4699
4697
  end
4700
4698
 
4701
- # Inspect a node that has return_node_flags flags to display the flags as a
4702
- # comma-separated list.
4703
- def return_node_flags_inspect(node)
4704
- flags = [] #: Array[String]
4705
- flags << "redundant" if node.redundant?
4706
- flags.join(", ")
4707
- end
4708
-
4709
4699
  # Inspect a node that has shareable_constant_node_flags flags to display the flags as a
4710
4700
  # comma-separated list.
4711
4701
  def shareable_constant_node_flags_inspect(node)