ruby_parser 3.17.0 → 3.19.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
- checksums.yaml.gz.sig +0 -0
- data/History.rdoc +109 -0
- data/Manifest.txt +5 -0
- data/README.rdoc +9 -6
- data/Rakefile +85 -24
- data/bin/ruby_parse_extract_error +1 -1
- data/compare/normalize.rb +6 -1
- data/gauntlet.md +108 -0
- data/lib/rp_extensions.rb +15 -36
- data/lib/rp_stringscanner.rb +20 -51
- data/lib/ruby20_parser.rb +7430 -3528
- data/lib/ruby20_parser.y +328 -257
- data/lib/ruby21_parser.rb +7408 -3572
- data/lib/ruby21_parser.y +323 -254
- data/lib/ruby22_parser.rb +7543 -3601
- data/lib/ruby22_parser.y +327 -256
- data/lib/ruby23_parser.rb +7549 -3612
- data/lib/ruby23_parser.y +327 -256
- data/lib/ruby24_parser.rb +7640 -3624
- data/lib/ruby24_parser.y +327 -256
- data/lib/ruby25_parser.rb +7640 -3623
- data/lib/ruby25_parser.y +327 -256
- data/lib/ruby26_parser.rb +7649 -3632
- data/lib/ruby26_parser.y +326 -255
- data/lib/ruby27_parser.rb +10132 -4545
- data/lib/ruby27_parser.y +871 -262
- data/lib/ruby30_parser.rb +10504 -4655
- data/lib/ruby30_parser.y +1065 -333
- data/lib/ruby31_parser.rb +13622 -0
- data/lib/ruby31_parser.y +3481 -0
- data/lib/ruby3_parser.yy +3536 -0
- data/lib/ruby_lexer.rb +261 -609
- data/lib/ruby_lexer.rex +27 -20
- data/lib/ruby_lexer.rex.rb +59 -23
- data/lib/ruby_lexer_strings.rb +638 -0
- data/lib/ruby_parser.rb +2 -0
- data/lib/ruby_parser.yy +903 -272
- data/lib/ruby_parser_extras.rb +333 -113
- data/test/test_ruby_lexer.rb +181 -129
- data/test/test_ruby_parser.rb +1529 -288
- data/tools/munge.rb +34 -6
- data/tools/ripper.rb +15 -10
- data.tar.gz.sig +0 -0
- metadata +27 -23
- metadata.gz.sig +0 -0
data/tools/munge.rb
CHANGED
@@ -76,12 +76,31 @@ def munge s
|
|
76
76
|
|
77
77
|
# other
|
78
78
|
|
79
|
+
'kTERMINATOR', "tSTRING_END",
|
80
|
+
'"kTERMINATOR"', "tSTRING_END",
|
81
|
+
'kTRCURLY', "tSTRING_DEND",
|
82
|
+
|
83
|
+
'"symbol literal"', "tSYMBEG",
|
84
|
+
'"string literal"', "tSTRING_BEG",
|
85
|
+
'"backtick literal"', "tXSTRING_BEG",
|
86
|
+
'"regexp literal"', "tREGEXP_BEG",
|
87
|
+
'"word list"', "tWORDS_BEG",
|
88
|
+
'"verbatim word list"', "tQWORDS_BEG",
|
89
|
+
'"symbol list"', "tSYMBOLS_BEG",
|
90
|
+
'"verbatim symbol list"', "tQSYMBOLS_BEG",
|
91
|
+
'"terminator"', "tSTRING_END",
|
92
|
+
'"\'}\'"', "tSTRING_DEND",
|
93
|
+
|
94
|
+
'"string literal"',"tSTRING_BEG",
|
95
|
+
'"literal content"', "tSTRING_CONTENT",
|
96
|
+
/\$/, "", # try to remove these lumps?
|
97
|
+
|
79
98
|
'tLBRACK2', "tLBRACK", # HACK
|
80
99
|
|
81
100
|
"' '", "tSPACE", # needs to be later to avoid bad hits
|
82
101
|
|
83
102
|
"/* empty */", "none",
|
84
|
-
/^\s*$/, "
|
103
|
+
/^\s*$/, "",
|
85
104
|
|
86
105
|
"keyword_BEGIN", "klBEGIN",
|
87
106
|
"keyword_END", "klEND",
|
@@ -89,6 +108,7 @@ def munge s
|
|
89
108
|
/\bk_([a-z_]+)/, proc { "k#{$1.upcase}" },
|
90
109
|
/modifier_(\w+)/, proc { "k#{$1.upcase}_MOD" },
|
91
110
|
"kVARIABLE", "keyword_variable", # ugh
|
111
|
+
"tCONST", "kCONST",
|
92
112
|
|
93
113
|
# 2.6 collapses klBEGIN to kBEGIN
|
94
114
|
"klBEGIN", "kBEGIN",
|
@@ -112,9 +132,11 @@ def munge s
|
|
112
132
|
'"do (for condition)"', "kDO_COND",
|
113
133
|
'"do (for lambda)"', "kDO_LAMBDA",
|
114
134
|
'"do (for block)"', "kDO_BLOCK",
|
135
|
+
'"local variable or method"', "tIDENTIFIER",
|
115
136
|
|
116
137
|
/\"(\w+) \(modifier\)\"/, proc { |x| "k#{$1.upcase}_MOD" },
|
117
138
|
/\"(\w+)\"/, proc { |x| "k#{$1.upcase}" },
|
139
|
+
/\"`(\w+)'\"/, proc { |x| "k#{$1.upcase}" },
|
118
140
|
|
119
141
|
/@(\d+)(\s+|$)/, "",
|
120
142
|
/\$?@(\d+) */, "", # TODO: remove?
|
@@ -130,7 +152,11 @@ def munge s
|
|
130
152
|
end
|
131
153
|
end
|
132
154
|
|
133
|
-
s.
|
155
|
+
if s.empty? then
|
156
|
+
nil
|
157
|
+
else
|
158
|
+
s.strip.squeeze " "
|
159
|
+
end
|
134
160
|
end
|
135
161
|
|
136
162
|
ARGF.each_line do |line|
|
@@ -144,19 +170,19 @@ ARGF.each_line do |line|
|
|
144
170
|
when /^Reading a token: Next token is token (.*?) \(\)/ then
|
145
171
|
token = munge $1
|
146
172
|
next if last_token == token
|
147
|
-
puts "next token is %p
|
173
|
+
puts "next token is %p" % [token]
|
148
174
|
last_token = token
|
149
175
|
when /^Reading a token: / then
|
150
176
|
next # skip
|
151
177
|
when /^read\s+:(\w+)/ then # read :tNL(tNL) nil
|
152
178
|
token = munge $1
|
153
179
|
next if last_token == token
|
154
|
-
puts "next token is %p
|
180
|
+
puts "next token is %p" % [token]
|
155
181
|
last_token = token
|
156
182
|
when /^Next token is token ("[^"]+"|\S+)/ then
|
157
183
|
token = munge $1
|
158
184
|
next if last_token == token
|
159
|
-
puts "next token is %p
|
185
|
+
puts "next token is %p" % [token]
|
160
186
|
last_token = token
|
161
187
|
when /^read\s+false/ then # read false($end) "$end"
|
162
188
|
puts "next token is EOF"
|
@@ -164,6 +190,8 @@ ARGF.each_line do |line|
|
|
164
190
|
# do nothing
|
165
191
|
when /^.:scan=>\["([^"]+)"/ then
|
166
192
|
puts "scan = %p" % [$1]
|
193
|
+
when /^.:getch=>\["([^"]+)/ then
|
194
|
+
puts "SCAN = %p" % [$1]
|
167
195
|
when /^Reducing stack by rule (\d+) \(line (\d+)\):/ then
|
168
196
|
reduce_line = $2.to_i
|
169
197
|
when /^ \$\d+ = (?:token|nterm) (.+) \(.*\)/ then
|
@@ -172,7 +200,7 @@ ARGF.each_line do |line|
|
|
172
200
|
when /^-> \$\$ = (?:token|nterm) (.+) \(.*\)/ then
|
173
201
|
stack << "none" if stack.empty?
|
174
202
|
item = munge $1
|
175
|
-
x = stack.map { |s| s.strip }.join " "
|
203
|
+
x = stack.compact.map { |s| munge s.strip }.compact.join " "
|
176
204
|
if x != item then # prevent kdef -> kdef
|
177
205
|
if $v && reduce_line then
|
178
206
|
puts "reduce #{x} --> #{item} at #{reduce_line}".squeeze " "
|
data/tools/ripper.rb
CHANGED
@@ -1,7 +1,8 @@
|
|
1
1
|
#!/usr/bin/env ruby -ws
|
2
2
|
|
3
|
-
$
|
4
|
-
$
|
3
|
+
$b ||= false # bug mode -- ripper is buggy, use Ripper.sexp
|
4
|
+
$d ||= false # debug -- turn on yydebug
|
5
|
+
$p ||= false # Use pp
|
5
6
|
|
6
7
|
require "ripper/sexp"
|
7
8
|
require "pp" if $p
|
@@ -19,15 +20,19 @@ end
|
|
19
20
|
|
20
21
|
ARGV.each do |path|
|
21
22
|
src = path == "-" ? $stdin.read : File.read(path)
|
22
|
-
rip = MySexpBuilder.new src
|
23
|
-
rip.yydebug = $d
|
24
23
|
|
25
|
-
sexp =
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
24
|
+
sexp = if $b then
|
25
|
+
Ripper.sexp src
|
26
|
+
else
|
27
|
+
rip = MySexpBuilder.new src
|
28
|
+
rip.yydebug = $d
|
29
|
+
rip.parse
|
30
|
+
|
31
|
+
if rip.error? then
|
32
|
+
warn "skipping"
|
33
|
+
next
|
34
|
+
end
|
35
|
+
end
|
31
36
|
|
32
37
|
puts "accept"
|
33
38
|
|
data.tar.gz.sig
CHANGED
Binary file
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ruby_parser
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.
|
4
|
+
version: 3.19.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ryan Davis
|
@@ -10,9 +10,9 @@ bindir: bin
|
|
10
10
|
cert_chain:
|
11
11
|
- |
|
12
12
|
-----BEGIN CERTIFICATE-----
|
13
|
-
|
13
|
+
MIIDPjCCAiagAwIBAgIBBjANBgkqhkiG9w0BAQsFADBFMRMwEQYDVQQDDApyeWFu
|
14
14
|
ZC1ydWJ5MRkwFwYKCZImiZPyLGQBGRYJemVuc3BpZGVyMRMwEQYKCZImiZPyLGQB
|
15
|
-
|
15
|
+
GRYDY29tMB4XDTIxMTIyMzIzMTkwNFoXDTIyMTIyMzIzMTkwNFowRTETMBEGA1UE
|
16
16
|
AwwKcnlhbmQtcnVieTEZMBcGCgmSJomT8ixkARkWCXplbnNwaWRlcjETMBEGCgmS
|
17
17
|
JomT8ixkARkWA2NvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALda
|
18
18
|
b9DCgK+627gPJkB6XfjZ1itoOQvpqH1EXScSaba9/S2VF22VYQbXU1xQXL/WzCkx
|
@@ -22,14 +22,14 @@ cert_chain:
|
|
22
22
|
qhtV7HJxNKuPj/JFH0D2cswvzznE/a5FOYO68g+YCuFi5L8wZuuM8zzdwjrWHqSV
|
23
23
|
gBEfoTEGr7Zii72cx+sCAwEAAaM5MDcwCQYDVR0TBAIwADALBgNVHQ8EBAMCBLAw
|
24
24
|
HQYDVR0OBBYEFEfFe9md/r/tj/Wmwpy+MI8d9k/hMA0GCSqGSIb3DQEBCwUAA4IB
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
25
|
+
AQCKB5jfsuSnKb+t/Wrh3UpdkmX7TrEsjVmERC0pPqzQ5GQJgmEXDD7oMgaKXaAq
|
26
|
+
x2m+KSZDrqk7c8uho5OX6YMqg4KdxehfSLqqTZGoeV78qwf/jpPQZKTf+W9gUSJh
|
27
|
+
zsWpo4K50MP+QtdSbKXZwjAafpQ8hK0MnnZ/aeCsW9ov5vdXpYbf3dpg6ADXRGE7
|
28
|
+
lQY2y1tJ5/chqu6h7dQmnm2ABUqx9O+JcN9hbCYoA5i/EeubUEtFIh2w3SpO6YfB
|
29
|
+
JFmxn4h9YO/pVdB962BdBNNDia0kgIjI3ENnkLq0dKpYU3+F3KhEuTksLO0L6X/V
|
30
|
+
YsuyUzsMz6GQA4khyaMgKNSD
|
31
31
|
-----END CERTIFICATE-----
|
32
|
-
date:
|
32
|
+
date: 2022-03-30 00:00:00.000000000 Z
|
33
33
|
dependencies:
|
34
34
|
- !ruby/object:Gem::Dependency
|
35
35
|
name: sexp_processor
|
@@ -37,20 +37,14 @@ dependencies:
|
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: '4.
|
41
|
-
- - ">="
|
42
|
-
- !ruby/object:Gem::Version
|
43
|
-
version: 4.15.1
|
40
|
+
version: '4.16'
|
44
41
|
type: :runtime
|
45
42
|
prerelease: false
|
46
43
|
version_requirements: !ruby/object:Gem::Requirement
|
47
44
|
requirements:
|
48
45
|
- - "~>"
|
49
46
|
- !ruby/object:Gem::Version
|
50
|
-
version: '4.
|
51
|
-
- - ">="
|
52
|
-
- !ruby/object:Gem::Version
|
53
|
-
version: 4.15.1
|
47
|
+
version: '4.16'
|
54
48
|
- !ruby/object:Gem::Dependency
|
55
49
|
name: rake
|
56
50
|
requirement: !ruby/object:Gem::Requirement
|
@@ -77,14 +71,14 @@ dependencies:
|
|
77
71
|
requirements:
|
78
72
|
- - "~>"
|
79
73
|
- !ruby/object:Gem::Version
|
80
|
-
version: '2.
|
74
|
+
version: '2.6'
|
81
75
|
type: :development
|
82
76
|
prerelease: false
|
83
77
|
version_requirements: !ruby/object:Gem::Requirement
|
84
78
|
requirements:
|
85
79
|
- - "~>"
|
86
80
|
- !ruby/object:Gem::Version
|
87
|
-
version: '2.
|
81
|
+
version: '2.6'
|
88
82
|
- !ruby/object:Gem::Dependency
|
89
83
|
name: racc
|
90
84
|
requirement: !ruby/object:Gem::Requirement
|
@@ -125,14 +119,14 @@ dependencies:
|
|
125
119
|
requirements:
|
126
120
|
- - "~>"
|
127
121
|
- !ruby/object:Gem::Version
|
128
|
-
version: '3.
|
122
|
+
version: '3.23'
|
129
123
|
type: :development
|
130
124
|
prerelease: false
|
131
125
|
version_requirements: !ruby/object:Gem::Requirement
|
132
126
|
requirements:
|
133
127
|
- - "~>"
|
134
128
|
- !ruby/object:Gem::Version
|
135
|
-
version: '3.
|
129
|
+
version: '3.23'
|
136
130
|
description: |-
|
137
131
|
ruby_parser (RP) is a ruby parser written in pure ruby (utilizing
|
138
132
|
racc--which does by default use a C extension). It outputs
|
@@ -160,6 +154,10 @@ description: |-
|
|
160
154
|
* 1.8 parser is at 99.9739% accuracy, 3.651 sigma
|
161
155
|
* 1.9 parser is at 99.9940% accuracy, 4.013 sigma
|
162
156
|
* 2.0 parser is at 99.9939% accuracy, 4.008 sigma
|
157
|
+
* 2.6 parser is at 99.9972% accuracy, 4.191 sigma
|
158
|
+
* 3.0 parser has a 100% parse rate.
|
159
|
+
* Tested against 2,672,412 unique ruby files across 167k gems.
|
160
|
+
* As do all the others now, basically.
|
163
161
|
email:
|
164
162
|
- ryand-ruby@zenspider.com
|
165
163
|
executables:
|
@@ -171,6 +169,7 @@ extra_rdoc_files:
|
|
171
169
|
- Manifest.txt
|
172
170
|
- README.rdoc
|
173
171
|
- debugging.md
|
172
|
+
- gauntlet.md
|
174
173
|
files:
|
175
174
|
- ".autotest"
|
176
175
|
- History.rdoc
|
@@ -181,6 +180,7 @@ files:
|
|
181
180
|
- bin/ruby_parse_extract_error
|
182
181
|
- compare/normalize.rb
|
183
182
|
- debugging.md
|
183
|
+
- gauntlet.md
|
184
184
|
- lib/.document
|
185
185
|
- lib/rp_extensions.rb
|
186
186
|
- lib/rp_stringscanner.rb
|
@@ -202,9 +202,13 @@ files:
|
|
202
202
|
- lib/ruby27_parser.y
|
203
203
|
- lib/ruby30_parser.rb
|
204
204
|
- lib/ruby30_parser.y
|
205
|
+
- lib/ruby31_parser.rb
|
206
|
+
- lib/ruby31_parser.y
|
207
|
+
- lib/ruby3_parser.yy
|
205
208
|
- lib/ruby_lexer.rb
|
206
209
|
- lib/ruby_lexer.rex
|
207
210
|
- lib/ruby_lexer.rex.rb
|
211
|
+
- lib/ruby_lexer_strings.rb
|
208
212
|
- lib/ruby_parser.rb
|
209
213
|
- lib/ruby_parser.yy
|
210
214
|
- lib/ruby_parser_extras.rb
|
@@ -239,7 +243,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
239
243
|
- !ruby/object:Gem::Version
|
240
244
|
version: '0'
|
241
245
|
requirements: []
|
242
|
-
rubygems_version: 3.
|
246
|
+
rubygems_version: 3.3.3
|
243
247
|
signing_key:
|
244
248
|
specification_version: 4
|
245
249
|
summary: ruby_parser (RP) is a ruby parser written in pure ruby (utilizing racc--which
|
metadata.gz.sig
CHANGED
Binary file
|