herb 0.7.1-arm-linux-gnu → 0.7.3-arm-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.
- checksums.yaml +4 -4
- data/Makefile +2 -0
- data/README.md +1 -1
- data/Rakefile +46 -1
- data/config.yml +714 -0
- data/ext/herb/error_helpers.c +27 -27
- data/ext/herb/extconf.rb +2 -1
- data/ext/herb/extension.c +6 -6
- data/ext/herb/extension_helpers.c +3 -3
- data/ext/herb/nodes.c +35 -35
- data/herb.gemspec +3 -0
- data/lib/herb/3.0/herb.so +0 -0
- data/lib/herb/3.1/herb.so +0 -0
- data/lib/herb/3.2/herb.so +0 -0
- data/lib/herb/3.3/herb.so +0 -0
- data/lib/herb/3.4/herb.so +0 -0
- data/lib/herb/engine/debug_visitor.rb +41 -21
- data/lib/herb/engine.rb +20 -6
- data/lib/herb/version.rb +1 -1
- data/sig/herb/engine/debug_visitor.rbs +3 -3
- data/sig/herb/engine.rbs +5 -0
- data/src/analyze.c +5 -9
- data/src/analyze_helpers.c +17 -6
- data/src/include/pretty_print.h +1 -1
- data/src/include/version.h +1 -1
- data/src/parser.c +6 -9
- data/src/pretty_print.c +1 -1
- data/templates/ext/herb/error_helpers.c.erb +85 -0
- data/templates/ext/herb/error_helpers.h.erb +12 -0
- data/templates/ext/herb/nodes.c.erb +90 -0
- data/templates/ext/herb/nodes.h.erb +9 -0
- data/templates/javascript/packages/core/src/errors.ts.erb +193 -0
- data/templates/javascript/packages/core/src/node-type-guards.ts.erb +325 -0
- data/templates/javascript/packages/core/src/nodes.ts.erb +414 -0
- data/templates/javascript/packages/core/src/visitor.ts.erb +29 -0
- data/templates/javascript/packages/node/extension/error_helpers.cpp.erb +113 -0
- data/templates/javascript/packages/node/extension/error_helpers.h.erb +17 -0
- data/templates/javascript/packages/node/extension/nodes.cpp.erb +111 -0
- data/templates/javascript/packages/node/extension/nodes.h.erb +17 -0
- data/templates/lib/herb/ast/nodes.rb.erb +117 -0
- data/templates/lib/herb/errors.rb.erb +106 -0
- data/templates/lib/herb/visitor.rb.erb +28 -0
- data/templates/sig/serialized_ast_errors.rbs.erb +10 -0
- data/templates/sig/serialized_ast_nodes.rbs.erb +10 -0
- data/templates/src/ast_nodes.c.erb +145 -0
- data/templates/src/ast_pretty_print.c.erb +97 -0
- data/templates/src/errors.c.erb +245 -0
- data/templates/src/include/ast_nodes.h.erb +46 -0
- data/templates/src/include/ast_pretty_print.h.erb +14 -0
- data/templates/src/include/errors.h.erb +58 -0
- data/templates/src/visitor.c.erb +47 -0
- data/templates/template.rb +406 -0
- data/templates/wasm/error_helpers.cpp.erb +93 -0
- data/templates/wasm/error_helpers.h.erb +15 -0
- data/templates/wasm/nodes.cpp.erb +79 -0
- data/templates/wasm/nodes.h.erb +15 -0
- data/vendor/prism/Rakefile +75 -0
- data/vendor/prism/config.yml +4713 -0
- data/vendor/prism/include/prism/ast.h +8190 -0
- data/vendor/prism/include/prism/defines.h +260 -0
- data/vendor/prism/include/prism/diagnostic.h +455 -0
- data/vendor/prism/include/prism/encoding.h +283 -0
- data/vendor/prism/include/prism/node.h +129 -0
- data/vendor/prism/include/prism/options.h +482 -0
- data/vendor/prism/include/prism/pack.h +163 -0
- data/vendor/prism/include/prism/parser.h +933 -0
- data/vendor/prism/include/prism/prettyprint.h +34 -0
- data/vendor/prism/include/prism/regexp.h +43 -0
- data/vendor/prism/include/prism/static_literals.h +121 -0
- data/vendor/prism/include/prism/util/pm_buffer.h +236 -0
- data/vendor/prism/include/prism/util/pm_char.h +204 -0
- data/vendor/prism/include/prism/util/pm_constant_pool.h +218 -0
- data/vendor/prism/include/prism/util/pm_integer.h +130 -0
- data/vendor/prism/include/prism/util/pm_list.h +103 -0
- data/vendor/prism/include/prism/util/pm_memchr.h +29 -0
- data/vendor/prism/include/prism/util/pm_newline_list.h +113 -0
- data/vendor/prism/include/prism/util/pm_string.h +200 -0
- data/vendor/prism/include/prism/util/pm_strncasecmp.h +32 -0
- data/vendor/prism/include/prism/util/pm_strpbrk.h +46 -0
- data/vendor/prism/include/prism/version.h +29 -0
- data/vendor/prism/include/prism.h +408 -0
- data/vendor/prism/src/diagnostic.c +848 -0
- data/vendor/prism/src/encoding.c +5235 -0
- data/vendor/prism/src/node.c +8676 -0
- data/vendor/prism/src/options.c +328 -0
- data/vendor/prism/src/pack.c +509 -0
- data/vendor/prism/src/prettyprint.c +8941 -0
- data/vendor/prism/src/prism.c +23302 -0
- data/vendor/prism/src/regexp.c +790 -0
- data/vendor/prism/src/serialize.c +2268 -0
- data/vendor/prism/src/static_literals.c +617 -0
- data/vendor/prism/src/token_type.c +703 -0
- data/vendor/prism/src/util/pm_buffer.c +357 -0
- data/vendor/prism/src/util/pm_char.c +318 -0
- data/vendor/prism/src/util/pm_constant_pool.c +342 -0
- data/vendor/prism/src/util/pm_integer.c +670 -0
- data/vendor/prism/src/util/pm_list.c +49 -0
- data/vendor/prism/src/util/pm_memchr.c +35 -0
- data/vendor/prism/src/util/pm_newline_list.c +125 -0
- data/vendor/prism/src/util/pm_string.c +383 -0
- data/vendor/prism/src/util/pm_strncasecmp.c +36 -0
- data/vendor/prism/src/util/pm_strpbrk.c +206 -0
- data/vendor/prism/templates/ext/prism/api_node.c.erb +282 -0
- data/vendor/prism/templates/include/prism/ast.h.erb +226 -0
- data/vendor/prism/templates/include/prism/diagnostic.h.erb +130 -0
- data/vendor/prism/templates/java/org/prism/AbstractNodeVisitor.java.erb +22 -0
- data/vendor/prism/templates/java/org/prism/Loader.java.erb +434 -0
- data/vendor/prism/templates/java/org/prism/Nodes.java.erb +403 -0
- data/vendor/prism/templates/javascript/src/deserialize.js.erb +448 -0
- data/vendor/prism/templates/javascript/src/nodes.js.erb +197 -0
- data/vendor/prism/templates/javascript/src/visitor.js.erb +78 -0
- data/vendor/prism/templates/lib/prism/compiler.rb.erb +43 -0
- data/vendor/prism/templates/lib/prism/dispatcher.rb.erb +103 -0
- data/vendor/prism/templates/lib/prism/dot_visitor.rb.erb +189 -0
- data/vendor/prism/templates/lib/prism/dsl.rb.erb +133 -0
- data/vendor/prism/templates/lib/prism/inspect_visitor.rb.erb +131 -0
- data/vendor/prism/templates/lib/prism/mutation_compiler.rb.erb +19 -0
- data/vendor/prism/templates/lib/prism/node.rb.erb +515 -0
- data/vendor/prism/templates/lib/prism/reflection.rb.erb +136 -0
- data/vendor/prism/templates/lib/prism/serialize.rb.erb +602 -0
- data/vendor/prism/templates/lib/prism/visitor.rb.erb +55 -0
- data/vendor/prism/templates/rbi/prism/dsl.rbi.erb +68 -0
- data/vendor/prism/templates/rbi/prism/node.rbi.erb +164 -0
- data/vendor/prism/templates/rbi/prism/visitor.rbi.erb +18 -0
- data/vendor/prism/templates/sig/prism/_private/dot_visitor.rbs.erb +45 -0
- data/vendor/prism/templates/sig/prism/dsl.rbs.erb +31 -0
- data/vendor/prism/templates/sig/prism/mutation_compiler.rbs.erb +7 -0
- data/vendor/prism/templates/sig/prism/node.rbs.erb +132 -0
- data/vendor/prism/templates/sig/prism/visitor.rbs.erb +17 -0
- data/vendor/prism/templates/sig/prism.rbs.erb +89 -0
- data/vendor/prism/templates/src/diagnostic.c.erb +523 -0
- data/vendor/prism/templates/src/node.c.erb +333 -0
- data/vendor/prism/templates/src/prettyprint.c.erb +166 -0
- data/vendor/prism/templates/src/serialize.c.erb +406 -0
- data/vendor/prism/templates/src/token_type.c.erb +369 -0
- data/vendor/prism/templates/template.rb +689 -0
- 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,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
|