herb 0.1.1-x86-linux-musl → 0.2.0-x86-linux-musl

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 (80) hide show
  1. checksums.yaml +4 -4
  2. data/Rakefile +20 -2
  3. data/ext/herb/extension.c +46 -14
  4. data/ext/herb/extension.h +9 -0
  5. data/ext/herb/extension_helpers.c +9 -27
  6. data/ext/herb/nodes.c +104 -1
  7. data/herb.gemspec +2 -1
  8. data/lib/herb/3.0/herb.so +0 -0
  9. data/lib/herb/3.1/herb.so +0 -0
  10. data/lib/herb/3.2/herb.so +0 -0
  11. data/lib/herb/3.3/herb.so +0 -0
  12. data/lib/herb/3.4/herb.so +0 -0
  13. data/lib/herb/ast/node.rb +40 -4
  14. data/lib/herb/ast/nodes.rb +892 -140
  15. data/lib/herb/ast.rb +1 -0
  16. data/lib/herb/cli.rb +4 -1
  17. data/lib/herb/errors.rb +84 -33
  18. data/lib/herb/lex_result.rb +4 -1
  19. data/lib/herb/libherb/array.rb +3 -0
  20. data/lib/herb/libherb/ast_node.rb +3 -0
  21. data/lib/herb/libherb/buffer.rb +3 -0
  22. data/lib/herb/libherb/extract_result.rb +3 -0
  23. data/lib/herb/libherb/lex_result.rb +3 -0
  24. data/lib/herb/libherb/libherb.rb +3 -0
  25. data/lib/herb/libherb/parse_result.rb +3 -0
  26. data/lib/herb/libherb/token.rb +3 -0
  27. data/lib/herb/libherb.rb +3 -0
  28. data/lib/herb/location.rb +15 -6
  29. data/lib/herb/parse_result.rb +10 -1
  30. data/lib/herb/position.rb +17 -8
  31. data/lib/herb/project.rb +13 -4
  32. data/lib/herb/range.rb +18 -8
  33. data/lib/herb/result.rb +7 -1
  34. data/lib/herb/token.rb +14 -4
  35. data/lib/herb/token_list.rb +10 -1
  36. data/lib/herb/version.rb +2 -1
  37. data/lib/herb/visitor.rb +175 -0
  38. data/lib/herb/warnings.rb +43 -0
  39. data/lib/herb.rb +6 -1
  40. data/sig/herb/ast/node.rbs +48 -0
  41. data/sig/herb/ast/nodes.rbs +941 -0
  42. data/sig/herb/ast.rbs +6 -0
  43. data/sig/herb/errors.rbs +193 -0
  44. data/sig/herb/lex_result.rbs +16 -0
  45. data/sig/herb/location.rbs +30 -0
  46. data/sig/herb/parse_result.rbs +22 -0
  47. data/sig/herb/position.rbs +30 -0
  48. data/sig/herb/range.rbs +33 -0
  49. data/sig/herb/result.rbs +20 -0
  50. data/sig/herb/token.rbs +31 -0
  51. data/sig/herb/token_list.rbs +13 -0
  52. data/sig/herb/version.rbs +5 -0
  53. data/sig/herb/visitor.rbs +104 -0
  54. data/sig/herb/warnings.rbs +28 -0
  55. data/sig/herb.rbs +4 -0
  56. data/sig/serialized.rbs +9 -0
  57. data/sig/serialized_ast_errors.rbs +53 -0
  58. data/sig/serialized_ast_nodes.rbs +221 -0
  59. data/src/analyze.c +138 -43
  60. data/src/analyze_helpers.c +44 -1
  61. data/src/analyzed_ruby.c +10 -1
  62. data/src/ast_nodes.c +103 -1
  63. data/src/ast_pretty_print.c +60 -0
  64. data/src/buffer.c +60 -27
  65. data/src/extract.c +57 -20
  66. data/src/include/analyze.h +3 -0
  67. data/src/include/analyze_helpers.h +6 -0
  68. data/src/include/analyzed_ruby.h +3 -0
  69. data/src/include/ast_nodes.h +32 -0
  70. data/src/include/buffer.h +5 -2
  71. data/src/include/lexer_peek_helpers.h +2 -2
  72. data/src/include/macros.h +2 -2
  73. data/src/include/version.h +1 -1
  74. data/src/lexer.c +1 -1
  75. data/src/parser.c +17 -7
  76. data/src/token.c +1 -1
  77. data/src/util.c +3 -1
  78. data/src/visitor.c +36 -0
  79. metadata +24 -3
  80. /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, :to
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
- def self.[](...)
13
- new(...)
15
+ #: (Integer, Integer) -> Range
16
+ def self.[](from, to)
17
+ new(from, to)
14
18
  end
15
19
 
16
- def self.from(...)
17
- new(...)
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
- def to_json(*args)
25
- to_a.to_json(*args)
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, :warnings, :errors
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, :range, :location, :type
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
- def to_json(*args)
24
- to_hash.to_json(*args)
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
@@ -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
- "#{itself.map(&:inspect).join("\n").force_encoding("utf-8")}\n"
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
@@ -1,5 +1,6 @@
1
1
  # frozen_string_literal: true
2
+ # typed: true
2
3
 
3
4
  module Herb
4
- VERSION = "0.1.1"
5
+ VERSION = "0.2.0"
5
6
  end
@@ -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
- require_relative "herb/#{RUBY_VERSION.split(".")[...2].join(".")}/herb"
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