ruby_parser 3.0.0 → 3.19.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 +7 -0
- checksums.yaml.gz.sig +0 -0
- data/.autotest +36 -19
- data/History.rdoc +1297 -0
- data/Manifest.txt +35 -7
- data/{README.txt → README.rdoc} +44 -14
- data/Rakefile +308 -110
- data/bin/ruby_parse +3 -1
- data/bin/ruby_parse_extract_error +36 -16
- data/compare/normalize.rb +218 -0
- data/debugging.md +190 -0
- data/gauntlet.md +107 -0
- data/lib/.document +1 -0
- data/lib/rp_extensions.rb +53 -0
- data/lib/rp_stringscanner.rb +33 -0
- data/lib/ruby20_parser.rb +10973 -0
- data/lib/ruby20_parser.y +2683 -0
- data/lib/ruby21_parser.rb +10980 -0
- data/lib/ruby21_parser.y +2700 -0
- data/lib/ruby22_parser.rb +11123 -0
- data/lib/ruby22_parser.y +2711 -0
- data/lib/ruby23_parser.rb +11132 -0
- data/lib/ruby23_parser.y +2713 -0
- data/lib/ruby24_parser.rb +11231 -0
- data/lib/ruby24_parser.y +2721 -0
- data/lib/ruby25_parser.rb +11231 -0
- data/lib/ruby25_parser.y +2721 -0
- data/lib/ruby26_parser.rb +11253 -0
- data/lib/ruby26_parser.y +2736 -0
- data/lib/ruby27_parser.rb +12980 -0
- data/lib/ruby27_parser.y +3324 -0
- data/lib/ruby30_parser.rb +13242 -0
- data/lib/ruby30_parser.y +3447 -0
- 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 +933 -1232
- data/lib/ruby_lexer.rex +185 -0
- data/lib/ruby_lexer.rex.rb +399 -0
- data/lib/ruby_lexer_strings.rb +638 -0
- data/lib/ruby_parser.rb +97 -3
- data/lib/ruby_parser.yy +3465 -0
- data/lib/ruby_parser_extras.rb +1216 -687
- data/test/test_ruby_lexer.rb +2249 -1092
- data/test/test_ruby_parser.rb +5156 -975
- data/test/test_ruby_parser_extras.rb +47 -77
- data/tools/munge.rb +250 -0
- data/tools/ripper.rb +44 -0
- data.tar.gz.sig +1 -1
- metadata +200 -155
- metadata.gz.sig +0 -0
- data/.gemtest +0 -0
- data/History.txt +0 -482
- data/lib/gauntlet_rubyparser.rb +0 -120
- data/lib/ruby18_parser.rb +0 -5747
- data/lib/ruby18_parser.y +0 -1873
- data/lib/ruby19_parser.rb +0 -6110
- data/lib/ruby19_parser.y +0 -2078
data/lib/ruby_parser.rb
CHANGED
@@ -1,4 +1,98 @@
|
|
1
|
+
require "ruby_parser_extras"
|
2
|
+
require "racc/parser"
|
1
3
|
|
2
|
-
|
3
|
-
|
4
|
-
|
4
|
+
##
|
5
|
+
# RubyParser is a compound parser that uses all known versions to
|
6
|
+
# attempt to parse.
|
7
|
+
|
8
|
+
class RubyParser
|
9
|
+
|
10
|
+
VERSIONS = []
|
11
|
+
|
12
|
+
attr_accessor :current
|
13
|
+
|
14
|
+
def self.for_current_ruby
|
15
|
+
name = "V#{RUBY_VERSION[/^\d+\.\d+/].delete "."}"
|
16
|
+
klass = if const_defined? name then
|
17
|
+
const_get name
|
18
|
+
else
|
19
|
+
latest = VERSIONS.first
|
20
|
+
warn "NOTE: RubyParser::#{name} undefined, using #{latest}."
|
21
|
+
latest
|
22
|
+
end
|
23
|
+
|
24
|
+
klass.new
|
25
|
+
end
|
26
|
+
|
27
|
+
def self.latest
|
28
|
+
VERSIONS.first.new
|
29
|
+
end
|
30
|
+
|
31
|
+
def process s, f = "(string)", t = 10
|
32
|
+
e = nil
|
33
|
+
VERSIONS.each do |klass|
|
34
|
+
self.current = parser = klass.new
|
35
|
+
begin
|
36
|
+
return parser.process s, f, t
|
37
|
+
rescue Racc::ParseError, RubyParser::SyntaxError => exc
|
38
|
+
e ||= exc
|
39
|
+
end
|
40
|
+
end
|
41
|
+
raise e
|
42
|
+
end
|
43
|
+
|
44
|
+
alias :parse :process
|
45
|
+
|
46
|
+
def reset
|
47
|
+
# do nothing
|
48
|
+
end
|
49
|
+
|
50
|
+
class Parser < Racc::Parser
|
51
|
+
include RubyParserStuff
|
52
|
+
|
53
|
+
def self.inherited x
|
54
|
+
RubyParser::VERSIONS << x
|
55
|
+
end
|
56
|
+
|
57
|
+
def self.version= v
|
58
|
+
@version = v
|
59
|
+
end
|
60
|
+
|
61
|
+
def self.version
|
62
|
+
@version ||= Parser > self && self.name[/(?:V|Ruby)(\d+)/, 1].to_i
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
class SyntaxError < RuntimeError; end
|
67
|
+
end
|
68
|
+
|
69
|
+
##
|
70
|
+
# Unfortunately a problem with racc is that it won't let me namespace
|
71
|
+
# properly, so instead of RubyParser::V25, I still have to generate
|
72
|
+
# the old Ruby25Parser and shove it in as V25.
|
73
|
+
|
74
|
+
require "ruby20_parser"
|
75
|
+
require "ruby21_parser"
|
76
|
+
require "ruby22_parser"
|
77
|
+
require "ruby23_parser"
|
78
|
+
require "ruby24_parser"
|
79
|
+
require "ruby25_parser"
|
80
|
+
require "ruby26_parser"
|
81
|
+
require "ruby27_parser"
|
82
|
+
require "ruby30_parser"
|
83
|
+
require "ruby31_parser"
|
84
|
+
|
85
|
+
class RubyParser # HACK
|
86
|
+
VERSIONS.clear # also a HACK caused by racc namespace issues
|
87
|
+
|
88
|
+
class V31 < ::Ruby31Parser; end
|
89
|
+
class V30 < ::Ruby30Parser; end
|
90
|
+
class V27 < ::Ruby27Parser; end
|
91
|
+
class V26 < ::Ruby26Parser; end
|
92
|
+
class V25 < ::Ruby25Parser; end
|
93
|
+
class V24 < ::Ruby24Parser; end
|
94
|
+
class V23 < ::Ruby23Parser; end
|
95
|
+
class V22 < ::Ruby22Parser; end
|
96
|
+
class V21 < ::Ruby21Parser; end
|
97
|
+
class V20 < ::Ruby20Parser; end
|
98
|
+
end
|