ParseTree 3.0.2-x86-mingw32 → 3.0.3-x86-mingw32
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.
- data/History.txt +9 -0
- data/Manifest.txt +1 -0
- data/bin/parse_tree_show +1 -1
- data/lib/gauntlet_parsetree.rb +121 -0
- data/lib/inline/Inline_RawParseTree_ab80.so +0 -0
- data/lib/parse_tree.rb +1 -1
- data/lib/unified_ruby.rb +4 -0
- data/test/pt_testcase.rb +38 -4
- metadata +4 -3
data/History.txt
CHANGED
@@ -1,3 +1,12 @@
|
|
1
|
+
=== 3.0.3 / 2009-01-20
|
2
|
+
|
3
|
+
* 4 bug fixes:
|
4
|
+
|
5
|
+
* Added gauntlet_parsetree.rb. Bug finding/fixing much faster & easier now.
|
6
|
+
* Fixed alias tests for r2r. Added masgn and heredoc tests.
|
7
|
+
* Fixed conflicting flags (-u vs -r).
|
8
|
+
* Unwrap RHS from array IF it is only a splat node.
|
9
|
+
|
1
10
|
=== 3.0.2 / 2008-11-04
|
2
11
|
|
3
12
|
* 1 minor enhancement:
|
data/Manifest.txt
CHANGED
data/bin/parse_tree_show
CHANGED
@@ -0,0 +1,121 @@
|
|
1
|
+
#!/usr/bin/ruby -ws
|
2
|
+
|
3
|
+
$f ||= false
|
4
|
+
|
5
|
+
$:.unshift "../../ruby_parser/dev/lib"
|
6
|
+
$:.unshift "../../ParseTree/dev/lib"
|
7
|
+
|
8
|
+
require 'rubygems'
|
9
|
+
require 'parse_tree'
|
10
|
+
require 'ruby_parser'
|
11
|
+
|
12
|
+
require 'gauntlet'
|
13
|
+
|
14
|
+
class ParseTreeGauntlet < Gauntlet
|
15
|
+
def initialize
|
16
|
+
super
|
17
|
+
|
18
|
+
self.data = Hash.new { |h,k| h[k] = {} }
|
19
|
+
old_data = load_yaml data_file
|
20
|
+
self.data.merge! old_data
|
21
|
+
end
|
22
|
+
|
23
|
+
def should_skip? name
|
24
|
+
if $f then
|
25
|
+
if Hash === data[name] then
|
26
|
+
! data[name].empty?
|
27
|
+
else
|
28
|
+
data[name]
|
29
|
+
end
|
30
|
+
else
|
31
|
+
data[name] == true # yes, == true on purpose
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def diff_pp o1, o2
|
36
|
+
require 'pp'
|
37
|
+
|
38
|
+
File.open("/tmp/a.#{$$}", "w") do |f|
|
39
|
+
PP.pp o1, f
|
40
|
+
end
|
41
|
+
|
42
|
+
File.open("/tmp/b.#{$$}", "w") do |f|
|
43
|
+
PP.pp o2, f
|
44
|
+
end
|
45
|
+
|
46
|
+
`diff -u /tmp/a.#{$$} /tmp/b.#{$$}`
|
47
|
+
ensure
|
48
|
+
File.unlink "/tmp/a.#{$$}" rescue nil
|
49
|
+
File.unlink "/tmp/b.#{$$}" rescue nil
|
50
|
+
end
|
51
|
+
|
52
|
+
def broke name, file, msg
|
53
|
+
warn "bad"
|
54
|
+
self.data[name][file] = msg
|
55
|
+
self.dirty = true
|
56
|
+
end
|
57
|
+
|
58
|
+
def process path, name
|
59
|
+
begin
|
60
|
+
$stderr.print " #{path}: "
|
61
|
+
rp = RubyParser.new
|
62
|
+
pt = ParseTree.new
|
63
|
+
|
64
|
+
old_ruby = File.read(path)
|
65
|
+
|
66
|
+
begin
|
67
|
+
pt_sexp = pt.process old_ruby
|
68
|
+
rescue SyntaxError => e
|
69
|
+
warn "unparsable pt"
|
70
|
+
self.data[name][path] = :unparsable_pt
|
71
|
+
self.dirty = true
|
72
|
+
return
|
73
|
+
end
|
74
|
+
|
75
|
+
begin
|
76
|
+
rp_sexp = rp.process old_ruby
|
77
|
+
rescue Racc::ParseError => e
|
78
|
+
broke name, path, e.message
|
79
|
+
return
|
80
|
+
end
|
81
|
+
|
82
|
+
if rp_sexp != pt_sexp then
|
83
|
+
broke name, path, diff_pp(rp_sexp, pt_sexp)
|
84
|
+
return
|
85
|
+
end
|
86
|
+
|
87
|
+
self.data[name][path] = true
|
88
|
+
self.dirty = true
|
89
|
+
|
90
|
+
warn "good"
|
91
|
+
rescue Interrupt
|
92
|
+
puts "User cancelled"
|
93
|
+
exit 1
|
94
|
+
rescue Exception => e
|
95
|
+
broke name, path, " UNKNOWN ERROR: #{e}: #{e.message.strip}"
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
def run name
|
100
|
+
warn name
|
101
|
+
Dir["**/*.rb"].sort.each do |path|
|
102
|
+
next if path =~ /gemspec.rb/ # HACK
|
103
|
+
result = data[name][path]
|
104
|
+
next if result == true || Symbol === result
|
105
|
+
process path, name
|
106
|
+
end
|
107
|
+
|
108
|
+
if (self.data[name].empty? or
|
109
|
+
self.data[name].values.all? { |v| v == true }) then
|
110
|
+
warn " ALL GOOD!"
|
111
|
+
self.data[name] = true
|
112
|
+
self.dirty = true
|
113
|
+
end
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
117
|
+
filter = ARGV.shift
|
118
|
+
filter = Regexp.new filter if filter
|
119
|
+
|
120
|
+
gauntlet = ParseTreeGauntlet.new
|
121
|
+
gauntlet.run_the_gauntlet filter
|
Binary file
|
data/lib/parse_tree.rb
CHANGED
data/lib/unified_ruby.rb
CHANGED
@@ -236,6 +236,10 @@ module UnifiedRuby
|
|
236
236
|
lhs << lhs_splat
|
237
237
|
end
|
238
238
|
|
239
|
+
# unwrap RHS from array IF it is only a splat node
|
240
|
+
rhs = rhs.last if rhs && # TODO: rhs.structure =~ s(:array, s(:splat))
|
241
|
+
rhs.size == 2 && rhs.structure.flatten.first(2) == [:array, :splat]
|
242
|
+
|
239
243
|
s(t, lhs, rhs).compact
|
240
244
|
end
|
241
245
|
|
data/test/pt_testcase.rb
CHANGED
@@ -213,8 +213,7 @@ class ParseTreeTestCase < Test::Unit::TestCase
|
|
213
213
|
"RawParseTree" => [:class, :X, nil,
|
214
214
|
[:scope, [:alias, [:lit, :y], [:lit, :x]]]],
|
215
215
|
"ParseTree" => s(:class, :X, nil,
|
216
|
-
s(:scope, s(:alias, s(:lit, :y), s(:lit, :x))))
|
217
|
-
"Ruby2Ruby" => "class X\n alias_method :y, :x\nend")
|
216
|
+
s(:scope, s(:alias, s(:lit, :y), s(:lit, :x)))))
|
218
217
|
|
219
218
|
add_tests("alias_ugh",
|
220
219
|
"Ruby" => "class X\n alias y x\nend",
|
@@ -222,7 +221,7 @@ class ParseTreeTestCase < Test::Unit::TestCase
|
|
222
221
|
[:scope, [:alias, [:lit, :y], [:lit, :x]]]],
|
223
222
|
"ParseTree" => s(:class, :X, nil,
|
224
223
|
s(:scope, s(:alias, s(:lit, :y), s(:lit, :x)))),
|
225
|
-
"Ruby2Ruby" => "class X\n
|
224
|
+
"Ruby2Ruby" => "class X\n alias :y :x\nend")
|
226
225
|
|
227
226
|
add_tests("and",
|
228
227
|
"Ruby" => "(a and b)",
|
@@ -3093,7 +3092,7 @@ class ParseTreeTestCase < Test::Unit::TestCase
|
|
3093
3092
|
s(:lit, 2),
|
3094
3093
|
s(:lit, 3))))))
|
3095
3094
|
|
3096
|
-
add_tests("
|
3095
|
+
add_tests("masgn_splat_lhs",
|
3097
3096
|
"Ruby" => "a, b, *c = d, e, f, g",
|
3098
3097
|
"RawParseTree" => [:masgn,
|
3099
3098
|
[:array, [:lasgn, :a], [:lasgn, :b]],
|
@@ -3112,6 +3111,35 @@ class ParseTreeTestCase < Test::Unit::TestCase
|
|
3112
3111
|
s(:call, nil, :f, s(:arglist)),
|
3113
3112
|
s(:call, nil, :g, s(:arglist)))))
|
3114
3113
|
|
3114
|
+
add_tests("masgn_splat_rhs_1",
|
3115
|
+
"Ruby" => "a, b = *c",
|
3116
|
+
"RawParseTree" => [:masgn,
|
3117
|
+
[:array, [:lasgn, :a], [:lasgn, :b]],
|
3118
|
+
nil,
|
3119
|
+
[:splat, [:vcall, :c]]],
|
3120
|
+
"ParseTree" => s(:masgn,
|
3121
|
+
s(:array,
|
3122
|
+
s(:lasgn, :a),
|
3123
|
+
s(:lasgn, :b)),
|
3124
|
+
s(:splat, s(:call, nil, :c, s(:arglist)))))
|
3125
|
+
|
3126
|
+
add_tests("masgn_splat_rhs_n",
|
3127
|
+
"Ruby" => "a, b = c, d, *e",
|
3128
|
+
"RawParseTree" => [:masgn,
|
3129
|
+
[:array, [:lasgn, :a], [:lasgn, :b]],
|
3130
|
+
nil,
|
3131
|
+
[:argscat,
|
3132
|
+
[:array, [:vcall, :c], [:vcall, :d]],
|
3133
|
+
[:vcall, :e]]],
|
3134
|
+
"ParseTree" => s(:masgn,
|
3135
|
+
s(:array,
|
3136
|
+
s(:lasgn, :a),
|
3137
|
+
s(:lasgn, :b)),
|
3138
|
+
s(:array,
|
3139
|
+
s(:call, nil, :c, s(:arglist)),
|
3140
|
+
s(:call, nil, :d, s(:arglist)),
|
3141
|
+
s(:splat, s(:call, nil, :e, s(:arglist))))))
|
3142
|
+
|
3115
3143
|
add_tests("masgn_splat_no_name_to_ary",
|
3116
3144
|
"Ruby" => "a, b, * = c",
|
3117
3145
|
"RawParseTree" => [:masgn,
|
@@ -3901,6 +3929,12 @@ class ParseTreeTestCase < Test::Unit::TestCase
|
|
3901
3929
|
s(:arglist, s(:str, " second\n")))))),
|
3902
3930
|
"Ruby2Ruby" => "a = (a + ((\" first\\n\" + b) + \" second\\n\"))")
|
3903
3931
|
|
3932
|
+
add_tests("str_heredoc_empty", # yes... tarded
|
3933
|
+
"Ruby" => "<<'EOM'\nEOM",
|
3934
|
+
"RawParseTree" => [:str, ""],
|
3935
|
+
"ParseTree" => s(:str, ""),
|
3936
|
+
"Ruby2Ruby" => '""')
|
3937
|
+
|
3904
3938
|
add_tests("str_heredoc_indent",
|
3905
3939
|
"Ruby" => "<<-EOM\n blah\nblah\n\n EOM",
|
3906
3940
|
"RawParseTree" => [:str, " blah\nblah\n\n"],
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ParseTree
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.0.
|
4
|
+
version: 3.0.3
|
5
5
|
platform: x86-mingw32
|
6
6
|
authors:
|
7
7
|
- Ryan Davis
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date:
|
12
|
+
date: 2009-01-20 00:00:00 -02:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -67,6 +67,7 @@ files:
|
|
67
67
|
- bin/parse_tree_deps
|
68
68
|
- bin/parse_tree_show
|
69
69
|
- demo/printer.rb
|
70
|
+
- lib/gauntlet_parsetree.rb
|
70
71
|
- lib/parse_tree.rb
|
71
72
|
- lib/parse_tree_extensions.rb
|
72
73
|
- lib/unified_ruby.rb
|
@@ -103,7 +104,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
103
104
|
requirements: []
|
104
105
|
|
105
106
|
rubyforge_project: parsetree
|
106
|
-
rubygems_version: 1.3.
|
107
|
+
rubygems_version: 1.3.1
|
107
108
|
signing_key:
|
108
109
|
specification_version: 2
|
109
110
|
summary: ParseTree is a C extension (using RubyInline) that extracts the parse tree for an entire class or a specific method and returns it as a s-expression (aka sexp) using ruby's arrays, strings, symbols, and integers
|