prism 0.17.1 → 0.19.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 (70) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +60 -1
  3. data/Makefile +5 -5
  4. data/README.md +4 -3
  5. data/config.yml +214 -68
  6. data/docs/build_system.md +6 -6
  7. data/docs/building.md +10 -3
  8. data/docs/configuration.md +11 -9
  9. data/docs/encoding.md +92 -88
  10. data/docs/heredocs.md +1 -1
  11. data/docs/javascript.md +29 -1
  12. data/docs/local_variable_depth.md +229 -0
  13. data/docs/ruby_api.md +16 -0
  14. data/docs/serialization.md +18 -13
  15. data/ext/prism/api_node.c +411 -240
  16. data/ext/prism/extconf.rb +97 -127
  17. data/ext/prism/extension.c +97 -33
  18. data/ext/prism/extension.h +1 -1
  19. data/include/prism/ast.h +377 -159
  20. data/include/prism/defines.h +17 -0
  21. data/include/prism/diagnostic.h +38 -6
  22. data/include/prism/{enc/pm_encoding.h → encoding.h} +126 -64
  23. data/include/prism/options.h +2 -2
  24. data/include/prism/parser.h +62 -36
  25. data/include/prism/regexp.h +2 -2
  26. data/include/prism/util/pm_buffer.h +9 -1
  27. data/include/prism/util/pm_memchr.h +2 -2
  28. data/include/prism/util/pm_strpbrk.h +3 -3
  29. data/include/prism/version.h +3 -3
  30. data/include/prism.h +13 -15
  31. data/lib/prism/compiler.rb +15 -3
  32. data/lib/prism/debug.rb +13 -4
  33. data/lib/prism/desugar_compiler.rb +4 -3
  34. data/lib/prism/dispatcher.rb +70 -14
  35. data/lib/prism/dot_visitor.rb +4612 -0
  36. data/lib/prism/dsl.rb +77 -57
  37. data/lib/prism/ffi.rb +19 -6
  38. data/lib/prism/lex_compat.rb +19 -9
  39. data/lib/prism/mutation_compiler.rb +26 -6
  40. data/lib/prism/node.rb +1314 -522
  41. data/lib/prism/node_ext.rb +102 -19
  42. data/lib/prism/parse_result.rb +58 -27
  43. data/lib/prism/ripper_compat.rb +49 -34
  44. data/lib/prism/serialize.rb +251 -227
  45. data/lib/prism/visitor.rb +15 -3
  46. data/lib/prism.rb +21 -4
  47. data/prism.gemspec +7 -9
  48. data/rbi/prism.rbi +688 -284
  49. data/rbi/prism_static.rbi +3 -0
  50. data/sig/prism.rbs +426 -156
  51. data/sig/prism_static.rbs +1 -0
  52. data/src/diagnostic.c +280 -216
  53. data/src/encoding.c +5137 -0
  54. data/src/node.c +99 -21
  55. data/src/options.c +21 -2
  56. data/src/prettyprint.c +1743 -1241
  57. data/src/prism.c +1774 -831
  58. data/src/regexp.c +15 -15
  59. data/src/serialize.c +261 -164
  60. data/src/util/pm_buffer.c +10 -1
  61. data/src/util/pm_memchr.c +1 -1
  62. data/src/util/pm_strpbrk.c +4 -4
  63. metadata +8 -10
  64. data/src/enc/pm_big5.c +0 -53
  65. data/src/enc/pm_euc_jp.c +0 -59
  66. data/src/enc/pm_gbk.c +0 -62
  67. data/src/enc/pm_shift_jis.c +0 -57
  68. data/src/enc/pm_tables.c +0 -743
  69. data/src/enc/pm_unicode.c +0 -2369
  70. data/src/enc/pm_windows_31j.c +0 -57
data/lib/prism/visitor.rb CHANGED
@@ -111,9 +111,15 @@ module Prism
111
111
  # Visit a CallOrWriteNode node
112
112
  alias visit_call_or_write_node visit_child_nodes
113
113
 
114
+ # Visit a CallTargetNode node
115
+ alias visit_call_target_node visit_child_nodes
116
+
114
117
  # Visit a CapturePatternNode node
115
118
  alias visit_capture_pattern_node visit_child_nodes
116
119
 
120
+ # Visit a CaseMatchNode node
121
+ alias visit_case_match_node visit_child_nodes
122
+
117
123
  # Visit a CaseNode node
118
124
  alias visit_case_node visit_child_nodes
119
125
 
@@ -249,6 +255,9 @@ module Prism
249
255
  # Visit a ImplicitNode node
250
256
  alias visit_implicit_node visit_child_nodes
251
257
 
258
+ # Visit a ImplicitRestNode node
259
+ alias visit_implicit_rest_node visit_child_nodes
260
+
252
261
  # Visit a InNode node
253
262
  alias visit_in_node visit_child_nodes
254
263
 
@@ -261,6 +270,9 @@ module Prism
261
270
  # Visit a IndexOrWriteNode node
262
271
  alias visit_index_or_write_node visit_child_nodes
263
272
 
273
+ # Visit a IndexTargetNode node
274
+ alias visit_index_target_node visit_child_nodes
275
+
264
276
  # Visit a InstanceVariableAndWriteNode node
265
277
  alias visit_instance_variable_and_write_node visit_child_nodes
266
278
 
@@ -357,6 +369,9 @@ module Prism
357
369
  # Visit a NoKeywordsParameterNode node
358
370
  alias visit_no_keywords_parameter_node visit_child_nodes
359
371
 
