prism 0.17.1 → 0.19.0

Sign up to get free protection for your applications and to get access to all the features.
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