ruby_parser 3.0.0 → 3.19.1
Sign up to get free protection for your applications and to get access to all the features.
- 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
|