masamune-ast 1.1.2 → 1.1.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +1 -1
- data/README.md +36 -3
- data/lib/masamune/abstract_syntax_tree/nodes/blocks/brace_block.rb +13 -0
- data/lib/masamune/abstract_syntax_tree/nodes/blocks/do_block.rb +13 -0
- data/lib/masamune/abstract_syntax_tree/{program.rb → nodes/program.rb} +1 -1
- data/lib/masamune/abstract_syntax_tree/{do_block.rb → nodes/support_nodes/block.rb} +3 -4
- data/lib/masamune/abstract_syntax_tree/nodes/support_nodes/comment.rb +25 -0
- data/lib/masamune/abstract_syntax_tree/nodes/symbol.rb +17 -0
- data/lib/masamune/abstract_syntax_tree/nodes/symbols/dyna_symbol.rb +20 -0
- data/lib/masamune/abstract_syntax_tree/nodes/symbols/symbol_literal.rb +21 -0
- data/lib/masamune/abstract_syntax_tree/{block_var.rb → nodes/variables/block_var.rb} +1 -1
- data/lib/masamune/abstract_syntax_tree.rb +81 -24
- data/lib/masamune/slasher.rb +3 -2
- data/lib/masamune/version.rb +1 -1
- data/lib/masamune.rb +18 -13
- metadata +19 -14
- data/lib/masamune/abstract_syntax_tree/brace_block.rb +0 -19
- /data/lib/masamune/abstract_syntax_tree/{assign.rb → nodes/assign.rb} +0 -0
- /data/lib/masamune/abstract_syntax_tree/{call.rb → nodes/call.rb} +0 -0
- /data/lib/masamune/abstract_syntax_tree/{def.rb → nodes/def.rb} +0 -0
- /data/lib/masamune/abstract_syntax_tree/{params.rb → nodes/params.rb} +0 -0
- /data/lib/masamune/abstract_syntax_tree/{string_content.rb → nodes/string_content.rb} +0 -0
- /data/lib/masamune/abstract_syntax_tree/{var_field.rb → nodes/variables/var_field.rb} +0 -0
- /data/lib/masamune/abstract_syntax_tree/{var_ref.rb → nodes/variables/var_ref.rb} +0 -0
- /data/lib/masamune/abstract_syntax_tree/{vcall.rb → nodes/vcall.rb} +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 34d1bcf1f5fc587393f5ded22b65afb26d64217253dcea0d83ea483574988326
|
4
|
+
data.tar.gz: 21f726e99d53494fb50c08012962156245a37920425fae2ab338946d463f2721
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2cca246c5770392976a5b9b9a577ac90a7363c8972bbf954f76493b13dfebbc16e3c3eeb3230238e348fa77f11accadf326fb774d11a40d03aaf172e15f9a946
|
7
|
+
data.tar.gz: 9da6db975cdd75e0a3fc57056bcb2908054a54f90da996660d4fca46e967e64aa5431a78e118b8a264ca4749f421fc7dc667626da5b6e28b7d724656d7bca241
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -33,7 +33,7 @@ code = <<~CODE
|
|
33
33
|
CODE
|
34
34
|
|
35
35
|
msmn = Masamune::AbstractSyntaxTree.new(code)
|
36
|
-
msmn.replace(type: :
|
36
|
+
msmn.replace(type: :variable, old_token: "n", new_token: "foo")
|
37
37
|
|
38
38
|
# This will produce the following code in string form.
|
39
39
|
10.times do |foo|
|
@@ -88,9 +88,9 @@ CODE
|
|
88
88
|
msmn = Masamune::AbstractSyntaxTree.new(code)
|
89
89
|
|
90
90
|
msmn.all_methods
|
91
|
-
#=> [{:position=>[
|
92
|
-
#=> {:position=>[2, 4], :token=>"sum"},
|
91
|
+
#=> [{:position=>[2, 4], :token=>"sum"},
|
93
92
|
#=> {:position=>[2, 8], :token=>"times"},
|
93
|
+
#=> {:position=>[6, 4], :token=>"foo"},
|
94
94
|
#=> {:position=>[8, 0], :token=>"foo"},
|
95
95
|
#=> {:position=>[9, 0], :token=>"foo"}]
|
96
96
|
|
@@ -104,6 +104,39 @@ msmn.method_definitions
|
|
104
104
|
#=> [{:position=>[6, 4], :token=>"foo"}]
|
105
105
|
```
|
106
106
|
|
107
|
+
You can also return the node classes themselves and get the data from there:
|
108
|
+
```ruby
|
109
|
+
code = <<~CODE
|
110
|
+
"ruby"
|
111
|
+
"rails"
|
112
|
+
CODE
|
113
|
+
|
114
|
+
msmn = Masamune::AbstractSyntaxTree.new(code)
|
115
|
+
msmn.strings(result_type: :nodes)
|
116
|
+
#=> [#<Masamune::AbstractSyntaxTree::StringContent:0x00007f6f7c9a6850
|
117
|
+
#=> @ast_id=1440,
|
118
|
+
#=> @contents=[:string_content, [:@tstring_content, "ruby", [1, 1]]],
|
119
|
+
#=> @data_nodes=
|
120
|
+
#=> [#<Masamune::AbstractSyntaxTree::DataNode:0x00007f6f7c9a6828
|
121
|
+
#=> @ast_id=1440,
|
122
|
+
#=> @contents=[:@tstring_content, "ruby", [1, 1]],
|
123
|
+
#=> @data_nodes=nil,
|
124
|
+
#=> @line_position=[1, 1],
|
125
|
+
#=> @token="ruby",
|
126
|
+
#=> @type=:@tstring_content>]>,
|
127
|
+
#=> #<Masamune::AbstractSyntaxTree::StringContent:0x00007f6f7c9a5630
|
128
|
+
#=> @ast_id=1440,
|
129
|
+
#=> @contents=[:string_content, [:@tstring_content, "rails", [2, 1]]],
|
130
|
+
#=> @data_nodes=
|
131
|
+
#=> [#<Masamune::AbstractSyntaxTree::DataNode:0x00007f6f7c9a5608
|
132
|
+
#=> @ast_id=1440,
|
133
|
+
#=> @contents=[:@tstring_content, "rails", [2, 1]],
|
134
|
+
#=> @data_nodes=nil,
|
135
|
+
#=> @line_position=[2, 1],
|
136
|
+
#=> @token="rails",
|
137
|
+
#=> @type=:@tstring_content>]>]
|
138
|
+
```
|
139
|
+
|
107
140
|
In some cases, it can be easier to look at the given lex nodes to analyze your source code since you can easily see the index and the line position it's on:
|
108
141
|
```ruby
|
109
142
|
msmn.lex_nodes
|
@@ -1,10 +1,9 @@
|
|
1
|
-
#
|
1
|
+
# DoBlock and BraceBlock share some of
|
2
|
+
# the same logic, so we share that here.
|
2
3
|
|
3
4
|
module Masamune
|
4
5
|
class AbstractSyntaxTree
|
5
|
-
class
|
6
|
-
attr_accessor :ast_id
|
7
|
-
|
6
|
+
class Block < Node
|
8
7
|
def initialize(contents, ast_id)
|
9
8
|
super
|
10
9
|
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# In the abstract syntax tree created by Ripper.sexp,
|
2
|
+
# the type for comments is :void_stmt, and it doesn't have
|
3
|
+
# a data node within it either. This means that the text
|
4
|
+
# for the comment doesn't exist in the ast. It DOES exist
|
5
|
+
# in LexNode though, so we grab from them there instead.
|
6
|
+
|
7
|
+
module Masamune
|
8
|
+
class AbstractSyntaxTree
|
9
|
+
class Comment < Node
|
10
|
+
def initialize(contents, ast_id)
|
11
|
+
super
|
12
|
+
|
13
|
+
# Since this is techincally supposed to be a :void_stmt
|
14
|
+
# in this ast, we just leave this as nil.
|
15
|
+
@contents = nil
|
16
|
+
end
|
17
|
+
|
18
|
+
def extract_data_nodes
|
19
|
+
[
|
20
|
+
DataNode.new([contents.type, contents.token, contents.position], @ast_id)
|
21
|
+
]
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# TODO: Add description.
|
2
|
+
|
3
|
+
module Masamune
|
4
|
+
class AbstractSyntaxTree
|
5
|
+
class Symbol < Node
|
6
|
+
def initialize(contents, ast_id)
|
7
|
+
super
|
8
|
+
end
|
9
|
+
|
10
|
+
def extract_data_nodes
|
11
|
+
[
|
12
|
+
DataNode.new(@contents[1], @ast_id)
|
13
|
+
]
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# TODO: Add description.
|
2
|
+
|
3
|
+
module Masamune
|
4
|
+
class AbstractSyntaxTree
|
5
|
+
class DynaSymbol < Node
|
6
|
+
def initialize(contents, ast_id)
|
7
|
+
super
|
8
|
+
end
|
9
|
+
|
10
|
+
# Dyna Symbols are symbols created from strings, i.e. - :"project".
|
11
|
+
# Since they have :@tstring_content inside of them, the data node
|
12
|
+
# is technically for a String, so instead of duplicating it here,
|
13
|
+
# we just use a method specifically for getting the symbol.
|
14
|
+
# This should be the same as the :symbol_literal type.
|
15
|
+
def get_symbol_data
|
16
|
+
DataNode.new(@contents[1][1], @ast_id)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
# TODO: Add description.
|
2
|
+
|
3
|
+
module Masamune
|
4
|
+
class AbstractSyntaxTree
|
5
|
+
class SymbolLiteral < Node
|
6
|
+
def initialize(contents, ast_id)
|
7
|
+
super
|
8
|
+
end
|
9
|
+
|
10
|
+
# Symbol Literals are a node type of :symbol_literal,
|
11
|
+
# but have a node type of :symbol nested within them.
|
12
|
+
# For the reason, the data node is technically for :symbol
|
13
|
+
# and not :symbol_literal, so instead of duplicating it here,
|
14
|
+
# we just use a method specifically for getting the symbol.
|
15
|
+
# This should be the same as the :dyna_symbol type.
|
16
|
+
def get_symbol_data
|
17
|
+
DataNode.new(@contents[1][1], @ast_id)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -11,7 +11,7 @@ module Masamune
|
|
11
11
|
|
12
12
|
# :block_var has a lot of nil values within in.
|
13
13
|
# I'm not sure what this represents, but it would be
|
14
|
-
# nice to find out and
|
14
|
+
# nice to find out and document/implement it somewhere.
|
15
15
|
def extract_data_nodes
|
16
16
|
@contents[1][1].map do |content|
|
17
17
|
DataNode.new(content, @ast_id)
|
@@ -1,6 +1,6 @@
|
|
1
1
|
module Masamune
|
2
2
|
class AbstractSyntaxTree
|
3
|
-
attr_reader :code, :tree
|
3
|
+
attr_reader :code, :tree, :comment_list
|
4
4
|
attr_accessor :node_list, :data_node_list, :lex_nodes
|
5
5
|
|
6
6
|
def initialize(code)
|
@@ -13,7 +13,12 @@ module Masamune
|
|
13
13
|
|
14
14
|
@node_list = []
|
15
15
|
@data_node_list = []
|
16
|
+
@comment_list = []
|
16
17
|
register_nodes(@tree)
|
18
|
+
|
19
|
+
# Refer to Masamune::AbstractSyntaxTree::Comment
|
20
|
+
# to see why we register these separately.
|
21
|
+
register_comments
|
17
22
|
end
|
18
23
|
|
19
24
|
def register_nodes(tree_node = self.tree)
|
@@ -36,30 +41,43 @@ module Masamune
|
|
36
41
|
end
|
37
42
|
end
|
38
43
|
|
44
|
+
def register_comments
|
45
|
+
comment_lex_nodes = @lex_nodes.select {|node| node.type == :comment}.flatten
|
46
|
+
@comment_list << comment_lex_nodes.map {|node| Comment.new(node, self.__id__)}
|
47
|
+
@comment_list.flatten!
|
48
|
+
end
|
49
|
+
|
50
|
+
# TODO: A lot of these methods have the same content,
|
51
|
+
# so I want to come up with a way to refactor these.
|
52
|
+
|
39
53
|
# TODO: Add block_params: true to the arguments.
|
40
|
-
def variables(name: nil)
|
54
|
+
def variables(name: nil, result_type: Hash)
|
41
55
|
var_classes = [
|
42
56
|
:var_field,
|
43
57
|
:var_ref,
|
44
58
|
:params
|
45
59
|
].map {|type| get_node_class(type)}
|
46
|
-
find_nodes(var_classes, token: name)
|
60
|
+
results = find_nodes(var_classes, token: name, result_type: result_type)
|
61
|
+
order_results(results)
|
47
62
|
end
|
48
63
|
|
49
|
-
def strings(content: nil)
|
50
|
-
find_nodes(get_node_class(:string_content), token: content)
|
64
|
+
def strings(content: nil, result_type: Hash)
|
65
|
+
results = find_nodes(get_node_class(:string_content), token: content, result_type: result_type)
|
66
|
+
order_results(results)
|
51
67
|
end
|
52
68
|
|
53
|
-
def method_definitions(name: nil)
|
54
|
-
find_nodes(get_node_class(:def), token: name)
|
69
|
+
def method_definitions(name: nil, result_type: Hash)
|
70
|
+
results = find_nodes(get_node_class(:def), token: name, result_type: result_type)
|
71
|
+
order_results(results)
|
55
72
|
end
|
56
73
|
|
57
|
-
def method_calls(name: nil)
|
74
|
+
def method_calls(name: nil, result_type: Hash)
|
58
75
|
method_classes = [
|
59
76
|
:vcall,
|
60
77
|
:call
|
61
78
|
].map {|type| get_node_class(type)}
|
62
|
-
find_nodes(method_classes, token: name)
|
79
|
+
results = find_nodes(method_classes, token: name, result_type: result_type)
|
80
|
+
order_results(results)
|
63
81
|
end
|
64
82
|
|
65
83
|
# TODO
|
@@ -70,37 +88,56 @@ module Masamune
|
|
70
88
|
def brace_block_params
|
71
89
|
end
|
72
90
|
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
91
|
+
def symbols(content: nil, result_type: Hash)
|
92
|
+
results = symbol_literals(content: content, result_type: result_type) + string_symbols(content: content, result_type: result_type)
|
93
|
+
order_results(results)
|
94
|
+
end
|
95
|
+
|
96
|
+
def symbol_literals(content: nil, result_type: Hash)
|
97
|
+
results = find_nodes(get_node_class(:symbol_literal), token: content, result_type: result_type)
|
98
|
+
order_results(results)
|
99
|
+
end
|
100
|
+
|
101
|
+
def string_symbols(content: nil, result_type: Hash)
|
102
|
+
results = find_nodes(get_node_class(:dyna_symbol), token: content, result_type: result_type)
|
103
|
+
order_results(results)
|
79
104
|
end
|
80
105
|
|
81
|
-
def
|
82
|
-
|
106
|
+
def comments(content: nil, result_type: Hash)
|
107
|
+
results = find_nodes(get_node_class(:comment), token: content, result_type: result_type)
|
108
|
+
order_results(results)
|
83
109
|
end
|
84
110
|
|
85
|
-
def
|
111
|
+
def all_methods(name: nil, result_type: Hash)
|
112
|
+
results = method_definitions(name: name, result_type: result_type) + method_calls(name: name, result_type: result_type)
|
113
|
+
order_results(results)
|
114
|
+
end
|
115
|
+
|
116
|
+
def block_params(content: nil, result_type: Hash)
|
86
117
|
# TODO: do_block_params + brace_block_params
|
87
|
-
find_nodes(get_node_class(:params))
|
118
|
+
results = find_nodes(get_node_class(:params), token: content, result_type: result_type)
|
119
|
+
order_results(results)
|
88
120
|
end
|
89
121
|
|
90
|
-
|
91
|
-
def find_nodes(token_classes, token: nil)
|
122
|
+
def find_nodes(token_classes, token: nil, result_type: Hash)
|
92
123
|
# Ensure the classes are in an array
|
93
124
|
token_classes = [token_classes].flatten
|
94
125
|
|
95
126
|
nodes = []
|
96
127
|
token_classes.each do |klass|
|
97
|
-
|
128
|
+
if klass == Masamune::AbstractSyntaxTree::Comment
|
129
|
+
nodes = @comment_list.dup
|
130
|
+
else
|
131
|
+
nodes << @node_list.select {|node| node.class == klass}
|
132
|
+
end
|
98
133
|
end
|
99
134
|
|
100
135
|
# Searching for multiple classes will yield multi-dimensional arrays,
|
101
136
|
# so we ensure everything is flattened out before moving forward.
|
102
137
|
nodes.flatten!
|
103
138
|
|
139
|
+
return nodes if result_type == :nodes
|
140
|
+
|
104
141
|
if token
|
105
142
|
# TODO: This most likely shouldn't be `node.data_nodes.first`.
|
106
143
|
# There are probably more data_nodes we need to check depending on the node class.
|
@@ -109,10 +146,19 @@ module Masamune
|
|
109
146
|
|
110
147
|
final_result = []
|
111
148
|
nodes.each do |node|
|
112
|
-
node
|
149
|
+
# Data for symbols are housed within a nested node, so we handle those differently here.
|
150
|
+
# Read the comments for `get_symbol_data` in the symbol node classes for details.
|
151
|
+
if node.class == Masamune::AbstractSyntaxTree::SymbolLiteral || node.class == Masamune::AbstractSyntaxTree::DynaSymbol
|
152
|
+
final_result << node.get_symbol_data.position_and_token
|
153
|
+
else
|
154
|
+
node.data_nodes.each {|dn| final_result << dn.position_and_token} if node.data_nodes
|
155
|
+
end
|
113
156
|
end
|
114
157
|
|
115
|
-
|
158
|
+
# Only order the information if we're returning hashes.
|
159
|
+
# TODO: We might want to change the placement of order_results_by_position
|
160
|
+
# if the operation is being done against hashes and not data nodes.
|
161
|
+
nodes.first.class.is_a?(Hash) ? DataNode.order_results_by_position(final_result) : final_result
|
116
162
|
end
|
117
163
|
|
118
164
|
def replace(type:, old_token:, new_token:)
|
@@ -136,5 +182,16 @@ module Masamune
|
|
136
182
|
Node
|
137
183
|
end
|
138
184
|
end
|
185
|
+
|
186
|
+
# We only order results when they are a Hash.
|
187
|
+
# The contents from the Hash are pulled from data nodes.
|
188
|
+
# i.e. - {position: [4, 7], token: "project"}
|
189
|
+
def order_results(results)
|
190
|
+
if results.first.is_a?(Hash)
|
191
|
+
DataNode.order_results_by_position(results)
|
192
|
+
else
|
193
|
+
results
|
194
|
+
end
|
195
|
+
end
|
139
196
|
end
|
140
197
|
end
|
data/lib/masamune/slasher.rb
CHANGED
@@ -3,8 +3,9 @@ module Masamune
|
|
3
3
|
def self.replace(type:, old_token:, new_token:, code:, ast:)
|
4
4
|
# `type` can either be a method from the ast like `method_definitions`,
|
5
5
|
# or it can be a list of Masamune::AbstractSyntaxTree node classes.
|
6
|
-
position_and_token_ary = if type.is_a?(Symbol)
|
7
|
-
|
6
|
+
position_and_token_ary = if type.is_a?(Symbol)
|
7
|
+
type_to_method = type.to_s.pluralize.to_sym
|
8
|
+
ast.send(type_to_method)
|
8
9
|
elsif type.is_a?(Array)
|
9
10
|
type.map {|klass| ast.find_nodes(klass)}.flatten
|
10
11
|
end
|
data/lib/masamune/version.rb
CHANGED
data/lib/masamune.rb
CHANGED
@@ -9,19 +9,24 @@ require "masamune/abstract_syntax_tree"
|
|
9
9
|
require "masamune/abstract_syntax_tree/node"
|
10
10
|
require "masamune/abstract_syntax_tree/data_node"
|
11
11
|
|
12
|
-
|
13
|
-
require "masamune/abstract_syntax_tree/
|
14
|
-
|
15
|
-
require "masamune/abstract_syntax_tree/brace_block"
|
16
|
-
require "masamune/abstract_syntax_tree/
|
17
|
-
require "masamune/abstract_syntax_tree/
|
18
|
-
require "masamune/abstract_syntax_tree/
|
19
|
-
require "masamune/abstract_syntax_tree/
|
20
|
-
require "masamune/abstract_syntax_tree/
|
21
|
-
require "masamune/abstract_syntax_tree/
|
22
|
-
require "masamune/abstract_syntax_tree/
|
23
|
-
require "masamune/abstract_syntax_tree/
|
24
|
-
require "masamune/abstract_syntax_tree/
|
12
|
+
require "masamune/abstract_syntax_tree/nodes/support_nodes/block"
|
13
|
+
require "masamune/abstract_syntax_tree/nodes/support_nodes/comment"
|
14
|
+
|
15
|
+
require "masamune/abstract_syntax_tree/nodes/blocks/brace_block"
|
16
|
+
require "masamune/abstract_syntax_tree/nodes/blocks/do_block"
|
17
|
+
require "masamune/abstract_syntax_tree/nodes/symbols/dyna_symbol"
|
18
|
+
require "masamune/abstract_syntax_tree/nodes/symbols/symbol_literal"
|
19
|
+
require "masamune/abstract_syntax_tree/nodes/variables/block_var"
|
20
|
+
require "masamune/abstract_syntax_tree/nodes/variables/var_field"
|
21
|
+
require "masamune/abstract_syntax_tree/nodes/variables/var_ref"
|
22
|
+
require "masamune/abstract_syntax_tree/nodes/assign"
|
23
|
+
require "masamune/abstract_syntax_tree/nodes/call"
|
24
|
+
require "masamune/abstract_syntax_tree/nodes/def"
|
25
|
+
require "masamune/abstract_syntax_tree/nodes/params"
|
26
|
+
require "masamune/abstract_syntax_tree/nodes/program"
|
27
|
+
require "masamune/abstract_syntax_tree/nodes/string_content"
|
28
|
+
require "masamune/abstract_syntax_tree/nodes/symbol"
|
29
|
+
require "masamune/abstract_syntax_tree/nodes/vcall"
|
25
30
|
|
26
31
|
require "pp"
|
27
32
|
require "pry"
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: masamune-ast
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.1.
|
4
|
+
version: 1.1.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Gabriel Zayas
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-06-
|
11
|
+
date: 2023-06-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -40,20 +40,25 @@ files:
|
|
40
40
|
- Rakefile
|
41
41
|
- lib/masamune.rb
|
42
42
|
- lib/masamune/abstract_syntax_tree.rb
|
43
|
-
- lib/masamune/abstract_syntax_tree/assign.rb
|
44
|
-
- lib/masamune/abstract_syntax_tree/block_var.rb
|
45
|
-
- lib/masamune/abstract_syntax_tree/brace_block.rb
|
46
|
-
- lib/masamune/abstract_syntax_tree/call.rb
|
47
43
|
- lib/masamune/abstract_syntax_tree/data_node.rb
|
48
|
-
- lib/masamune/abstract_syntax_tree/def.rb
|
49
|
-
- lib/masamune/abstract_syntax_tree/do_block.rb
|
50
44
|
- lib/masamune/abstract_syntax_tree/node.rb
|
51
|
-
- lib/masamune/abstract_syntax_tree/
|
52
|
-
- lib/masamune/abstract_syntax_tree/
|
53
|
-
- lib/masamune/abstract_syntax_tree/
|
54
|
-
- lib/masamune/abstract_syntax_tree/
|
55
|
-
- lib/masamune/abstract_syntax_tree/
|
56
|
-
- lib/masamune/abstract_syntax_tree/
|
45
|
+
- lib/masamune/abstract_syntax_tree/nodes/assign.rb
|
46
|
+
- lib/masamune/abstract_syntax_tree/nodes/blocks/brace_block.rb
|
47
|
+
- lib/masamune/abstract_syntax_tree/nodes/blocks/do_block.rb
|
48
|
+
- lib/masamune/abstract_syntax_tree/nodes/call.rb
|
49
|
+
- lib/masamune/abstract_syntax_tree/nodes/def.rb
|
50
|
+
- lib/masamune/abstract_syntax_tree/nodes/params.rb
|
51
|
+
- lib/masamune/abstract_syntax_tree/nodes/program.rb
|
52
|
+
- lib/masamune/abstract_syntax_tree/nodes/string_content.rb
|
53
|
+
- lib/masamune/abstract_syntax_tree/nodes/support_nodes/block.rb
|
54
|
+
- lib/masamune/abstract_syntax_tree/nodes/support_nodes/comment.rb
|
55
|
+
- lib/masamune/abstract_syntax_tree/nodes/symbol.rb
|
56
|
+
- lib/masamune/abstract_syntax_tree/nodes/symbols/dyna_symbol.rb
|
57
|
+
- lib/masamune/abstract_syntax_tree/nodes/symbols/symbol_literal.rb
|
58
|
+
- lib/masamune/abstract_syntax_tree/nodes/variables/block_var.rb
|
59
|
+
- lib/masamune/abstract_syntax_tree/nodes/variables/var_field.rb
|
60
|
+
- lib/masamune/abstract_syntax_tree/nodes/variables/var_ref.rb
|
61
|
+
- lib/masamune/abstract_syntax_tree/nodes/vcall.rb
|
57
62
|
- lib/masamune/lex_node.rb
|
58
63
|
- lib/masamune/slasher.rb
|
59
64
|
- lib/masamune/version.rb
|
@@ -1,19 +0,0 @@
|
|
1
|
-
# TODO: Add description.
|
2
|
-
|
3
|
-
module Masamune
|
4
|
-
class AbstractSyntaxTree
|
5
|
-
class BraceBlock < Node
|
6
|
-
attr_accessor :ast_id
|
7
|
-
|
8
|
-
def initialize(contents, ast_id)
|
9
|
-
super
|
10
|
-
end
|
11
|
-
|
12
|
-
def params
|
13
|
-
# This node should exist already, so we search for it in the ast object.
|
14
|
-
block_var = BlockVar.new(contents[1], ast_id)
|
15
|
-
ast.node_list.find {|node| node.contents == block_var.contents}
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|