mvz-live_ast 1.3.2 → 2.0.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/CHANGES.rdoc +8 -1
- data/README.rdoc +3 -3
- data/Rakefile +20 -20
- data/lib/live_ast.rb +4 -4
- data/lib/live_ast/ast_eval.rb +1 -1
- data/lib/live_ast/ast_load.rb +1 -1
- data/lib/live_ast/base.rb +13 -12
- data/lib/live_ast/common.rb +2 -10
- data/lib/live_ast/evaler.rb +3 -3
- data/lib/live_ast/full.rb +2 -2
- data/lib/live_ast/irb_spy.rb +4 -4
- data/lib/live_ast/loader.rb +2 -2
- data/lib/live_ast/reader.rb +1 -1
- data/lib/live_ast/replace_eval.rb +12 -13
- data/lib/live_ast/replace_load.rb +1 -1
- data/lib/live_ast/replace_raise.rb +3 -3
- data/lib/live_ast/ruby_parser.rb +4 -4
- data/lib/live_ast/ruby_parser/test.rb +12 -0
- data/lib/live_ast/ruby_parser/unparser.rb +1 -1
- data/lib/live_ast/to_ast.rb +13 -18
- data/lib/live_ast/to_ruby.rb +8 -18
- data/lib/live_ast/version.rb +1 -1
- data/test/alias_test.rb +1 -1
- data/test/ast_eval/ast_eval_test.rb +2 -2
- data/test/ast_load/ast_load_test.rb +2 -2
- data/test/attr_test.rb +1 -1
- data/test/backtrace_test.rb +4 -4
- data/test/base/noninvasive_test.rb +1 -1
- data/test/base/reload_test.rb +1 -1
- data/test/covert_define_method_test.rb +1 -1
- data/test/def_test.rb +1 -1
- data/test/define_method_test.rb +2 -2
- data/test/define_singleton_method_test.rb +1 -1
- data/test/encoding_test.rb +1 -1
- data/test/error_test.rb +3 -3
- data/test/eval_test.rb +1 -1
- data/test/flush_cache_test.rb +3 -1
- data/test/full/ast_reload_test.rb +1 -1
- data/test/full/replace_eval_test.rb +8 -8
- data/test/irb_test.rb +2 -2
- data/test/lambda_test.rb +2 -2
- data/test/load_path_test.rb +2 -2
- data/test/load_test.rb +3 -3
- data/test/main.rb +18 -18
- data/test/nested_test.rb +1 -1
- data/test/readme_test.rb +3 -3
- data/test/recursive_eval_test.rb +1 -1
- data/test/redefine_method_test.rb +1 -1
- data/test/rubygems_test.rb +4 -4
- data/test/rubyspec_test.rb +8 -8
- data/test/singleton_test.rb +1 -1
- data/test/stdlib_test.rb +1 -1
- data/test/thread_test.rb +2 -2
- data/test/to_ast/to_ast_feature_test.rb +2 -2
- data/test/to_ruby/to_ruby_feature_test.rb +2 -2
- data/test/to_ruby/to_ruby_test.rb +15 -15
- metadata +74 -60
data/lib/live_ast/to_ruby.rb
CHANGED
@@ -1,26 +1,16 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require
|
3
|
+
require "live_ast/base"
|
4
4
|
|
5
|
-
|
6
|
-
|
7
|
-
|
5
|
+
module LiveAST
|
6
|
+
module CallableToRuby
|
7
|
+
# Generate ruby code which reflects the AST of this object.
|
8
|
+
def to_ruby
|
8
9
|
LiveAST.parser::Unparser.unparse(LiveAST.ast(self))
|
9
10
|
end
|
10
11
|
end
|
11
12
|
end
|
12
13
|
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
end
|
17
|
-
|
18
|
-
class UnboundMethod
|
19
|
-
# :method: to_ruby
|
20
|
-
# Generate ruby code which reflects the AST of this object.
|
21
|
-
end
|
22
|
-
|
23
|
-
class Proc
|
24
|
-
# :method: to_ruby
|
25
|
-
# Generate ruby code which reflects the AST of this object.
|
26
|
-
end
|
14
|
+
Method.include LiveAST::CallableToRuby
|
15
|
+
UnboundMethod.include LiveAST::CallableToRuby
|
16
|
+
Proc.include LiveAST::CallableToRuby
|
data/lib/live_ast/version.rb
CHANGED
data/test/alias_test.rb
CHANGED
data/test/attr_test.rb
CHANGED
data/test/backtrace_test.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require_relative
|
3
|
+
require_relative "main"
|
4
4
|
|
5
5
|
# test for raise redefinition side-effects: unsort this TestCase from
|
6
6
|
# other TestCases.
|
@@ -113,7 +113,7 @@ define_unsorted_test_case "BacktraceTest", RegularTest do
|
|
113
113
|
raise_after_eval("raise", false)
|
114
114
|
raise_after_eval("1/0", false)
|
115
115
|
|
116
|
-
require
|
116
|
+
require "live_ast/replace_raise"
|
117
117
|
|
118
118
|
raise_after_eval("raise", true)
|
119
119
|
raise_after_eval("1/0", false)
|
@@ -123,14 +123,14 @@ define_unsorted_test_case "BacktraceTest", RegularTest do
|
|
123
123
|
3.times do
|
124
124
|
orig = eval %{
|
125
125
|
|
126
|
-
lambda { #{code} }
|
126
|
+
lambda { #{code} } # lambda { foo }
|
127
127
|
|
128
128
|
|
129
129
|
}, binding, "somewhere", 1000
|
130
130
|
|
131
131
|
live = ast_eval %{
|
132
132
|
|
133
|
-
lambda { #{code} }
|
133
|
+
lambda { #{code} } # lambda { foo }
|
134
134
|
|
135
135
|
|
136
136
|
}, binding, "somewhere", 1000
|
data/test/base/reload_test.rb
CHANGED
data/test/def_test.rb
CHANGED
data/test/define_method_test.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require_relative
|
3
|
+
require_relative "main"
|
4
4
|
|
5
5
|
class DefineMethodTest < RegularTest
|
6
6
|
WITH_BLOCKS = lambda do
|
@@ -8,7 +8,7 @@ class DefineMethodTest < RegularTest
|
|
8
8
|
{
|
9
9
|
f: :+,
|
10
10
|
g: :*,
|
11
|
-
h:
|
11
|
+
h: :-
|
12
12
|
}.each_pair do |name, op|
|
13
13
|
case op
|
14
14
|
when :+
|
data/test/encoding_test.rb
CHANGED
data/test/error_test.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require_relative
|
3
|
+
require_relative "main"
|
4
4
|
|
5
5
|
class ErrorTest < RegularTest
|
6
6
|
def test_multiple_lambda_same_line
|
@@ -70,12 +70,12 @@ class ErrorTest < RegularTest
|
|
70
70
|
end
|
71
71
|
end
|
72
72
|
|
73
|
-
def
|
73
|
+
def test_reload_with_raw_eval_one
|
74
74
|
ast_eval("lambda { }", binding)
|
75
75
|
eval("lambda { }")
|
76
76
|
end
|
77
77
|
|
78
|
-
def
|
78
|
+
def test_reload_with_raw_eval_two
|
79
79
|
c = ast_eval %{
|
80
80
|
Class.new do
|
81
81
|
def f
|
data/test/eval_test.rb
CHANGED
data/test/flush_cache_test.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require_relative
|
3
|
+
require_relative "main"
|
4
4
|
|
5
5
|
# test for flushing side-effects: unsort this TestCase from other
|
6
6
|
# TestCases.
|
@@ -18,6 +18,7 @@ define_unsorted_test_case "FlushCacheTest", RegularTest do
|
|
18
18
|
def uncached_method_from_require
|
19
19
|
klass = Class.new do
|
20
20
|
def f; end
|
21
|
+
|
21
22
|
def g; end
|
22
23
|
end
|
23
24
|
|
@@ -69,6 +70,7 @@ define_unsorted_test_case "FlushCacheTest", RegularTest do
|
|
69
70
|
def lost_method_from_require
|
70
71
|
klass = Class.new do
|
71
72
|
def f; end
|
73
|
+
|
72
74
|
def g; end
|
73
75
|
end
|
74
76
|
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require
|
3
|
+
require "main"
|
4
4
|
|
5
5
|
class FullReplaceEvalTest < ReplaceEvalTest
|
6
6
|
RESULT = {}
|
@@ -71,7 +71,7 @@ class FullReplaceEvalTest < ReplaceEvalTest
|
|
71
71
|
assert_equal 33, RESULT[:new]
|
72
72
|
end
|
73
73
|
|
74
|
-
def
|
74
|
+
def test_const_lookup_two
|
75
75
|
Class.new do
|
76
76
|
eval %{
|
77
77
|
def f
|
@@ -108,7 +108,7 @@ class FullReplaceEvalTest < ReplaceEvalTest
|
|
108
108
|
end
|
109
109
|
end
|
110
110
|
|
111
|
-
def
|
111
|
+
def test_const_lookup_three
|
112
112
|
DEFINE_QS.call
|
113
113
|
Q::R.new.f
|
114
114
|
S::T.new.f
|
@@ -141,7 +141,7 @@ class FullReplaceEvalTest < ReplaceEvalTest
|
|
141
141
|
end
|
142
142
|
|
143
143
|
def test_instance_eval_arg_error_no_block
|
144
|
-
[[], (
|
144
|
+
[[], ("a".."z").to_a].each do |args|
|
145
145
|
orig = assert_raises ArgumentError do
|
146
146
|
Object.new.live_ast_original_instance_eval(*args)
|
147
147
|
end
|
@@ -173,7 +173,7 @@ class FullReplaceEvalTest < ReplaceEvalTest
|
|
173
173
|
|
174
174
|
describe "instance_eval argument errors" do
|
175
175
|
before do
|
176
|
-
require
|
176
|
+
require "live_ast/full"
|
177
177
|
end
|
178
178
|
|
179
179
|
let(:orig) {
|
@@ -188,7 +188,7 @@ class FullReplaceEvalTest < ReplaceEvalTest
|
|
188
188
|
}
|
189
189
|
|
190
190
|
describe "when the second argument is nil" do
|
191
|
-
let(:args) { [
|
191
|
+
let(:args) { ["1", nil] }
|
192
192
|
it "raises the same error as the original" do
|
193
193
|
assert_equal orig.message, live.message
|
194
194
|
assert_equal orig.class, live.class
|
@@ -198,10 +198,10 @@ class FullReplaceEvalTest < ReplaceEvalTest
|
|
198
198
|
|
199
199
|
def test_instance_eval_arg_error_with_block
|
200
200
|
orig = assert_raises ArgumentError do
|
201
|
-
Object.new.live_ast_original_instance_eval(3, 4, 5) {}
|
201
|
+
Object.new.live_ast_original_instance_eval(3, 4, 5) { nil }
|
202
202
|
end
|
203
203
|
live = assert_raises ArgumentError do
|
204
|
-
Object.new.instance_eval(3, 4, 5) {}
|
204
|
+
Object.new.instance_eval(3, 4, 5) { nil }
|
205
205
|
end
|
206
206
|
assert_equal orig.message, live.message
|
207
207
|
end
|
data/test/irb_test.rb
CHANGED
data/test/lambda_test.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require_relative
|
3
|
+
require_relative "main"
|
4
4
|
|
5
5
|
class LambdaTest < RegularTest
|
6
6
|
def test_block_braces_multiline
|
@@ -31,7 +31,7 @@ class LambdaTest < RegularTest
|
|
31
31
|
def test_stabby_lambda
|
32
32
|
a = ->(x, y) { x - y }
|
33
33
|
|
34
|
-
expected =
|
34
|
+
expected = binop_lambda(:-)
|
35
35
|
assert_equal expected, a.to_ast
|
36
36
|
end
|
37
37
|
|
data/test/load_path_test.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require_relative
|
3
|
+
require_relative "main"
|
4
4
|
|
5
5
|
class LoadPathTest < BaseTest
|
6
6
|
include FileUtils
|
@@ -68,7 +68,7 @@ class LoadPathTest < BaseTest
|
|
68
68
|
"",
|
69
69
|
"/usr",
|
70
70
|
".",
|
71
|
-
".."
|
71
|
+
".."
|
72
72
|
].each do |file|
|
73
73
|
compare_load_errors(file)
|
74
74
|
end
|
data/test/load_test.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require_relative
|
4
|
-
require_relative
|
3
|
+
require_relative "main"
|
4
|
+
require_relative "../devel/levitate"
|
5
5
|
|
6
6
|
class LoadFileTest < BaseTest
|
7
7
|
class << self
|
@@ -80,7 +80,7 @@ class LoadFileTest < BaseTest
|
|
80
80
|
end
|
81
81
|
|
82
82
|
def test_verbose_respected
|
83
|
-
lib = File.expand_path(File.dirname(__FILE__)
|
83
|
+
lib = File.expand_path("../lib", File.dirname(__FILE__))
|
84
84
|
|
85
85
|
[
|
86
86
|
# respects a loaded file setting $VERBOSE = true
|
data/test/main.rb
CHANGED
@@ -1,22 +1,22 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
$LOAD_PATH.unshift File.expand_path(File.dirname(__FILE__)
|
3
|
+
$LOAD_PATH.unshift File.expand_path("../lib", File.dirname(__FILE__))
|
4
4
|
|
5
5
|
# require first for stdlib_test
|
6
|
-
require
|
7
|
-
require
|
8
|
-
require
|
6
|
+
require "pp"
|
7
|
+
require "find"
|
8
|
+
require "fileutils"
|
9
9
|
|
10
|
-
require
|
11
|
-
require
|
10
|
+
require "minitest/mock"
|
11
|
+
require "minitest/autorun"
|
12
12
|
|
13
13
|
$VERBOSE = true
|
14
14
|
|
15
|
-
require
|
15
|
+
require "live_ast/base"
|
16
16
|
|
17
17
|
def define_unsorted_test_case(name, superclass, &block)
|
18
18
|
klass = Class.new superclass, &block
|
19
|
-
letter = (
|
19
|
+
letter = ("A".."Z").to_a[rand(26)]
|
20
20
|
Object.const_set "#{letter}#{name}", klass
|
21
21
|
end
|
22
22
|
|
@@ -37,7 +37,7 @@ class JLMiniTest < MiniTest::Test
|
|
37
37
|
end
|
38
38
|
|
39
39
|
def mu_pp(obj)
|
40
|
-
+
|
40
|
+
+"" <<
|
41
41
|
delim("_") <<
|
42
42
|
obj.pretty_inspect.chomp <<
|
43
43
|
delim("=")
|
@@ -52,9 +52,9 @@ class JLMiniTest < MiniTest::Test
|
|
52
52
|
def assert_nothing_raised
|
53
53
|
yield
|
54
54
|
assert_nil nil
|
55
|
-
rescue StandardError =>
|
55
|
+
rescue StandardError => e
|
56
56
|
raise MiniTest::Assertion,
|
57
|
-
|
57
|
+
exception_details(e, "Expected nothing raised, but got:")
|
58
58
|
end
|
59
59
|
|
60
60
|
%w(
|
@@ -68,15 +68,15 @@ end
|
|
68
68
|
class BaseTest < JLMiniTest
|
69
69
|
include LiveAST.parser::Test
|
70
70
|
|
71
|
-
DATA_DIR = File.expand_path(File.dirname(__FILE__)
|
71
|
+
DATA_DIR = File.expand_path("data", File.dirname(__FILE__))
|
72
72
|
|
73
73
|
def self.stdlib_has_source?
|
74
74
|
RUBY_ENGINE != "jruby"
|
75
75
|
end
|
76
76
|
|
77
77
|
def temp_file(code, basename = nil)
|
78
|
-
basename ||= (
|
79
|
-
path = DATA_DIR
|
78
|
+
basename ||= ("a".."z").to_a.shuffle.join + ".rb"
|
79
|
+
path = File.join(DATA_DIR, basename)
|
80
80
|
|
81
81
|
write_file path, code if code
|
82
82
|
begin
|
@@ -106,7 +106,7 @@ end
|
|
106
106
|
class RegularTest < BaseTest
|
107
107
|
def setup
|
108
108
|
super
|
109
|
-
require
|
109
|
+
require "live_ast"
|
110
110
|
end
|
111
111
|
end
|
112
112
|
|
@@ -114,10 +114,10 @@ class ReplaceEvalTest < BaseTest
|
|
114
114
|
def initialize(*args)
|
115
115
|
super
|
116
116
|
ok = begin
|
117
|
-
require
|
117
|
+
require "live_ast/full"
|
118
118
|
true
|
119
119
|
rescue LoadError
|
120
|
-
raise "need: gem install
|
120
|
+
raise "need: gem install bindings" if RUBY_ENGINE == "ruby"
|
121
121
|
|
122
122
|
false
|
123
123
|
end
|
@@ -127,7 +127,7 @@ class ReplaceEvalTest < BaseTest
|
|
127
127
|
self.class.class_eval do
|
128
128
|
instance_methods(false).each do |m|
|
129
129
|
remove_method(m)
|
130
|
-
define_method(m) {}
|
130
|
+
define_method(m) { nil }
|
131
131
|
end
|
132
132
|
end
|
133
133
|
end
|