herb 0.7.2-x86-linux-gnu → 0.7.4-x86-linux-gnu

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 (133) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +2 -0
  3. data/README.md +1 -1
  4. data/Rakefile +46 -1
  5. data/config.yml +714 -0
  6. data/ext/herb/extconf.rb +2 -1
  7. data/ext/herb/nodes.c +1 -1
  8. data/herb.gemspec +3 -0
  9. data/lib/herb/3.0/herb.so +0 -0
  10. data/lib/herb/3.1/herb.so +0 -0
  11. data/lib/herb/3.2/herb.so +0 -0
  12. data/lib/herb/3.3/herb.so +0 -0
  13. data/lib/herb/3.4/herb.so +0 -0
  14. data/lib/herb/engine.rb +8 -1
  15. data/lib/herb/version.rb +1 -1
  16. data/src/analyze.c +5 -9
  17. data/src/analyze_helpers.c +17 -6
  18. data/src/herb.c +2 -2
  19. data/src/include/parser.h +2 -2
  20. data/src/include/pretty_print.h +1 -1
  21. data/src/include/version.h +1 -1
  22. data/src/parser.c +3 -2
  23. data/src/pretty_print.c +1 -1
  24. data/templates/ext/herb/error_helpers.c.erb +85 -0
  25. data/templates/ext/herb/error_helpers.h.erb +12 -0
  26. data/templates/ext/herb/nodes.c.erb +90 -0
  27. data/templates/ext/herb/nodes.h.erb +9 -0
  28. data/templates/javascript/packages/core/src/errors.ts.erb +193 -0
  29. data/templates/javascript/packages/core/src/node-type-guards.ts.erb +325 -0
  30. data/templates/javascript/packages/core/src/nodes.ts.erb +414 -0
  31. data/templates/javascript/packages/core/src/visitor.ts.erb +29 -0
  32. data/templates/javascript/packages/node/extension/error_helpers.cpp.erb +113 -0
  33. data/templates/javascript/packages/node/extension/error_helpers.h.erb +17 -0
  34. data/templates/javascript/packages/node/extension/nodes.cpp.erb +111 -0
  35. data/templates/javascript/packages/node/extension/nodes.h.erb +17 -0
  36. data/templates/lib/herb/ast/nodes.rb.erb +117 -0
  37. data/templates/lib/herb/errors.rb.erb +106 -0
  38. data/templates/lib/herb/visitor.rb.erb +28 -0
  39. data/templates/sig/serialized_ast_errors.rbs.erb +10 -0
  40. data/templates/sig/serialized_ast_nodes.rbs.erb +10 -0
  41. data/templates/src/ast_nodes.c.erb +145 -0
  42. data/templates/src/ast_pretty_print.c.erb +97 -0
  43. data/templates/src/errors.c.erb +245 -0
  44. data/templates/src/include/ast_nodes.h.erb +46 -0
  45. data/templates/src/include/ast_pretty_print.h.erb +14 -0
  46. data/templates/src/include/errors.h.erb +58 -0
  47. data/templates/src/visitor.c.erb +47 -0
  48. data/templates/template.rb +406 -0
  49. data/templates/wasm/error_helpers.cpp.erb +93 -0
  50. data/templates/wasm/error_helpers.h.erb +15 -0
  51. data/templates/wasm/nodes.cpp.erb +79 -0
  52. data/templates/wasm/nodes.h.erb +15 -0
  53. data/vendor/prism/Rakefile +75 -0
  54. data/vendor/prism/config.yml +4713 -0
  55. data/vendor/prism/include/prism/ast.h +8190 -0
  56. data/vendor/prism/include/prism/defines.h +260 -0
  57. data/vendor/prism/include/prism/diagnostic.h +455 -0
  58. data/vendor/prism/include/prism/encoding.h +283 -0
  59. data/vendor/prism/include/prism/node.h +129 -0
  60. data/vendor/prism/include/prism/options.h +482 -0
  61. data/vendor/prism/include/prism/pack.h +163 -0
  62. data/vendor/prism/include/prism/parser.h +933 -0
  63. data/vendor/prism/include/prism/prettyprint.h +34 -0
  64. data/vendor/prism/include/prism/regexp.h +43 -0
  65. data/vendor/prism/include/prism/static_literals.h +121 -0
  66. data/vendor/prism/include/prism/util/pm_buffer.h +236 -0
  67. data/vendor/prism/include/prism/util/pm_char.h +204 -0
  68. data/vendor/prism/include/prism/util/pm_constant_pool.h +218 -0
  69. data/vendor/prism/include/prism/util/pm_integer.h +130 -0
  70. data/vendor/prism/include/prism/util/pm_list.h +103 -0
  71. data/vendor/prism/include/prism/util/pm_memchr.h +29 -0
  72. data/vendor/prism/include/prism/util/pm_newline_list.h +113 -0
  73. data/vendor/prism/include/prism/util/pm_string.h +200 -0
  74. data/vendor/prism/include/prism/util/pm_strncasecmp.h +32 -0
  75. data/vendor/prism/include/prism/util/pm_strpbrk.h +46 -0
  76. data/vendor/prism/include/prism/version.h +29 -0
  77. data/vendor/prism/include/prism.h +408 -0
  78. data/vendor/prism/src/diagnostic.c +848 -0
  79. data/vendor/prism/src/encoding.c +5235 -0
  80. data/vendor/prism/src/node.c +8676 -0
  81. data/vendor/prism/src/options.c +328 -0
  82. data/vendor/prism/src/pack.c +509 -0
  83. data/vendor/prism/src/prettyprint.c +8941 -0
  84. data/vendor/prism/src/prism.c +23302 -0
  85. data/vendor/prism/src/regexp.c +790 -0
  86. data/vendor/prism/src/serialize.c +2268 -0
  87. data/vendor/prism/src/static_literals.c +617 -0
  88. data/vendor/prism/src/token_type.c +703 -0
  89. data/vendor/prism/src/util/pm_buffer.c +357 -0
  90. data/vendor/prism/src/util/pm_char.c +318 -0
  91. data/vendor/prism/src/util/pm_constant_pool.c +342 -0
  92. data/vendor/prism/src/util/pm_integer.c +670 -0
  93. data/vendor/prism/src/util/pm_list.c +49 -0
  94. data/vendor/prism/src/util/pm_memchr.c +35 -0
  95. data/vendor/prism/src/util/pm_newline_list.c +125 -0
  96. data/vendor/prism/src/util/pm_string.c +383 -0
  97. data/vendor/prism/src/util/pm_strncasecmp.c +36 -0
  98. data/vendor/prism/src/util/pm_strpbrk.c +206 -0
  99. data/vendor/prism/templates/ext/prism/api_node.c.erb +282 -0
  100. data/vendor/prism/templates/include/prism/ast.h.erb +226 -0
  101. data/vendor/prism/templates/include/prism/diagnostic.h.erb +130 -0
  102. data/vendor/prism/templates/java/org/prism/AbstractNodeVisitor.java.erb +22 -0
  103. data/vendor/prism/templates/java/org/prism/Loader.java.erb +434 -0
  104. data/vendor/prism/templates/java/org/prism/Nodes.java.erb +403 -0
  105. data/vendor/prism/templates/javascript/src/deserialize.js.erb +448 -0
  106. data/vendor/prism/templates/javascript/src/nodes.js.erb +197 -0
  107. data/vendor/prism/templates/javascript/src/visitor.js.erb +78 -0
  108. data/vendor/prism/templates/lib/prism/compiler.rb.erb +43 -0
  109. data/vendor/prism/templates/lib/prism/dispatcher.rb.erb +103 -0
  110. data/vendor/prism/templates/lib/prism/dot_visitor.rb.erb +189 -0
  111. data/vendor/prism/templates/lib/prism/dsl.rb.erb +133 -0
  112. data/vendor/prism/templates/lib/prism/inspect_visitor.rb.erb +131 -0
  113. data/vendor/prism/templates/lib/prism/mutation_compiler.rb.erb +19 -0
  114. data/vendor/prism/templates/lib/prism/node.rb.erb +515 -0
  115. data/vendor/prism/templates/lib/prism/reflection.rb.erb +136 -0
  116. data/vendor/prism/templates/lib/prism/serialize.rb.erb +602 -0
  117. data/vendor/prism/templates/lib/prism/visitor.rb.erb +55 -0
  118. data/vendor/prism/templates/rbi/prism/dsl.rbi.erb +68 -0
  119. data/vendor/prism/templates/rbi/prism/node.rbi.erb +164 -0
  120. data/vendor/prism/templates/rbi/prism/visitor.rbi.erb +18 -0
  121. data/vendor/prism/templates/sig/prism/_private/dot_visitor.rbs.erb +45 -0
  122. data/vendor/prism/templates/sig/prism/dsl.rbs.erb +31 -0
  123. data/vendor/prism/templates/sig/prism/mutation_compiler.rbs.erb +7 -0
  124. data/vendor/prism/templates/sig/prism/node.rbs.erb +132 -0
  125. data/vendor/prism/templates/sig/prism/visitor.rbs.erb +17 -0
  126. data/vendor/prism/templates/sig/prism.rbs.erb +89 -0
  127. data/vendor/prism/templates/src/diagnostic.c.erb +523 -0
  128. data/vendor/prism/templates/src/node.c.erb +333 -0
  129. data/vendor/prism/templates/src/prettyprint.c.erb +166 -0
  130. data/vendor/prism/templates/src/serialize.c.erb +406 -0
  131. data/vendor/prism/templates/src/token_type.c.erb +369 -0
  132. data/vendor/prism/templates/template.rb +689 -0
  133. metadata +112 -2
