Skip to content

Commit e335927

Browse files
committed
Implement Herb::Visitor in Ruby gem
1 parent 6adc523 commit e335927

File tree

10 files changed

+325
-0
lines changed

10 files changed

+325
-0
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,7 @@ javascript/packages/node/extension/nodes.cpp
9393
javascript/packages/node/extension/nodes.h
9494
lib/herb/ast/nodes.rb
9595
lib/herb/errors.rb
96+
lib/herb/visitor.rb
9697
sig/serialized_ast_nodes.rbs
9798
sig/serialized_ast_errors.rbs
9899
src/ast_nodes.c

lib/herb.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@
2424

2525
require_relative "herb/version"
2626

27+
require_relative "herb/visitor"
28+
2729
begin
2830
major, minor, _patch = RUBY_VERSION.split(".") #: [String, String, String]
2931
require_relative "herb/#{major}.#{minor}/herb"

lib/herb/ast/node.rb

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,18 @@ def inspect_array(array, item_name: "item", prefix: " ")
7575
def tree_inspect(_indent = 0)
7676
raise NotImplementedError
7777
end
78+
79+
#: (Visitor) -> void
80+
def accept(_visitor)
81+
raise NoMethodError, "undefined method `accept' for #{inspect}"
82+
end
83+
84+
#: () -> Array[Herb::AST::Node]
85+
def child_nodes
86+
raise NoMethodError, "undefined method `child_nodes' for #{inspect}"
87+
end
88+
89+
alias deconstruct child_nodes
7890
end
7991
end
8092
end

lib/herb/parse_result.rb

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,5 +26,10 @@ def success?
2626
def pretty_errors
2727
JSON.pretty_generate(errors + value.errors)
2828
end
29+
30+
#: (Visitor) -> void
31+
def visit(visitor)
32+
value.accept(visitor)
33+
end
2934
end
3035
end

sig/herb/ast/node.rbs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,14 @@ module Herb
3232

3333
# : (?Integer) -> String
3434
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
3543
end
3644
end
3745
end

0 commit comments

Comments
 (0)