372
+ # Visit a NumberedParametersNode node
373
+ alias visit_numbered_parameters_node visit_child_nodes
374
+
360
375
  # Visit a NumberedReferenceReadNode node
361
376
  alias visit_numbered_reference_read_node visit_child_nodes
362
377
 
@@ -444,9 +459,6 @@ module Prism
444
459
  # Visit a StatementsNode node
445
460
  alias visit_statements_node visit_child_nodes
446
461
 
447
- # Visit a StringConcatNode node
448
- alias visit_string_concat_node visit_child_nodes
449
-
450
462
  # Visit a StringNode node
451
463
  alias visit_string_node visit_child_nodes
452
464
 
data/lib/prism.rb CHANGED
@@ -16,6 +16,7 @@ module Prism
16
16
  autoload :Debug, "prism/debug"
17
17
  autoload :DesugarCompiler, "prism/desugar_compiler"
18
18
  autoload :Dispatcher, "prism/dispatcher"
19
+ autoload :DotVisitor, "prism/dot_visitor"
19
20
  autoload :DSL, "prism/dsl"
20
21
  autoload :LexCompat, "prism/lex_compat"
21
22
  autoload :LexRipper, "prism/lex_compat"
@@ -35,11 +36,11 @@ module Prism
35
36
  private_constant :LexRipper
36
37
 
37
38
  # :call-seq:
38
- # Prism::lex_compat(source, **options) -> Array
39
+ # Prism::lex_compat(source, **options) -> ParseResult
39
40
  #
40
- # Returns an array of tokens that closely resembles that of the Ripper lexer.
41
- # The only difference is that since we don't keep track of lexer state in the
42
- # same way, it's going to always return the NONE state.
41
+ # Returns a parse result whose value is an array of tokens that closely
42
+ # resembles the return value of Ripper::lex. The main difference is that the
43
+ # `:on_sp` token is not emitted.
43
44
  #
44
45
  # For supported options, see Prism::parse.
45
46
  def self.lex_compat(source, **options)
@@ -63,6 +64,22 @@ module Prism
63
64
  def self.load(source, serialized)
64
65
  Serialize.load(source, serialized)
65
66
  end
67
+
68
+ # :call-seq:
69
+ # Prism::parse_failure?(source, **options) -> bool
70
+ #
71
+ # Returns true if the source parses with errors.
72
+ def self.parse_failure?(source, **options)
73
+ !parse_success?(source, **options)
74
+ end
75
+
76
+ # :call-seq:
77
+ # Prism::parse_file_failure?(filepath, **options) -> bool
78
+ #
79
+ # Returns true if the file at filepath parses with errors.
80
+ def self.parse_file_failure?(filepath, **options)
81
+ !parse_file_success?(filepath, **options)
82
+ end
66
83
  end
67
84
 
68
85
  require_relative "prism/node"
data/prism.gemspec CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  Gem::Specification.new do |spec|
4
4
  spec.name = "prism"
5
- spec.version = "0.17.1"
5
+ spec.version = "0.19.0"
6
6
  spec.authors = ["Shopify"]
7
7
  spec.email = ["ruby@shopify.com"]
8
8
 
@@ -29,6 +29,7 @@ Gem::Specification.new do |spec|
29
29
  "docs/fuzzing.md",
30
30
  "docs/heredocs.md",
31
31
  "docs/javascript.md",
32
+ "docs/local_variable_depth.md",
32
33
  "docs/mapping.md",
33
34
  "docs/releasing.md",
34
35
  "docs/ripper.md",
@@ -43,7 +44,7 @@ Gem::Specification.new do |spec|
43
44
  "include/prism/ast.h",
44
45
  "include/prism/defines.h",
45
46
  "include/prism/diagnostic.h",
46
- "include/prism/enc/pm_encoding.h",
47
+ "include/prism/encoding.h",
47
48
  "include/prism/node.h",
48
49
  "include/prism/options.h",
49
50
  "include/prism/pack.h",
@@ -67,6 +68,7 @@ Gem::Specification.new do |spec|
67
68
  "lib/prism/debug.rb",
68
69
  "lib/prism/desugar_compiler.rb",
69
70
  "lib/prism/dispatcher.rb",
71
+ "lib/prism/dot_visitor.rb",
70
72
  "lib/prism/dsl.rb",
71
73
  "lib/prism/ffi.rb",
72
74
  "lib/prism/lex_compat.rb",
@@ -83,13 +85,7 @@ Gem::Specification.new do |spec|
83
85
  "lib/prism/parse_result/newlines.rb",
84
86
  "lib/prism/visitor.rb",
85
87
  "src/diagnostic.c",
86
- "src/enc/pm_big5.c",
87
- "src/enc/pm_euc_jp.c",
88
- "src/enc/pm_gbk.c",
89
- "src/enc/pm_shift_jis.c",
90
- "src/enc/pm_tables.c",
91
- "src/enc/pm_unicode.c",
92
- "src/enc/pm_windows_31j.c",
88
+ "src/encoding.c",
93
89
  "src/node.c",
94
90
  "src/pack.c",
95
91
  "src/prettyprint.c",
@@ -118,4 +114,6 @@ Gem::Specification.new do |spec|
118
114
 
119
115
  spec.extensions = ["ext/prism/extconf.rb"]
120
116
  spec.metadata["allowed_push_host"] = "https://rubygems.org"
117
+ spec.metadata["source_code_uri"] = "https://github.com/ruby/prism"
118
+ spec.metadata["changelog_uri"] = "https://github.com/ruby/prism/blob/main/CHANGELOG.md"
121
119
  end