@@ -0,0 +1,68 @@
1
+ module Prism::DSL
2
+ sig { params(string: String).returns(Prism::Source) }
3
+ def source(string); end
4
+
5
+ sig { params(source: Prism::Source, start_offset: Integer, length: Integer).returns(Prism::Location) }
6
+ def location(source: default_source, start_offset: 0, length: 0); end
7
+ <%- nodes.each do |node| -%>
8
+ <%-
9
+ params = [
10
+ ["source", "default_source", "Prism::Source"],
11
+ ["node_id", "0", "Integer"],
12
+ ["location", "default_location", "Prism::Location"],
13
+ ["flags", "0", "Integer"]
14
+ ].concat(node.fields.map { |field|
15
+ case field
16
+ when Prism::Template::NodeField
17
+ kind = field.specific_kind || field.union_kind&.first
18
+ if kind.nil?
19
+ [field.name, "default_node(source, location)", field.rbi_class]
20
+ else
21
+ [field.name, %Q{#{kind.gsub(/(?<=.)[A-Z]/, "_\\0").downcase}(source: source)}, field.rbi_class]
22
+ end
23
+ when Prism::Template::OptionalNodeField
24
+ [field.name, "nil", field.rbi_class]
25
+ when Prism::Template::NodeListField
26
+ [field.name, "[]", field.rbi_class]
27
+ when Prism::Template::ConstantField
28
+ [field.name, ":\"\"", field.rbi_class]
29
+ when Prism::Template::OptionalConstantField
30
+ [field.name, "nil", field.rbi_class]
31
+ when Prism::Template::ConstantListField
32
+ [field.name, "[]", field.rbi_class]
33
+ when Prism::Template::StringField
34
+ [field.name, "\"\"", field.rbi_class]
35
+ when Prism::Template::LocationField
36
+ [field.name, "location", field.rbi_class]
37
+ when Prism::Template::OptionalLocationField
38
+ [field.name, "nil", field.rbi_class]
39
+ when Prism::Template::UInt8Field, Prism::Template::UInt32Field, Prism::Template::IntegerField
40
+ [field.name, "0", field.rbi_class]
41
+ when Prism::Template::DoubleField
42
+ [field.name, "0.0", field.rbi_class]
43
+ else
44
+ raise
45
+ end
46
+ })
47
+ -%>
48
+
49
+ sig { params(<%= params.map { |(name, _, type)| "#{name}: #{type}" }.join(", ") %>).returns(Prism::<%= node.name %>) }
50
+ def <%= node.human %>(<%= params.map { |(name, default, _)| "#{name}: #{default}" }.join(", ") %>); end
51
+ <%- end -%>
52
+ <%- flags.each do |flag| -%>
53
+
54
+ sig { params(name: Symbol).returns(Integer) }
55
+ def <%= flag.human.chomp("s") %>(name); end
56
+ <%- end -%>
57
+
58
+ private
59
+
60
+ sig { returns(Prism::Source) }
61
+ def default_source; end
62
+
63
+ sig { returns(Prism::Location) }
64
+ def default_location; end
65
+
66
+ sig { params(source: Prism::Source, location: Prism::Location).returns(Prism::Node) }
67
+ def default_node(source, location); end
68
+ end
@@ -0,0 +1,164 @@
1
+ class Prism::Node
2
+ abstract!
3
+
4
+ sig { returns(Prism::Source) }
5
+ def source; end
6
+
7
+ sig { returns(Integer) }
8
+ def node_id; end
9
+
10
+ sig { returns(Prism::Location) }
11
+ def location; end
12
+
13
+ sig{ returns(Integer) }
14
+ def flags; end
15
+
16
+ sig { returns(T::Boolean) }
17
+ def newline?; end
18
+
19
+ sig { returns(T::Boolean) }
20
+ def static_literal?; end
21
+
22
+ sig { returns(Integer) }
23
+ def start_offset; end
24
+
25
+ sig { returns(Integer) }
26
+ def end_offset; end
27
+
28
+ sig { returns(T::Array[String]) }
29
+ def source_lines; end
30
+
31
+ sig { returns(T::Array[String]) }
32
+ def script_lines; end
33
+
34
+ sig { returns(String) }
35
+ def slice; end
36
+
37
+ sig { returns(String) }
38
+ def slice_lines; end
39
+
40
+ sig { params(q: T.untyped).void }
41
+ def pretty_print(q); end
42
+
43
+ sig { returns(String) }
44
+ def to_dot; end
45
+
46
+ sig { params(line: Integer, column: Integer).returns(T::Array[Prism::Node]) }
47
+ def tunnel(line, column); end
48
+
49
+ sig { params(block: T.proc.params(node: Prism::Node).returns(T::Boolean)).returns(T.nilable(Prism::Node)) }
50
+ def breadth_first_search(&block); end
51
+
52
+ sig { abstract.params(visitor: Prism::Visitor).returns(T.untyped) }
53
+ def accept(visitor); end
54
+
55
+ sig { abstract.returns(T::Array[T.nilable(Prism::Node)]) }
56
+ def child_nodes; end
57
+
58
+ sig { abstract.returns(T::Array[T.nilable(Prism::Node)]) }
59
+ def deconstruct; end
60
+
61
+ sig { abstract.returns(T::Array[Prism::Node]) }
62
+ def compact_child_nodes; end
63
+
64
+ sig { abstract.returns(T::Array[T.any(Prism::Node, Prism::Location)]) }
65
+ def comment_targets; end
66
+
67
+ sig { abstract.returns(T::Array[Prism::Reflection::Field]) }
68
+ def fields; end
69
+
70
+ sig { abstract.returns(Symbol) }
71
+ def type; end
72
+
73
+ sig { abstract.returns(String) }
74
+ def inspect; end
75
+ end
76
+ <%- nodes.each do |node| -%>
77
+
78
+ <%- node.each_comment_line do |line| -%>
79
+ #<%= line %>
80
+ <%- end -%>
81
+ class Prism::<%= node.name -%> < Prism::Node
82
+ <%- if (node_flags = node.flags) -%>
83
+ <%- node_flags.values.each do |value| -%>
84
+ sig { returns(T::Boolean) }
85
+ def <%= value.name.downcase %>?; end
86
+
87
+ <%- end -%>
88
+ <%- end -%>
89
+ <%- node.fields.each do |field| -%>
90
+ sig { returns(<%= field.rbi_class %>) }
91
+ def <%= field.name %>; end
92
+
93
+ <%- end -%>
94
+ sig { params(<%= ["source: Prism::Source", "node_id: Integer", "location: Prism::Location", "flags: Integer", *node.fields.map { |field| "#{field.name}: #{field.rbi_class}" }].join(", ") %>).void }
95
+ def initialize(<%= ["source", "node_id", "location", "flags", *node.fields.map(&:name)].join(", ") %>); end
96
+
97
+ sig { override.params(visitor: Prism::Visitor).returns(T.untyped) }
98
+ def accept(visitor); end
99
+
100
+ sig { override.returns(T::Array[T.nilable(Prism::Node)]) }
101
+ def child_nodes; end
102
+
103
+ sig { override.returns(T::Array[T.nilable(Prism::Node)]) }
104
+ def deconstruct; end
105
+
106
+ sig { override.returns(T::Array[Prism::Node]) }
107
+ def compact_child_nodes; end
108
+
109
+ sig { override.returns(T::Array[T.any(Prism::Node, Prism::Location)]) }
110
+ def comment_targets; end
111
+
112
+ sig { params(<%= (["node_id: Integer", "location: Prism::Location", "flags: Integer"] + node.fields.map { |field| "#{field.name}: #{field.rbi_class}" }).join(", ") %>).returns(Prism::<%= node.name %>) }
113
+ def copy(<%= (["node_id", "location", "flags"] + node.fields.map(&:name)).map { |field| "#{field}: self.#{field}" }.join(", ") %>); end
114
+
115
+ sig { params(keys: T.nilable(T::Array[Symbol])).returns(T::Hash[Symbol, T.untyped]) }
116
+ def deconstruct_keys(keys); end
117
+ <%- node.fields.each do |field| -%>
118
+ <%- case field -%>
119
+ <%- when Prism::Template::LocationField -%>
120
+ <%- raise unless field.name.end_with?("_loc") -%>
121
+ <%- next if node.fields.any? { |other| other.name == field.name.delete_suffix("_loc") } -%>
122
+
123
+ sig { returns(String) }
124
+ def <%= field.name.delete_suffix("_loc") %>; end
125
+ <%- when Prism::Template::OptionalLocationField -%>
126
+ <%- raise unless field.name.end_with?("_loc") -%>
127
+ <%- next if node.fields.any? { |other| other.name == field.name.delete_suffix("_loc") } -%>
128
+
129
+ sig { returns(T.nilable(String)) }
130
+ def <%= field.name.delete_suffix("_loc") %>; end
131
+ <%- end -%>
132
+ <%- end -%>
133
+
134
+ sig { override.returns(T::Array[Prism::Reflection::Field]) }
135
+ def fields; end
136
+
137
+ sig { override.returns(String) }
138
+ def inspect; end
139
+
140
+ sig { override.returns(Symbol) }
141
+ def type; end
142
+ end
143
+ <%- end -%>
144
+ <%- flags.each do |flag| -%>
145
+
146
+ # <%= flag.comment %>
147
+ module Prism::<%= flag.name %>
148
+ <%- flag.values.each_with_index do |value, index| -%>
149
+ # <%= value.comment %>
150
+ <%= value.name %> = T.let(1 << <%= index + Prism::Template::COMMON_FLAGS_COUNT %>, Integer)
151
+ <%- end -%>
152
+ end
153
+ <%- end -%>
154
+
155
+ # The flags that are common to all nodes.
156
+ module Prism::NodeFlags
157
+ # A flag to indicate that the node is a candidate to emit a :line event
158
+ # through tracepoint when compiled.
159
+ NEWLINE = T.let(1, Integer)
160
+
161
+ # A flag to indicate that the value that the node represents is a value that
162
+ # can be determined at parse-time.
163
+ STATIC_LITERAL = T.let(2, Integer)
164
+ end
@@ -0,0 +1,18 @@
1
+ class Prism::BasicVisitor
2
+ sig { params(node: T.nilable(Prism::Node)).void }
3
+ def visit(node); end
4
+
5
+ sig { params(nodes: T::Array[T.nilable(Prism::Node)]).void }
6
+ def visit_all(nodes); end
7
+
8
+ sig { params(node: Prism::Node).void }
9
+ def visit_child_nodes(node); end
10
+ end
11
+
12
+ class Prism::Visitor < Prism::BasicVisitor
13
+ <%- nodes.each_with_index do |node, index| -%>
14
+ <%= "\n" if index != 0 -%>
15
+ sig { params(node: Prism::<%= node.name %>).void }
16
+ def visit_<%= node.human %>(node); end
17
+ <%- end -%>
18
+ end
@@ -0,0 +1,45 @@
1
+ module Prism
2
+ class DotVisitor < Visitor
3
+ class Field
4
+ attr_reader name: String
5
+ attr_reader value: String?
6
+ attr_reader port: bool
7
+
8
+ def initialize: (String name, String? value, bool port) -> void
9
+ def to_dot: () -> String
10
+ end
11
+
12
+ class Table
13
+ attr_reader name: String
14
+ attr_reader fields: Array[Field]
15
+
16
+ def initialize: (String name) -> void
17
+ def field: (String name, ?String? value, ?port: bool) -> void
18
+ def to_dot: () -> String
19
+ end
20
+
21
+ class Digraph
22
+ attr_reader nodes: Array[String]
23
+ attr_reader waypoints: Array[String]
24
+ attr_reader edges: Array[String]
25
+
26
+ def initialize: () -> void
27
+ def node: (String value) -> void
28
+ def waypoint: (String value) -> void
29
+ def edge: (String value) -> void
30
+
31
+ def to_dot: () -> String
32
+ end
33
+
34
+ attr_reader digraph: Digraph
35
+
36
+ private
37
+
38
+ def node_id: (Prism::node node) -> String
39
+ def location_inspect: (Location location) -> String
40
+
41
+ <%- flags.each do |flag| -%>
42
+ def <%= flag.human %>_inspect: (<%= nodes.filter_map { |node| node.name if node.flags == flag }.join(" | ") %> node) -> String
43
+ <%- end -%>
44
+ end
45
+ end
@@ -0,0 +1,31 @@
1
+ module Prism
2
+ module DSL
3
+ def source: (String string) -> Source
4
+
5
+ def location: (?source: Source, ?start_offset: Integer, ?length: Integer) -> Location
6
+ <%- nodes.each do |node| -%>
7
+ <%-
8
+ params = [
9
+ ["source", "Source"],
10
+ ["node_id", "Integer"],
11
+ ["location", "Location"],
12
+ ["flags", "Integer"]
13
+ ].concat(node.fields.map { |field| [field.name, field.rbs_class] })
14
+ -%>
15
+
16
+ def <%= node.human %>: (<%= params.map { |(name, type)| "?#{name}: #{type}" }.join(", ") %>) -> <%= node.name %>
17
+ <%- end -%>
18
+ <%- flags.each do |flag| -%>
19
+
20
+ def <%= flag.human.chomp("s") %>: (Symbol name) -> Integer
21
+ <%- end -%>
22
+
23
+ private
24
+
25
+ def default_source: () -> Source
26
+
27
+ def default_location: () -> Location
28
+
29
+ def default_node: (Source source, Location location) -> node
30
+ end
31
+ end
@@ -0,0 +1,7 @@
1
+ module Prism
2
+ class MutationCompiler < Compiler
3
+ <%- nodes.each do |node| -%>
4
+ def visit_<%= node.human %>: (<%= node.name %>) -> node?
5
+ <%- end -%>
6
+ end
7
+ end
@@ -0,0 +1,132 @@
1
+ module Prism
2
+ class Node
3
+ attr_reader source: Source
4
+ attr_reader node_id: Integer
5
+ attr_reader location: Location
6
+ attr_reader flags: Integer
7
+
8
+ def newline?: () -> bool
9
+ def static_literal?: () -> bool
10
+
11
+ def accept: (_Visitor) -> void
12
+ def child_nodes: () -> Array[Prism::node?]
13
+ def comment_targets: () -> Array[Prism::node | Location]
14
+ def compact_child_nodes: () -> Array[Prism::node]
15
+ def self.fields: () -> Array[Prism::Reflection::Field]
16
+ def type: () -> Symbol
17
+ def self.type: () -> Symbol
18
+
19
+ def source_lines: () -> Array[String]
20
+ alias script_lines source_lines
21
+ def slice: () -> String
22
+ def slice_lines: () -> String
23
+ def pretty_print: (untyped q) -> untyped
24
+ def to_dot: () -> String
25
+ def tunnel: (Integer line, Integer column) -> Array[Prism::node]
26
+ def breadth_first_search: () { (Prism::node) -> bool } -> Prism::node?
27
+ def newline!: (Array[untyped]) -> void
28
+
29
+ def save: (_Repository repository) -> void
30
+ def save_location: (_Repository repository) -> void
31
+
32
+ def leading_comments: () -> Array[comment]
33
+ def trailing_comments: () -> Array[comment]
34
+ def comments: () -> Array[comment]
35
+
36
+ def start_offset: () -> Integer
37
+ def start_character_offset: () -> Integer
38
+ def start_code_units_offset: (Encoding encoding) -> Integer
39
+ def cached_start_code_units_offset: (_CodeUnitsCache cache) -> Integer
40
+
41
+ def end_offset: () -> Integer
42
+ def end_character_offset: () -> Integer
43
+ def end_code_units_offset: (Encoding encoding) -> Integer
44
+ def cached_end_code_units_offset: (_CodeUnitsCache cache) -> Integer
45
+
46
+ def start_line: () -> Integer
47
+ def end_line: () -> Integer
48
+
49
+ def start_column: () -> Integer
50
+ def start_character_column: () -> Integer
51
+ def start_code_units_column: (Encoding encoding) -> Integer
52
+ def cached_start_code_units_column: (_CodeUnitsCache cache) -> Integer
53
+
54
+ def end_column: () -> Integer
55
+ def end_character_column: () -> Integer
56
+ def end_code_units_column: (Encoding encoding) -> Integer
57
+ def cached_end_code_units_column: (_CodeUnitsCache cache) -> Integer
58
+ end
59
+
60
+ # Methods implemented by every subclass of Node
61
+ interface _Node
62
+ def deconstruct: () -> Array[Prism::node?]
63
+ def inspect: () -> String
64
+ end
65
+
66
+ type node = Node & _Node
67
+
68
+ interface _Repository
69
+ def enter: (Integer node_id, Symbol field_name) -> void
70
+ end
71
+
72
+ <%- nodes.each do |node| -%>
73
+
74
+ <%- node.each_comment_line do |line| -%>
75
+ #<%= line %>
76
+ <%- end -%>
77
+ class <%= node.name -%> < Node
78
+ include _Node
79
+ <%- if (node_flags = node.flags) -%>
80
+
81
+ <%- node_flags.values.each do |value| -%>
82
+ def <%= value.name.downcase %>?: () -> bool
83
+ <%- end -%>
84
+ <%- end -%>
85
+
86
+ <%- node.fields.each do |field| -%>
87
+ attr_reader <%= field.name %>: <%= field.rbs_class %>
88
+ <%- end -%>
89
+ <%- if (locations = node.fields.select { |field| field.is_a?(Prism::Template::LocationField) || field.is_a?(Prism::Template::OptionalLocationField) }) -%>
90
+
91
+ <%- locations.each do |field| -%>
92
+ def save_<%= field.name %>: (_Repository repository) -> void
93
+ <%- end -%>
94
+ <%- end -%>
95
+
96
+ def initialize: (<%= ["Source source", "Integer node_id", "Location location", "Integer flags", *node.fields.map { |field| "#{field.rbs_class} #{field.name}" }].join(", ") %>) -> void
97
+ def copy: (<%= (["?node_id: Integer", "?location: Location", "?flags: Integer"] + node.fields.map { |field| "?#{field.name}: #{field.rbs_class}" }).join(", ") %>) -> <%= node.name %>
98
+ def deconstruct_keys: (Array[Symbol] keys) -> { <%= (["node_id: Integer", "location: Location"] + node.fields.map { |field| "#{field.name}: #{field.rbs_class}" }).join(", ") %> }
99
+ <%- node.fields.each do |field| -%>
100
+ <%- case field -%>
101
+ <%- when Prism::Template::LocationField -%>
102
+ <%- raise unless field.name.end_with?("_loc") -%>
103
+ <%- next if node.fields.any? { |other| other.name == field.name.delete_suffix("_loc") } -%>
104
+ def <%= field.name.delete_suffix("_loc") %>: () -> String
105
+ <%- when Prism::Template::OptionalLocationField -%>
106
+ <%- raise unless field.name.end_with?("_loc") -%>
107
+ <%- next if node.fields.any? { |other| other.name == field.name.delete_suffix("_loc") } -%>
108
+ def <%= field.name.delete_suffix("_loc") %>: () -> String?
109
+ <%- end -%>
110
+ <%- end -%>
111
+ def type: () -> :<%= node.human %>
112
+ | ...
113
+ def self.type: () -> :<%= node.human %>
114
+ end
115
+ <%- end -%>
116
+ <%- flags.each do |flag| -%>
117
+
118
+ # <%= flag.comment %>
119
+ module <%= flag.name %>
120
+ <%- flag.values.each do |value| -%>
121
+ # <%= value.comment %>
122
+ <%= value.name %>: Integer
123
+ <%- end -%>
124
+ end
125
+ <%- end -%>
126
+
127
+ # The flags that are common to all nodes.
128
+ module NodeFlags
129
+ NEWLINE: Integer
130
+ STATIC_LITERAL: Integer
131
+ end
132
+ end
@@ -0,0 +1,17 @@
1
+ module Prism
2
+ class BasicVisitor
3
+ def visit: (Prism::node?) -> void
4
+ def visit_all: (Array[Prism::node?]) -> void
5
+ def visit_child_nodes: (Prism::node) -> void
6
+ end
7
+
8
+ interface _Visitor
9
+ <%- nodes.each do |node| -%>
10
+ def visit_<%= node.human %>: (<%= node.name %>) -> void
11
+ <%- end -%>
12
+ end
13
+
14
+ class Visitor < BasicVisitor
15
+ include _Visitor
16
+ end
17
+ end
@@ -0,0 +1,89 @@
1
+ module Prism
2
+ BACKEND: :CEXT | :FFI
3
+ VERSION: String
4
+
5
+ # Methods taking a Ruby source code string:
6
+ <%-
7
+ {
8
+ parse: "ParseResult",
9
+ profile: "nil",
10
+ lex: "LexResult",
11
+ lex_compat: "LexCompat::Result",
12
+ parse_lex: "ParseLexResult",
13
+ dump: "String",
14
+ parse_comments: "Array[comment]",
15
+ parse_success?: "bool",
16
+ parse_failure?: "bool",
17
+ }.each do |method, return_type|
18
+ -%>
19
+
20
+ def self.<%= method %>: (
21
+ String source,
22
+ ?encoding: Encoding | false,
23
+ ?filepath: String,
24
+ ?freeze: bool,
25
+ ?frozen_string_literal: bool,
26
+ ?line: Integer,
27
+ ?main_script: bool,
28
+ ?offset: Integer,
29
+ ?scopes: Array[Array[Symbol]],
30
+ ?verbose: bool
31
+ ) -> <%= return_type %>
32
+ <%- end -%>
33
+
34
+ def self.load: (
35
+ String source,
36
+ String serialized,
37
+ ?bool freeze
38
+ ) -> ParseResult
39
+
40
+ def self.lex_ripper: (
41
+ String source
42
+ ) -> Array[[[Integer, Integer], Symbol, String, untyped]]
43
+
44
+ # Methods taking a path to a Ruby file:
45
+ <%-
46
+ {
47
+ parse_file: "ParseResult",
48
+ profile_file: "nil",
49
+ lex_file: "LexResult",
50
+ parse_lex_file: "ParseLexResult",
51
+ dump_file: "String",
52
+ parse_file_comments: "Array[comment]",
53
+ parse_file_success?: "bool",
54
+ parse_file_failure?: "bool",
55
+ }.each do |method, return_type|
56
+ -%>
57
+
58
+ def self.<%= method %>: (
59
+ String filepath,
60
+ ?encoding: Encoding | false,
61
+ ?freeze: bool,
62
+ ?frozen_string_literal: bool,
63
+ ?line: Integer,
64
+ ?main_script: bool,
65
+ ?offset: Integer,
66
+ ?scopes: Array[Array[Symbol]],
67
+ ?verbose: bool
68
+ ) -> <%= return_type %>
69
+ <%- end -%>
70
+
71
+ interface _Stream
72
+ def gets: (?Integer integer) -> (String | nil)
73
+ end
74
+
75
+ def self.parse_stream: (
76
+ _Stream stream,
77
+ ?encoding: Encoding | false,
78
+ ?filepath: String,
79
+ ?freeze: bool,
80
+ ?frozen_string_literal: bool,
81
+ ?line: Integer,
82
+ ?main_script: bool,
83
+ ?offset: Integer,
84
+ ?scopes: Array[Array[Symbol]],
85
+ ?verbose: bool
86
+ ) -> ParseResult
87
+
88
+ def self.scope: (?locals: Array[Symbol], ?forwarding: Array[Symbol]) -> Scope
89
+ end