ripper_ruby_parser 1.7.2 → 1.8.0
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/CHANGELOG.md +28 -0
- data/README.md +4 -4
- data/lib/ripper_ruby_parser/commenting_ripper_parser.rb +24 -12
- data/lib/ripper_ruby_parser/sexp_handlers/blocks.rb +33 -54
- data/lib/ripper_ruby_parser/sexp_handlers/conditionals.rb +17 -19
- data/lib/ripper_ruby_parser/sexp_handlers/helper_methods.rb +34 -1
- data/lib/ripper_ruby_parser/sexp_handlers/method_calls.rb +1 -1
- data/lib/ripper_ruby_parser/sexp_handlers/methods.rb +12 -15
- data/lib/ripper_ruby_parser/sexp_handlers/string_literals.rb +21 -15
- data/lib/ripper_ruby_parser/sexp_processor.rb +4 -17
- data/lib/ripper_ruby_parser/unescape.rb +36 -12
- data/lib/ripper_ruby_parser/version.rb +1 -1
- metadata +110 -78
- data/Rakefile +0 -33
- data/test/end_to_end/comments_test.rb +0 -59
- data/test/end_to_end/comparison_test.rb +0 -104
- data/test/end_to_end/lib_comparison_test.rb +0 -18
- data/test/end_to_end/line_numbering_test.rb +0 -31
- data/test/end_to_end/samples_comparison_test.rb +0 -13
- data/test/end_to_end/test_comparison_test.rb +0 -18
- data/test/pt_testcase/pt_test.rb +0 -44
- data/test/ripper_ruby_parser/commenting_ripper_parser_test.rb +0 -200
- data/test/ripper_ruby_parser/parser_test.rb +0 -576
- data/test/ripper_ruby_parser/sexp_handlers/assignment_test.rb +0 -597
- data/test/ripper_ruby_parser/sexp_handlers/blocks_test.rb +0 -717
- data/test/ripper_ruby_parser/sexp_handlers/conditionals_test.rb +0 -536
- data/test/ripper_ruby_parser/sexp_handlers/literals_test.rb +0 -165
- data/test/ripper_ruby_parser/sexp_handlers/loops_test.rb +0 -209
- data/test/ripper_ruby_parser/sexp_handlers/method_calls_test.rb +0 -237
- data/test/ripper_ruby_parser/sexp_handlers/methods_test.rb +0 -429
- data/test/ripper_ruby_parser/sexp_handlers/operators_test.rb +0 -405
- data/test/ripper_ruby_parser/sexp_handlers/string_literals_test.rb +0 -973
- data/test/ripper_ruby_parser/sexp_processor_test.rb +0 -327
- data/test/ripper_ruby_parser/version_test.rb +0 -7
- data/test/samples/assignment.rb +0 -22
- data/test/samples/comments.rb +0 -13
- data/test/samples/conditionals.rb +0 -23
- data/test/samples/lambdas.rb +0 -5
- data/test/samples/loops.rb +0 -36
- data/test/samples/misc.rb +0 -285
- data/test/samples/number.rb +0 -9
- data/test/samples/operators.rb +0 -18
- data/test/samples/strings.rb +0 -147
- data/test/test_helper.rb +0 -111
@@ -135,8 +135,25 @@ module RipperRubyParser
|
|
135
135
|
|
136
136
|
list = merge_raw_string_literals list
|
137
137
|
list = map_process_list list
|
138
|
+
parts = unpack_dstr list
|
139
|
+
merge_initial_string_literals(parts)
|
140
|
+
end
|
141
|
+
|
142
|
+
def merge_raw_string_literals(list)
|
143
|
+
chunks = list.chunk { |it| it.sexp_type == :@tstring_content }
|
144
|
+
chunks.flat_map do |is_simple, items|
|
145
|
+
if is_simple && items.count > 1
|
146
|
+
head = items.first
|
147
|
+
contents = items.map { |it| it[1] }.join
|
148
|
+
[s(:@tstring_content, contents, head[2], head[3])]
|
149
|
+
else
|
150
|
+
items
|
151
|
+
end
|
152
|
+
end
|
153
|
+
end
|
138
154
|
|
139
|
-
|
155
|
+
def unpack_dstr(list)
|
156
|
+
list.flat_map do |item|
|
140
157
|
type, val, *rest = item
|
141
158
|
if type == :dstr
|
142
159
|
if val.empty?
|
@@ -148,7 +165,9 @@ module RipperRubyParser
|
|
148
165
|
[item]
|
149
166
|
end
|
150
167
|
end
|
168
|
+
end
|
151
169
|
|
170
|
+
def merge_initial_string_literals(parts)
|
152
171
|
string = ""
|
153
172
|
while parts.first&.sexp_type == :str
|
154
173
|
str = parts.shift
|
@@ -159,19 +178,6 @@ module RipperRubyParser
|
|
159
178
|
return line, string, parts
|
160
179
|
end
|
161
180
|
|
162
|
-
def merge_raw_string_literals(list)
|
163
|
-
chunks = list.chunk { |it| it.sexp_type == :@tstring_content }
|
164
|
-
chunks.flat_map do |is_simple, items|
|
165
|
-
if is_simple && items.count > 1
|
166
|
-
head = items.first
|
167
|
-
contents = items.map { |it| it[1] }.join
|
168
|
-
[s(:@tstring_content, contents, head[2], head[3])]
|
169
|
-
else
|
170
|
-
items
|
171
|
-
end
|
172
|
-
end
|
173
|
-
end
|
174
|
-
|
175
181
|
def character_flags_to_numerical(flags)
|
176
182
|
numflags = 0
|
177
183
|
|
@@ -196,7 +202,7 @@ module RipperRubyParser
|
|
196
202
|
end
|
197
203
|
|
198
204
|
def handle_symbol_content(node)
|
199
|
-
if node.sexp_type ==
|
205
|
+
if node.sexp_type == :@kw
|
200
206
|
symbol, position = extract_node_symbol_with_position(node)
|
201
207
|
with_position(position, s(:lit, symbol))
|
202
208
|
else
|
@@ -11,8 +11,7 @@ module RipperRubyParser
|
|
11
11
|
class SexpProcessor < ::SexpProcessor
|
12
12
|
include Unescape
|
13
13
|
|
14
|
-
attr_reader :filename
|
15
|
-
attr_reader :extra_compatible
|
14
|
+
attr_reader :filename, :extra_compatible
|
16
15
|
|
17
16
|
def initialize(filename: nil, extra_compatible: nil)
|
18
17
|
super()
|
@@ -68,15 +67,7 @@ module RipperRubyParser
|
|
68
67
|
statements = map_unwrap_begin_list map_process_list statements
|
69
68
|
line = statements.first.line
|
70
69
|
statements = reject_void_stmt statements
|
71
|
-
|
72
|
-
when 0
|
73
|
-
s(:void_stmt).line(line)
|
74
|
-
when 1
|
75
|
-
statements.first
|
76
|
-
else
|
77
|
-
first = statements.shift
|
78
|
-
s(:block, *unwrap_block(first), *statements)
|
79
|
-
end
|
70
|
+
wrap_in_block(statements, line)
|
80
71
|
end
|
81
72
|
|
82
73
|
def process_var_ref(exp)
|
@@ -125,11 +116,7 @@ module RipperRubyParser
|
|
125
116
|
def process_paren(exp)
|
126
117
|
_, body = exp.shift 2
|
127
118
|
result = process body
|
128
|
-
|
129
|
-
s(:nil)
|
130
|
-
else
|
131
|
-
result
|
132
|
-
end
|
119
|
+
convert_void_stmt_to_nil_symbol result
|
133
120
|
end
|
134
121
|
|
135
122
|
def process_comment(exp)
|
@@ -234,7 +221,7 @@ module RipperRubyParser
|
|
234
221
|
def class_or_module_body(exp)
|
235
222
|
body = process(exp)
|
236
223
|
|
237
|
-
return
|
224
|
+
return [] if body.sexp_type == :void_stmt
|
238
225
|
|
239
226
|
unwrap_block body
|
240
227
|
end
|
@@ -95,7 +95,7 @@ module RipperRubyParser
|
|
95
95
|
when "\n"
|
96
96
|
""
|
97
97
|
else
|
98
|
-
|
98
|
+
"\\\\"
|
99
99
|
end
|
100
100
|
end
|
101
101
|
end
|
@@ -107,24 +107,48 @@ module RipperRubyParser
|
|
107
107
|
when SINGLE_LETTER_ESCAPES_REGEXP
|
108
108
|
SINGLE_LETTER_ESCAPES[bare]
|
109
109
|
when /^x/
|
110
|
-
|
111
|
-
when /^u\{/
|
112
|
-
hex_to_unicode_char(bare[2..-2])
|
110
|
+
unescape_hex_char bare
|
113
111
|
when /^u/
|
114
|
-
|
115
|
-
when /^(c|C-).$/
|
116
|
-
|
117
|
-
when /^M-.$/
|
118
|
-
meta(bare[-1].ord).chr
|
119
|
-
when /^(M-\\C-|C-\\M-|M-\\c|c\\M-).$/
|
120
|
-
meta(control(bare[-1].ord)).chr
|
112
|
+
unescape_unicode_char bare
|
113
|
+
when /^(c|C-|M-|M-\\C-|C-\\M-|M-\\c|c\\M-).$/
|
114
|
+
unescape_meta_control bare
|
121
115
|
when /^[0-7]+/
|
122
|
-
bare
|
116
|
+
unescape_octal bare
|
123
117
|
else
|
124
118
|
bare
|
125
119
|
end
|
126
120
|
end
|
127
121
|
|
122
|
+
def unescape_hex_char(bare)
|
123
|
+
hex_to_char(bare[1..-1])
|
124
|
+
end
|
125
|
+
|
126
|
+
def unescape_unicode_char(bare)
|
127
|
+
hex_chars = if bare.start_with? "u{"
|
128
|
+
bare[2..-2]
|
129
|
+
else
|
130
|
+
bare[1..4]
|
131
|
+
end
|
132
|
+
hex_to_unicode_char(hex_chars)
|
133
|
+
end
|
134
|
+
|
135
|
+
def unescape_meta_control(bare)
|
136
|
+
base_value = bare[-1].ord
|
137
|
+
value = case bare
|
138
|
+
when /^(c|C-).$/
|
139
|
+
control(base_value)
|
140
|
+
when /^M-.$/
|
141
|
+
meta(base_value)
|
142
|
+
when /^(M-\\C-|C-\\M-|M-\\c|c\\M-).$/
|
143
|
+
meta(control(base_value))
|
144
|
+
end
|
145
|
+
value.chr
|
146
|
+
end
|
147
|
+
|
148
|
+
def unescape_octal(bare)
|
149
|
+
bare.to_i(8).chr
|
150
|
+
end
|
151
|
+
|
128
152
|
def hex_to_unicode_char(str)
|
129
153
|
str.to_i(16).chr(Encoding::UTF_8)
|
130
154
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ripper_ruby_parser
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.8.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Matijs van Zuijlen
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-05-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: sexp_processor
|
@@ -38,6 +38,20 @@ dependencies:
|
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '5.6'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: pry
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: 0.14.0
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 0.14.0
|
41
55
|
- !ruby/object:Gem::Dependency
|
42
56
|
name: rake
|
43
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -52,37 +66,113 @@ dependencies:
|
|
52
66
|
- - "~>"
|
53
67
|
- !ruby/object:Gem::Version
|
54
68
|
version: '13.0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: rake-manifest
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: 0.2.0
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: 0.2.0
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: rubocop
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: 1.15.0
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: 1.15.0
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: rubocop-minitest
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - "~>"
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: 0.12.1
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - "~>"
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: 0.12.1
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: rubocop-performance
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - "~>"
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: 1.11.0
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - "~>"
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: 1.11.0
|
55
125
|
- !ruby/object:Gem::Dependency
|
56
126
|
name: ruby_parser
|
57
127
|
requirement: !ruby/object:Gem::Requirement
|
58
128
|
requirements:
|
59
129
|
- - "~>"
|
60
130
|
- !ruby/object:Gem::Version
|
61
|
-
version: 3.
|
131
|
+
version: 3.16.0
|
62
132
|
type: :development
|
63
133
|
prerelease: false
|
64
134
|
version_requirements: !ruby/object:Gem::Requirement
|
65
135
|
requirements:
|
66
136
|
- - "~>"
|
67
137
|
- !ruby/object:Gem::Version
|
68
|
-
version: 3.
|
138
|
+
version: 3.16.0
|
69
139
|
- !ruby/object:Gem::Dependency
|
70
|
-
name:
|
140
|
+
name: sexp_processor
|
71
141
|
requirement: !ruby/object:Gem::Requirement
|
72
142
|
requirements:
|
73
143
|
- - ">="
|
74
144
|
- !ruby/object:Gem::Version
|
75
|
-
version:
|
145
|
+
version: 4.13.0
|
146
|
+
- - "<"
|
147
|
+
- !ruby/object:Gem::Version
|
148
|
+
version: '4.16'
|
76
149
|
type: :development
|
77
150
|
prerelease: false
|
78
151
|
version_requirements: !ruby/object:Gem::Requirement
|
79
152
|
requirements:
|
80
153
|
- - ">="
|
81
154
|
- !ruby/object:Gem::Version
|
82
|
-
version:
|
83
|
-
|
84
|
-
|
85
|
-
|
155
|
+
version: 4.13.0
|
156
|
+
- - "<"
|
157
|
+
- !ruby/object:Gem::Version
|
158
|
+
version: '4.16'
|
159
|
+
- !ruby/object:Gem::Dependency
|
160
|
+
name: simplecov
|
161
|
+
requirement: !ruby/object:Gem::Requirement
|
162
|
+
requirements:
|
163
|
+
- - "~>"
|
164
|
+
- !ruby/object:Gem::Version
|
165
|
+
version: 0.21.0
|
166
|
+
type: :development
|
167
|
+
prerelease: false
|
168
|
+
version_requirements: !ruby/object:Gem::Requirement
|
169
|
+
requirements:
|
170
|
+
- - "~>"
|
171
|
+
- !ruby/object:Gem::Version
|
172
|
+
version: 0.21.0
|
173
|
+
description: |
|
174
|
+
RipperRubyParser is a parser for Ruby based on Ripper that aims to be a
|
175
|
+
drop-in replacement for RubyParser.
|
86
176
|
email:
|
87
177
|
- matijs@matijs.net
|
88
178
|
executables: []
|
@@ -92,7 +182,6 @@ extra_rdoc_files:
|
|
92
182
|
files:
|
93
183
|
- CHANGELOG.md
|
94
184
|
- README.md
|
95
|
-
- Rakefile
|
96
185
|
- lib/ripper_ruby_parser.rb
|
97
186
|
- lib/ripper_ruby_parser/commenting_ripper_parser.rb
|
98
187
|
- lib/ripper_ruby_parser/parser.rb
|
@@ -111,41 +200,14 @@ files:
|
|
111
200
|
- lib/ripper_ruby_parser/syntax_error.rb
|
112
201
|
- lib/ripper_ruby_parser/unescape.rb
|
113
202
|
- lib/ripper_ruby_parser/version.rb
|
114
|
-
- test/end_to_end/comments_test.rb
|
115
|
-
- test/end_to_end/comparison_test.rb
|
116
|
-
- test/end_to_end/lib_comparison_test.rb
|
117
|
-
- test/end_to_end/line_numbering_test.rb
|
118
|
-
- test/end_to_end/samples_comparison_test.rb
|
119
|
-
- test/end_to_end/test_comparison_test.rb
|
120
|
-
- test/pt_testcase/pt_test.rb
|
121
|
-
- test/ripper_ruby_parser/commenting_ripper_parser_test.rb
|
122
|
-
- test/ripper_ruby_parser/parser_test.rb
|
123
|
-
- test/ripper_ruby_parser/sexp_handlers/assignment_test.rb
|
124
|
-
- test/ripper_ruby_parser/sexp_handlers/blocks_test.rb
|
125
|
-
- test/ripper_ruby_parser/sexp_handlers/conditionals_test.rb
|
126
|
-
- test/ripper_ruby_parser/sexp_handlers/literals_test.rb
|
127
|
-
- test/ripper_ruby_parser/sexp_handlers/loops_test.rb
|
128
|
-
- test/ripper_ruby_parser/sexp_handlers/method_calls_test.rb
|
129
|
-
- test/ripper_ruby_parser/sexp_handlers/methods_test.rb
|
130
|
-
- test/ripper_ruby_parser/sexp_handlers/operators_test.rb
|
131
|
-
- test/ripper_ruby_parser/sexp_handlers/string_literals_test.rb
|
132
|
-
- test/ripper_ruby_parser/sexp_processor_test.rb
|
133
|
-
- test/ripper_ruby_parser/version_test.rb
|
134
|
-
- test/samples/assignment.rb
|
135
|
-
- test/samples/comments.rb
|
136
|
-
- test/samples/conditionals.rb
|
137
|
-
- test/samples/lambdas.rb
|
138
|
-
- test/samples/loops.rb
|
139
|
-
- test/samples/misc.rb
|
140
|
-
- test/samples/number.rb
|
141
|
-
- test/samples/operators.rb
|
142
|
-
- test/samples/strings.rb
|
143
|
-
- test/test_helper.rb
|
144
203
|
homepage: http://www.github.com/mvz/ripper_ruby_parser
|
145
204
|
licenses:
|
146
205
|
- MIT
|
147
|
-
metadata:
|
148
|
-
|
206
|
+
metadata:
|
207
|
+
homepage_uri: http://www.github.com/mvz/ripper_ruby_parser
|
208
|
+
source_code_uri: https://github.com/mvz/ripper_ruby_parser
|
209
|
+
changelog_uri: https://github.com/mvz/ripper_ruby_parser/blob/master/CHANGELOG.md
|
210
|
+
post_install_message:
|
149
211
|
rdoc_options:
|
150
212
|
- "--main"
|
151
213
|
- README.md
|
@@ -155,45 +217,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
155
217
|
requirements:
|
156
218
|
- - ">="
|
157
219
|
- !ruby/object:Gem::Version
|
158
|
-
version: 2.
|
220
|
+
version: 2.5.0
|
159
221
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
160
222
|
requirements:
|
161
223
|
- - ">="
|
162
224
|
- !ruby/object:Gem::Version
|
163
225
|
version: '0'
|
164
226
|
requirements: []
|
165
|
-
rubygems_version: 3.
|
166
|
-
signing_key:
|
227
|
+
rubygems_version: 3.2.15
|
228
|
+
signing_key:
|
167
229
|
specification_version: 4
|
168
230
|
summary: Parse with Ripper, produce sexps that are compatible with RubyParser.
|
169
|
-
test_files:
|
170
|
-
- test/end_to_end/comments_test.rb
|
171
|
-
- test/end_to_end/comparison_test.rb
|
172
|
-
- test/end_to_end/lib_comparison_test.rb
|
173
|
-
- test/end_to_end/line_numbering_test.rb
|
174
|
-
- test/end_to_end/samples_comparison_test.rb
|
175
|
-
- test/end_to_end/test_comparison_test.rb
|
176
|
-
- test/pt_testcase/pt_test.rb
|
177
|
-
- test/ripper_ruby_parser/commenting_ripper_parser_test.rb
|
178
|
-
- test/ripper_ruby_parser/parser_test.rb
|
179
|
-
- test/ripper_ruby_parser/sexp_handlers/assignment_test.rb
|
180
|
-
- test/ripper_ruby_parser/sexp_handlers/blocks_test.rb
|
181
|
-
- test/ripper_ruby_parser/sexp_handlers/conditionals_test.rb
|
182
|
-
- test/ripper_ruby_parser/sexp_handlers/literals_test.rb
|
183
|
-
- test/ripper_ruby_parser/sexp_handlers/loops_test.rb
|
184
|
-
- test/ripper_ruby_parser/sexp_handlers/method_calls_test.rb
|
185
|
-
- test/ripper_ruby_parser/sexp_handlers/methods_test.rb
|
186
|
-
- test/ripper_ruby_parser/sexp_handlers/operators_test.rb
|
187
|
-
- test/ripper_ruby_parser/sexp_handlers/string_literals_test.rb
|
188
|
-
- test/ripper_ruby_parser/sexp_processor_test.rb
|
189
|
-
- test/ripper_ruby_parser/version_test.rb
|
190
|
-
- test/samples/assignment.rb
|
191
|
-
- test/samples/comments.rb
|
192
|
-
- test/samples/conditionals.rb
|
193
|
-
- test/samples/lambdas.rb
|
194
|
-
- test/samples/loops.rb
|
195
|
-
- test/samples/misc.rb
|
196
|
-
- test/samples/number.rb
|
197
|
-
- test/samples/operators.rb
|
198
|
-
- test/samples/strings.rb
|
199
|
-
- test/test_helper.rb
|
231
|
+
test_files: []
|