masamune-ast 1.2.0 → 1.2.1
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/Gemfile.lock +2 -1
- data/lib/masamune/abstract_syntax_tree/data_node.rb +4 -20
- data/lib/masamune/abstract_syntax_tree.rb +12 -29
- data/lib/masamune/version.rb +1 -1
- data/lib/masamune.rb +0 -1
- metadata +6 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f599b770d8e12444bbb2c2bb6aad28d8d0b9673e99708d9d713af4186f96fb4f
|
4
|
+
data.tar.gz: 723f6ab17c2152f9ab92e6da6f0130bc1ab1aa1fd0174ee00a1d9bb7206df182
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 622cfe88710212e12d4045fe39837dd9767b56b64abb62872f544b37d6ac286f85dfb9324ef709bb32ab4219e280eff7f4fc6a966ddb379b79b5a5b3b9c06dc3
|
7
|
+
data.tar.gz: 7db8c29128764c9c36f79a98156c68d4bc008a183ceeed351405a6377606721e33523b267362b0cf1f3a19119db3e1606d494869ec28f340680a8812a4e3868b
|
data/Gemfile.lock
CHANGED
@@ -26,27 +26,11 @@ module Masamune
|
|
26
26
|
# ]
|
27
27
|
# TODO: Worry about using a faster sorting algorithm later.
|
28
28
|
def self.order_results_by_position(results)
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
# Group data together in an array if they're on the same line.
|
34
|
-
shared_line_data = results.select {|result| result[:line_number] == line_number}
|
35
|
-
|
36
|
-
# Sort the positions on each line number respectively.
|
37
|
-
indexes_on_line = shared_line_data.map {|data| data[:index_on_line]}.sort
|
38
|
-
|
39
|
-
# Apply to the final result.
|
40
|
-
indexes_on_line.each do |index_on_line|
|
41
|
-
shared_line_data.each do |data|
|
42
|
-
if data[:index_on_line] == index_on_line
|
43
|
-
final_result << data
|
44
|
-
end
|
45
|
-
end
|
46
|
-
end
|
29
|
+
results.sort do |a, b|
|
30
|
+
by_line = a[:line_number] <=> b[:line_number]
|
31
|
+
# If we're on the same line, refer to the inner index for order.
|
32
|
+
by_line.zero? ? a[:index_on_line] <=> b[:index_on_line] : by_line
|
47
33
|
end
|
48
|
-
|
49
|
-
final_result
|
50
34
|
end
|
51
35
|
|
52
36
|
def line_data_and_token
|
@@ -52,32 +52,22 @@ module Masamune
|
|
52
52
|
|
53
53
|
# TODO: Add block_params: true to the arguments.
|
54
54
|
def variables(name: nil, result_type: Hash)
|
55
|
-
|
56
|
-
:var_field,
|
57
|
-
:var_ref,
|
58
|
-
:params
|
59
|
-
].map {|type| get_node_class(type)}
|
60
|
-
results = find_nodes(var_classes, token: name, result_type: result_type)
|
55
|
+
results = find_nodes([VarField, VarRef, Params], token: name, result_type: result_type)
|
61
56
|
order_results(results)
|
62
57
|
end
|
63
58
|
|
64
59
|
def strings(content: nil, result_type: Hash)
|
65
|
-
results = find_nodes(
|
60
|
+
results = find_nodes(StringContent, token: content, result_type: result_type)
|
66
61
|
order_results(results)
|
67
62
|
end
|
68
63
|
|
69
64
|
def method_definitions(name: nil, result_type: Hash)
|
70
|
-
results = find_nodes(
|
65
|
+
results = find_nodes(Def, token: name, result_type: result_type)
|
71
66
|
order_results(results)
|
72
67
|
end
|
73
68
|
|
74
69
|
def method_calls(name: nil, result_type: Hash)
|
75
|
-
|
76
|
-
:vcall,
|
77
|
-
:call,
|
78
|
-
:command
|
79
|
-
].map {|type| get_node_class(type)}
|
80
|
-
results = find_nodes(method_classes, token: name, result_type: result_type)
|
70
|
+
results = find_nodes([Vcall, Call, Command], token: name, result_type: result_type)
|
81
71
|
order_results(results)
|
82
72
|
end
|
83
73
|
|
@@ -95,17 +85,17 @@ module Masamune
|
|
95
85
|
end
|
96
86
|
|
97
87
|
def symbol_literals(content: nil, result_type: Hash)
|
98
|
-
results = find_nodes(
|
88
|
+
results = find_nodes(SymbolLiteral, token: content, result_type: result_type)
|
99
89
|
order_results(results)
|
100
90
|
end
|
101
91
|
|
102
92
|
def string_symbols(content: nil, result_type: Hash)
|
103
|
-
results = find_nodes(
|
93
|
+
results = find_nodes(DynaSymbol, token: content, result_type: result_type)
|
104
94
|
order_results(results)
|
105
95
|
end
|
106
96
|
|
107
97
|
def comments(content: nil, result_type: Hash)
|
108
|
-
results = find_nodes(
|
98
|
+
results = find_nodes(Comment, token: content, result_type: result_type)
|
109
99
|
order_results(results)
|
110
100
|
end
|
111
101
|
|
@@ -116,17 +106,16 @@ module Masamune
|
|
116
106
|
|
117
107
|
def block_params(content: nil, result_type: Hash)
|
118
108
|
# TODO: do_block_params + brace_block_params
|
119
|
-
results = find_nodes(
|
109
|
+
results = find_nodes(Params, token: content, result_type: result_type)
|
120
110
|
order_results(results)
|
121
111
|
end
|
122
112
|
|
123
113
|
def find_nodes(token_classes, token: nil, result_type: Hash)
|
124
|
-
|
125
|
-
token_classes = [token_classes].flatten
|
114
|
+
token_classes = Array(token_classes)
|
126
115
|
|
127
116
|
nodes = []
|
128
117
|
token_classes.each do |klass|
|
129
|
-
if klass ==
|
118
|
+
if klass == Comment
|
130
119
|
nodes = @comment_list.dup
|
131
120
|
else
|
132
121
|
nodes << @node_list.select {|node| node.class == klass}
|
@@ -149,7 +138,7 @@ module Masamune
|
|
149
138
|
nodes.each do |node|
|
150
139
|
# Data for symbols are housed within a nested node, so we handle those differently here.
|
151
140
|
# Read the comments for `get_symbol_data` in the symbol node classes for details.
|
152
|
-
if node.class ==
|
141
|
+
if node.class == SymbolLiteral || node.class == DynaSymbol
|
153
142
|
final_result << node.get_symbol_data.line_data_and_token
|
154
143
|
else
|
155
144
|
node.data_nodes.each {|dn| final_result << dn.line_data_and_token} if node.data_nodes
|
@@ -176,13 +165,7 @@ module Masamune
|
|
176
165
|
private
|
177
166
|
|
178
167
|
def get_node_class(type)
|
179
|
-
|
180
|
-
"Masamune::AbstractSyntaxTree::#{type.to_s.camelize}".constantize
|
181
|
-
rescue NameError
|
182
|
-
# For all other nodes that we haven't covered yet, we just make a general class.
|
183
|
-
# We can worry about adding the classes for other nodes as we go.
|
184
|
-
Node
|
185
|
-
end
|
168
|
+
"#{self.class}::#{type.to_s.camelize}".safe_constantize || Node # Return base Node class for any not-yet-covered nodes.
|
186
169
|
end
|
187
170
|
|
188
171
|
# We only order results when they are a Hash.
|
data/lib/masamune/version.rb
CHANGED
data/lib/masamune.rb
CHANGED
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.2.
|
4
|
+
version: 1.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Gabriel Zayas
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-
|
11
|
+
date: 2023-10-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -71,7 +71,7 @@ metadata:
|
|
71
71
|
homepage_uri: https://www.github.com/gazayas/masamune-ast
|
72
72
|
source_code_uri: https://www.github.com/gazayas/masamune-ast
|
73
73
|
changelog_uri: https://www.github.com/gazayas/masamune-ast
|
74
|
-
post_install_message:
|
74
|
+
post_install_message:
|
75
75
|
rdoc_options: []
|
76
76
|
require_paths:
|
77
77
|
- lib
|
@@ -86,8 +86,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
86
86
|
- !ruby/object:Gem::Version
|
87
87
|
version: '0'
|
88
88
|
requirements: []
|
89
|
-
rubygems_version: 3.
|
90
|
-
signing_key:
|
89
|
+
rubygems_version: 3.4.1
|
90
|
+
signing_key:
|
91
91
|
specification_version: 4
|
92
92
|
summary: Masamune
|
93
93
|
test_files: []
|