herb 0.1.1-x86_64-linux-gnu → 0.2.0-x86_64-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/Rakefile +20 -2
- data/ext/herb/extension.c +46 -14
- data/ext/herb/extension.h +9 -0
- data/ext/herb/extension_helpers.c +9 -27
- data/ext/herb/nodes.c +104 -1
- data/herb.gemspec +2 -1
- 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/ast/node.rb +40 -4
- data/lib/herb/ast/nodes.rb +892 -140
- data/lib/herb/ast.rb +1 -0
- data/lib/herb/cli.rb +4 -1
- data/lib/herb/errors.rb +84 -33
- data/lib/herb/lex_result.rb +4 -1
- data/lib/herb/libherb/array.rb +3 -0
- data/lib/herb/libherb/ast_node.rb +3 -0
- data/lib/herb/libherb/buffer.rb +3 -0
- data/lib/herb/libherb/extract_result.rb +3 -0
- data/lib/herb/libherb/lex_result.rb +3 -0
- data/lib/herb/libherb/libherb.rb +3 -0
- data/lib/herb/libherb/parse_result.rb +3 -0
- data/lib/herb/libherb/token.rb +3 -0
- data/lib/herb/libherb.rb +3 -0
- data/lib/herb/location.rb +15 -6
- data/lib/herb/parse_result.rb +10 -1
- data/lib/herb/position.rb +17 -8
- data/lib/herb/project.rb +13 -4
- data/lib/herb/range.rb +18 -8
- data/lib/herb/result.rb +7 -1
- data/lib/herb/token.rb +14 -4
- data/lib/herb/token_list.rb +10 -1
- data/lib/herb/version.rb +2 -1
- data/lib/herb/visitor.rb +175 -0
- data/lib/herb/warnings.rb +43 -0
- data/lib/herb.rb +6 -1
- data/sig/herb/ast/node.rbs +48 -0
- data/sig/herb/ast/nodes.rbs +941 -0
- data/sig/herb/ast.rbs +6 -0
- data/sig/herb/errors.rbs +193 -0
- data/sig/herb/lex_result.rbs +16 -0
- data/sig/herb/location.rbs +30 -0
- data/sig/herb/parse_result.rbs +22 -0
- data/sig/herb/position.rbs +30 -0
- data/sig/herb/range.rbs +33 -0
- data/sig/herb/result.rbs +20 -0
- data/sig/herb/token.rbs +31 -0
- data/sig/herb/token_list.rbs +13 -0
- data/sig/herb/version.rbs +5 -0
- data/sig/herb/visitor.rbs +104 -0
- data/sig/herb/warnings.rbs +28 -0
- data/sig/herb.rbs +4 -0
- data/sig/serialized.rbs +9 -0
- data/sig/serialized_ast_errors.rbs +53 -0
- data/sig/serialized_ast_nodes.rbs +221 -0
- data/src/analyze.c +138 -43
- data/src/analyze_helpers.c +44 -1
- data/src/analyzed_ruby.c +10 -1
- data/src/ast_nodes.c +103 -1
- data/src/ast_pretty_print.c +60 -0
- data/src/buffer.c +60 -27
- data/src/extract.c +57 -20
- data/src/include/analyze.h +3 -0
- data/src/include/analyze_helpers.h +6 -0
- data/src/include/analyzed_ruby.h +3 -0
- data/src/include/ast_nodes.h +32 -0
- data/src/include/buffer.h +5 -2
- data/src/include/lexer_peek_helpers.h +2 -2
- data/src/include/macros.h +2 -2
- data/src/include/version.h +1 -1
- data/src/lexer.c +1 -1
- data/src/parser.c +17 -7
- data/src/token.c +1 -1
- data/src/util.c +3 -1
- data/src/visitor.c +36 -0
- metadata +24 -3
- /data/{License.txt → LICENSE.txt} +0 -0
data/lib/herb/range.rb
CHANGED
@@ -1,38 +1,48 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
# typed: true
|
2
3
|
|
3
4
|
module Herb
|
4
5
|
class Range
|
5
|
-
attr_reader :from
|
6
|
+
attr_reader :from #: Integer
|
7
|
+
attr_reader :to #: Integer
|
6
8
|
|
9
|
+
#: (Integer, Integer) -> void
|
7
10
|
def initialize(from, to)
|
8
11
|
@from = from
|
9
12
|
@to = to
|
10
13
|
end
|
11
14
|
|
12
|
-
|
13
|
-
|
15
|
+
#: (Integer, Integer) -> Range
|
16
|
+
def self.[](from, to)
|
17
|
+
new(from, to)
|
14
18
|
end
|
15
19
|
|
16
|
-
|
17
|
-
|
20
|
+
#: (Integer, Integer) -> Range
|
21
|
+
def self.from(from, to)
|
22
|
+
new(from, to)
|
18
23
|
end
|
19
24
|
|
25
|
+
#: () -> serialized_range
|
20
26
|
def to_a
|
21
|
-
[from, to]
|
27
|
+
[from, to] #: Herb::serialized_range
|
22
28
|
end
|
23
29
|
|
24
|
-
|
25
|
-
|
30
|
+
#: (?untyped) -> String
|
31
|
+
def to_json(state = nil)
|
32
|
+
to_a.to_json(state)
|
26
33
|
end
|
27
34
|
|
35
|
+
#: () -> String
|
28
36
|
def tree_inspect
|
29
37
|
to_a.to_s
|
30
38
|
end
|
31
39
|
|
40
|
+
#: () -> String
|
32
41
|
def inspect
|
33
42
|
%(#<Herb::Range #{to_a}>)
|
34
43
|
end
|
35
44
|
|
45
|
+
#: () -> String
|
36
46
|
def to_s
|
37
47
|
inspect
|
38
48
|
end
|
data/lib/herb/result.rb
CHANGED
@@ -1,19 +1,25 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
# typed: true
|
2
3
|
|
3
4
|
module Herb
|
4
5
|
class Result
|
5
|
-
attr_reader :source
|
6
|
+
attr_reader :source #: String
|
7
|
+
attr_reader :warnings #: Array[Herb::Warnings::Warning]
|
8
|
+
attr_reader :errors #: Array[Herb::Errors::Error]
|
6
9
|
|
10
|
+
#: (String, Array[Herb::Warnings::Warning], Array[Herb::Errors::Error]) -> void
|
7
11
|
def initialize(source, warnings, errors)
|
8
12
|
@source = source
|
9
13
|
@warnings = warnings
|
10
14
|
@errors = errors
|
11
15
|
end
|
12
16
|
|
17
|
+
#: () -> bool
|
13
18
|
def success?
|
14
19
|
false
|
15
20
|
end
|
16
21
|
|
22
|
+
#: () -> bool
|
17
23
|
def failed?
|
18
24
|
true
|
19
25
|
end
|
data/lib/herb/token.rb
CHANGED
@@ -1,9 +1,14 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
# typed: true
|
2
3
|
|
3
4
|
module Herb
|
4
5
|
class Token
|
5
|
-
attr_reader :value
|
6
|
+
attr_reader :value #: String
|
7
|
+
attr_reader :range #: Range
|
8
|
+
attr_reader :location #: Location
|
9
|
+
attr_reader :type #: String
|
6
10
|
|
11
|
+
#: (String, Range, Location, String) -> void
|
7
12
|
def initialize(value, range, location, type)
|
8
13
|
@value = value
|
9
14
|
@range = range
|
@@ -11,23 +16,27 @@ module Herb
|
|
11
16
|
@type = type
|
12
17
|
end
|
13
18
|
|
19
|
+
#: () -> serialized_token
|
14
20
|
def to_hash
|
15
21
|
{
|
16
22
|
value: value,
|
17
23
|
range: range&.to_a,
|
18
24
|
location: location&.to_hash,
|
19
25
|
type: type,
|
20
|
-
}
|
26
|
+
} #: Herb::serialized_token
|
21
27
|
end
|
22
28
|
|
23
|
-
|
24
|
-
|
29
|
+
#: (?untyped) -> String
|
30
|
+
def to_json(state = nil)
|
31
|
+
to_hash.to_json(state)
|
25
32
|
end
|
26
33
|
|
34
|
+
#: () -> String
|
27
35
|
def tree_inspect
|
28
36
|
%("#{value.force_encoding("utf-8")}" #{location.tree_inspect})
|
29
37
|
end
|
30
38
|
|
39
|
+
#: () -> String
|
31
40
|
def value_inspect
|
32
41
|
if type == "TOKEN_EOF"
|
33
42
|
"<EOF>".inspect
|
@@ -36,6 +45,7 @@ module Herb
|
|
36
45
|
end
|
37
46
|
end
|
38
47
|
|
48
|
+
#: () -> String
|
39
49
|
def inspect
|
40
50
|
%(#<Herb::Token type="#{type}" value=#{value_inspect} range=#{range.tree_inspect} start=#{location.start.tree_inspect} end=#{location.end.tree_inspect}>)
|
41
51
|
end
|
data/lib/herb/token_list.rb
CHANGED
@@ -1,11 +1,20 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
# typed: false
|
2
3
|
|
3
4
|
require "delegate"
|
4
5
|
|
5
6
|
module Herb
|
6
7
|
class TokenList < SimpleDelegator
|
8
|
+
#: () -> String
|
7
9
|
def inspect
|
8
|
-
"#{
|
10
|
+
"#{items.map(&:inspect).join("\n").force_encoding("utf-8")}\n"
|
11
|
+
end
|
12
|
+
|
13
|
+
private
|
14
|
+
|
15
|
+
#: () -> Array[Token]
|
16
|
+
def items
|
17
|
+
self #: Array[Token]
|
9
18
|
end
|
10
19
|
end
|
11
20
|
end
|
data/lib/herb/version.rb
CHANGED
data/lib/herb/visitor.rb
ADDED
@@ -0,0 +1,175 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
# typed: true
|
3
|
+
|
4
|
+
# NOTE: This file is generated by the templates/template.rb script and should not be
|
5
|
+
# modified manually. See /Users/marcoroth/Development/herb-release/templates/lib/herb/visitor.rb.erb
|
6
|
+
|
7
|
+
module Herb
|
8
|
+
class Visitor
|
9
|
+
#: (Herb::AST::Node) -> void
|
10
|
+
def visit(node)
|
11
|
+
node&.accept(self)
|
12
|
+
end
|
13
|
+
|
14
|
+
#: (Array[Herb::AST::Node]) -> void
|
15
|
+
def visit_all(nodes)
|
16
|
+
nodes.each { |node| node&.accept(self) }
|
17
|
+
end
|
18
|
+
|
19
|
+
#: (Herb::AST::Node) -> void
|
20
|
+
def visit_child_nodes(node)
|
21
|
+
node.compact_child_nodes.each { |node| node.accept(self) }
|
22
|
+
end
|
23
|
+
|
24
|
+
#: (Herb::AST::DocumentNode) -> void
|
25
|
+
def visit_document_node(node)
|
26
|
+
visit_child_nodes(node)
|
27
|
+
end
|
28
|
+
|
29
|
+
#: (Herb::AST::LiteralNode) -> void
|
30
|
+
def visit_literal_node(node)
|
31
|
+
visit_child_nodes(node)
|
32
|
+
end
|
33
|
+
|
34
|
+
#: (Herb::AST::HTMLOpenTagNode) -> void
|
35
|
+
def visit_html_open_tag_node(node)
|
36
|
+
visit_child_nodes(node)
|
37
|
+
end
|
38
|
+
|
39
|
+
#: (Herb::AST::HTMLCloseTagNode) -> void
|
40
|
+
def visit_html_close_tag_node(node)
|
41
|
+
visit_child_nodes(node)
|
42
|
+
end
|
43
|
+
|
44
|
+
#: (Herb::AST::HTMLSelfCloseTagNode) -> void
|
45
|
+
def visit_html_self_close_tag_node(node)
|
46
|
+
visit_child_nodes(node)
|
47
|
+
end
|
48
|
+
|
49
|
+
#: (Herb::AST::HTMLElementNode) -> void
|
50
|
+
def visit_html_element_node(node)
|
51
|
+
visit_child_nodes(node)
|
52
|
+
end
|
53
|
+
|
54
|
+
#: (Herb::AST::HTMLAttributeValueNode) -> void
|
55
|
+
def visit_html_attribute_value_node(node)
|
56
|
+
visit_child_nodes(node)
|
57
|
+
end
|
58
|
+
|
59
|
+
#: (Herb::AST::HTMLAttributeNameNode) -> void
|
60
|
+
def visit_html_attribute_name_node(node)
|
61
|
+
visit_child_nodes(node)
|
62
|
+
end
|
63
|
+
|
64
|
+
#: (Herb::AST::HTMLAttributeNode) -> void
|
65
|
+
def visit_html_attribute_node(node)
|
66
|
+
visit_child_nodes(node)
|
67
|
+
end
|
68
|
+
|
69
|
+
#: (Herb::AST::HTMLTextNode) -> void
|
70
|
+
def visit_html_text_node(node)
|
71
|
+
visit_child_nodes(node)
|
72
|
+
end
|
73
|
+
|
74
|
+
#: (Herb::AST::HTMLCommentNode) -> void
|
75
|
+
def visit_html_comment_node(node)
|
76
|
+
visit_child_nodes(node)
|
77
|
+
end
|
78
|
+
|
79
|
+
#: (Herb::AST::HTMLDoctypeNode) -> void
|
80
|
+
def visit_html_doctype_node(node)
|
81
|
+
visit_child_nodes(node)
|
82
|
+
end
|
83
|
+
|
84
|
+
#: (Herb::AST::WhitespaceNode) -> void
|
85
|
+
def visit_whitespace_node(node)
|
86
|
+
visit_child_nodes(node)
|
87
|
+
end
|
88
|
+
|
89
|
+
#: (Herb::AST::ERBContentNode) -> void
|
90
|
+
def visit_erb_content_node(node)
|
91
|
+
visit_child_nodes(node)
|
92
|
+
end
|
93
|
+
|
94
|
+
#: (Herb::AST::ERBEndNode) -> void
|
95
|
+
def visit_erb_end_node(node)
|
96
|
+
visit_child_nodes(node)
|
97
|
+
end
|
98
|
+
|
99
|
+
#: (Herb::AST::ERBElseNode) -> void
|
100
|
+
def visit_erb_else_node(node)
|
101
|
+
visit_child_nodes(node)
|
102
|
+
end
|
103
|
+
|
104
|
+
#: (Herb::AST::ERBIfNode) -> void
|
105
|
+
def visit_erb_if_node(node)
|
106
|
+
visit_child_nodes(node)
|
107
|
+
end
|
108
|
+
|
109
|
+
#: (Herb::AST::ERBBlockNode) -> void
|
110
|
+
def visit_erb_block_node(node)
|
111
|
+
visit_child_nodes(node)
|
112
|
+
end
|
113
|
+
|
114
|
+
#: (Herb::AST::ERBWhenNode) -> void
|
115
|
+
def visit_erb_when_node(node)
|
116
|
+
visit_child_nodes(node)
|
117
|
+
end
|
118
|
+
|
119
|
+
#: (Herb::AST::ERBCaseNode) -> void
|
120
|
+
def visit_erb_case_node(node)
|
121
|
+
visit_child_nodes(node)
|
122
|
+
end
|
123
|
+
|
124
|
+
#: (Herb::AST::ERBCaseMatchNode) -> void
|
125
|
+
def visit_erb_case_match_node(node)
|
126
|
+
visit_child_nodes(node)
|
127
|
+
end
|
128
|
+
|
129
|
+
#: (Herb::AST::ERBWhileNode) -> void
|
130
|
+
def visit_erb_while_node(node)
|
131
|
+
visit_child_nodes(node)
|
132
|
+
end
|
133
|
+
|
134
|
+
#: (Herb::AST::ERBUntilNode) -> void
|
135
|
+
def visit_erb_until_node(node)
|
136
|
+
visit_child_nodes(node)
|
137
|
+
end
|
138
|
+
|
139
|
+
#: (Herb::AST::ERBForNode) -> void
|
140
|
+
def visit_erb_for_node(node)
|
141
|
+
visit_child_nodes(node)
|
142
|
+
end
|
143
|
+
|
144
|
+
#: (Herb::AST::ERBRescueNode) -> void
|
145
|
+
def visit_erb_rescue_node(node)
|
146
|
+
visit_child_nodes(node)
|
147
|
+
end
|
148
|
+
|
149
|
+
#: (Herb::AST::ERBEnsureNode) -> void
|
150
|
+
def visit_erb_ensure_node(node)
|
151
|
+
visit_child_nodes(node)
|
152
|
+
end
|
153
|
+
|
154
|
+
#: (Herb::AST::ERBBeginNode) -> void
|
155
|
+
def visit_erb_begin_node(node)
|
156
|
+
visit_child_nodes(node)
|
157
|
+
end
|
158
|
+
|
159
|
+
#: (Herb::AST::ERBUnlessNode) -> void
|
160
|
+
def visit_erb_unless_node(node)
|
161
|
+
visit_child_nodes(node)
|
162
|
+
end
|
163
|
+
|
164
|
+
#: (Herb::AST::ERBYieldNode) -> void
|
165
|
+
def visit_erb_yield_node(node)
|
166
|
+
visit_child_nodes(node)
|
167
|
+
end
|
168
|
+
|
169
|
+
#: (Herb::AST::ERBInNode) -> void
|
170
|
+
def visit_erb_in_node(node)
|
171
|
+
visit_child_nodes(node)
|
172
|
+
end
|
173
|
+
|
174
|
+
end
|
175
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
# typed: true
|
3
|
+
|
4
|
+
module Herb
|
5
|
+
module Warnings
|
6
|
+
class Warning
|
7
|
+
attr_reader :type #: String
|
8
|
+
attr_reader :location #: Location
|
9
|
+
attr_reader :message #: String
|
10
|
+
|
11
|
+
#: (String, Location, String) -> void
|
12
|
+
def initialize(type, location, message)
|
13
|
+
@type = type
|
14
|
+
@location = location
|
15
|
+
@message = message
|
16
|
+
end
|
17
|
+
|
18
|
+
#: () -> serialized_warning
|
19
|
+
def to_hash
|
20
|
+
{
|
21
|
+
type: type,
|
22
|
+
location: location&.to_hash,
|
23
|
+
message: message,
|
24
|
+
}
|
25
|
+
end
|
26
|
+
|
27
|
+
#: () -> String
|
28
|
+
def class_name
|
29
|
+
self.class.name || "Warning"
|
30
|
+
end
|
31
|
+
|
32
|
+
#: () -> String
|
33
|
+
def warning_name
|
34
|
+
class_name.split("::").last || "Warning"
|
35
|
+
end
|
36
|
+
|
37
|
+
#: (?untyped) -> String
|
38
|
+
def to_json(state = nil)
|
39
|
+
to_hash.to_json(state)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
data/lib/herb.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
# typed: false
|
2
3
|
|
3
4
|
require_relative "herb/range"
|
4
5
|
require_relative "herb/position"
|
@@ -16,14 +17,18 @@ require_relative "herb/ast/node"
|
|
16
17
|
require_relative "herb/ast/nodes"
|
17
18
|
|
18
19
|
require_relative "herb/errors"
|
20
|
+
require_relative "herb/warnings"
|
19
21
|
|
20
22
|
require_relative "herb/cli"
|
21
23
|
require_relative "herb/project"
|
22
24
|
|
23
25
|
require_relative "herb/version"
|
24
26
|
|
27
|
+
require_relative "herb/visitor"
|
28
|
+
|
25
29
|
begin
|
26
|
-
|
30
|
+
major, minor, _patch = RUBY_VERSION.split(".") #: [String, String, String]
|
31
|
+
require_relative "herb/#{major}.#{minor}/herb"
|
27
32
|
rescue LoadError
|
28
33
|
require_relative "herb/herb"
|
29
34
|
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
# Generated from lib/herb/ast/node.rb with RBS::Inline
|
2
|
+
|
3
|
+
module Herb
|
4
|
+
module AST
|
5
|
+
class Node
|
6
|
+
attr_reader type: String
|
7
|
+
|
8
|
+
attr_reader location: Location
|
9
|
+
|
10
|
+
attr_reader errors: Array[Herb::Errors::Error]
|
11
|
+
|
12
|
+
# : (String, Location, Array[Herb::Errors::Error]) -> void
|
13
|
+
def initialize: (String, Location, Array[Herb::Errors::Error]) -> void
|
14
|
+
|
15
|
+
# : () -> serialized_node
|
16
|
+
def to_hash: () -> serialized_node
|
17
|
+
|
18
|
+
# : () -> String
|
19
|
+
def class_name: () -> String
|
20
|
+
|
21
|
+
# : () -> String
|
22
|
+
def node_name: () -> String
|
23
|
+
|
24
|
+
# : (?untyped) -> String
|
25
|
+
def to_json: (?untyped) -> String
|
26
|
+
|
27
|
+
# : (?prefix: String) -> String
|
28
|
+
def inspect_errors: (?prefix: String) -> String
|
29
|
+
|
30
|
+
# : (Array[Herb::AST::Node|Herb::Errors::Error], ?item_name: String, ?prefix: String) -> String
|
31
|
+
def inspect_array: (Array[Herb::AST::Node | Herb::Errors::Error], ?item_name: String, ?prefix: String) -> String
|
32
|
+
|
33
|
+
# : (?Integer) -> String
|
34
|
+
def tree_inspect: (?Integer) -> String
|
35
|
+
|
36
|
+
# : (Visitor) -> void
|
37
|
+
def accept: (Visitor) -> void
|
38
|
+
|
39
|
+
# : () -> Array[Herb::AST::Node?]
|
40
|
+
def child_nodes: () -> Array[Herb::AST::Node?]
|
41
|
+
|
42
|
+
alias deconstruct child_nodes
|
43
|
+
|
44
|
+
# : () -> Array[Herb::AST::Node]
|
45
|
+
def compact_child_nodes: () -> Array[Herb::AST::Node]
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|