mvz-live_ast 1.1.3 → 1.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGES.rdoc +6 -0
- data/README.rdoc +9 -9
- data/lib/live_ast/base.rb +9 -9
- data/lib/live_ast/common.rb +9 -12
- data/lib/live_ast/error.rb +1 -1
- data/lib/live_ast/evaler.rb +1 -1
- data/lib/live_ast/irb_spy.rb +16 -13
- data/lib/live_ast/linker.rb +1 -1
- data/lib/live_ast/loader.rb +4 -7
- data/lib/live_ast/reader.rb +1 -0
- data/lib/live_ast/replace_eval.rb +12 -29
- data/lib/live_ast/replace_load.rb +1 -1
- data/lib/live_ast/replace_raise.rb +1 -1
- data/lib/live_ast/ruby_parser.rb +3 -4
- data/lib/live_ast/ruby_parser/test.rb +4 -4
- data/lib/live_ast/to_ruby.rb +1 -1
- data/lib/live_ast/version.rb +1 -1
- data/test/alias_test.rb +0 -1
- data/test/ast_load/ast_load_test.rb +4 -4
- data/test/backtrace_test.rb +1 -1
- data/test/base/reload_test.rb +4 -4
- data/test/encoding_test.rb +17 -23
- data/test/full/ast_reload_test.rb +4 -4
- data/test/full/replace_eval_test.rb +11 -5
- data/test/irb_test.rb +25 -9
- data/test/load_path_test.rb +7 -9
- data/test/main.rb +5 -6
- data/test/rubyspec_test.rb +27 -25
- data/test/thread_test.rb +1 -1
- data/test/to_ruby/to_ruby_test.rb +96 -94
- metadata +51 -52
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 472b7811ce8f32d847e2dc967886bc0372a933f8
|
4
|
+
data.tar.gz: 2452449770fda858623be66f038b76857b660473
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7f5de1c4c34338e0ece217cea927e9fcde1ae26e6626f9d34624c98de5045456485b2fd54738bf2b2ec4d1248b12a9a458d70193015049d432644376eb1854e3
|
7
|
+
data.tar.gz: fc475c11107bc9bef4d8957cc59e82826717c2482bb4e6e7c3feb7ede7586d12e135b950d260cd74745391428e4f73263273ab8a26c9323b6f2a59e99ae7cf6c
|
data/CHANGES.rdoc
CHANGED
@@ -1,6 +1,12 @@
|
|
1
1
|
|
2
2
|
= live_ast Changes
|
3
3
|
|
4
|
+
== Version 1.2.0
|
5
|
+
|
6
|
+
* Drop support for Rubies below 2.1
|
7
|
+
* Handle multi-line definitions in IRB correctly
|
8
|
+
* Tighten and update dependencies
|
9
|
+
|
4
10
|
== Version 1.1.3
|
5
11
|
|
6
12
|
* Keep ASTs in the cache when they are fetched, allowing aliased methods to
|
data/README.rdoc
CHANGED
@@ -25,11 +25,11 @@ Live abstract syntax trees of methods and procs. Fork of +live_ast+
|
|
25
25
|
|
26
26
|
f = lambda { "foo" }
|
27
27
|
p f.to_ast
|
28
|
-
# => s(:iter, s(:call, nil, :lambda),
|
28
|
+
# => s(:iter, s(:call, nil, :lambda), 0, s(:str, "foo"))
|
29
29
|
|
30
30
|
def query(&block)
|
31
31
|
p block.to_ast
|
32
|
-
# => s(:iter, s(:call, nil, :query),
|
32
|
+
# => s(:iter, s(:call, nil, :query), 0, s(:str, "bar"))
|
33
33
|
end
|
34
34
|
|
35
35
|
query do
|
@@ -40,7 +40,7 @@ Live abstract syntax trees of methods and procs. Fork of +live_ast+
|
|
40
40
|
|
41
41
|
u = ast_eval "lambda { 'dynamic3' }", binding
|
42
42
|
p u.to_ast
|
43
|
-
# => s(:iter, s(:call, nil, :lambda),
|
43
|
+
# => s(:iter, s(:call, nil, :lambda), 0, s(:str, "dynamic3"))
|
44
44
|
|
45
45
|
ast_eval "def v ; 'dynamic4' ; end", binding
|
46
46
|
p method(:v).to_ast
|
@@ -52,7 +52,7 @@ Live abstract syntax trees of methods and procs. Fork of +live_ast+
|
|
52
52
|
|
53
53
|
f = eval "lambda { 'dynamic1' }"
|
54
54
|
p f.to_ast
|
55
|
-
# => s(:iter, s(:call, nil, :lambda),
|
55
|
+
# => s(:iter, s(:call, nil, :lambda), 0, s(:str, "dynamic1"))
|
56
56
|
|
57
57
|
eval "def g ; 'dynamic2' ; end"
|
58
58
|
p method(:g).to_ast
|
@@ -80,7 +80,7 @@ sexps used by tools such as <code>ruby2ruby</code>.
|
|
80
80
|
|
81
81
|
LiveAST is thread-safe.
|
82
82
|
|
83
|
-
Ruby 1.
|
83
|
+
Ruby 2.1.0 or higher is required.
|
84
84
|
|
85
85
|
== Links
|
86
86
|
|
@@ -124,7 +124,7 @@ semantics as +eval+ except that the binding argument is required.
|
|
124
124
|
|
125
125
|
u = ast_eval "lambda { 'dynamic3' }", binding
|
126
126
|
p u.to_ast
|
127
|
-
# => s(:iter, s(:call, nil, :lambda),
|
127
|
+
# => s(:iter, s(:call, nil, :lambda), 0, s(:str, "dynamic3"))
|
128
128
|
|
129
129
|
== Full Integration
|
130
130
|
|
@@ -146,7 +146,7 @@ below for details).
|
|
146
146
|
|
147
147
|
f = eval "lambda { 'dynamic1' }"
|
148
148
|
p f.to_ast
|
149
|
-
# => s(:iter, s(:call, nil, :lambda),
|
149
|
+
# => s(:iter, s(:call, nil, :lambda), 0, s(:str, "dynamic1"))
|
150
150
|
|
151
151
|
Since LiveAST itself is pure ruby, any platforms supported by
|
152
152
|
+binding_of_caller+ should work with <code>live_ast/full</code>.
|
@@ -277,12 +277,12 @@ The following alternative interface is available.
|
|
277
277
|
# => s(:defn, :f, s(:args), s(:str, "A#f"))
|
278
278
|
|
279
279
|
p LiveAST.ast(lambda { })
|
280
|
-
# => s(:iter, s(:call, nil, :lambda),
|
280
|
+
# => s(:iter, s(:call, nil, :lambda), 0)
|
281
281
|
|
282
282
|
f = LiveAST.eval("lambda { }", binding)
|
283
283
|
|
284
284
|
p LiveAST.ast(f)
|
285
|
-
# => s(:iter, s(:call, nil, :lambda),
|
285
|
+
# => s(:iter, s(:call, nil, :lambda), 0)
|
286
286
|
|
287
287
|
ast_eval # => raises NameError
|
288
288
|
|
data/lib/live_ast/base.rb
CHANGED
@@ -9,16 +9,16 @@ require 'live_ast/error'
|
|
9
9
|
require 'live_ast/irb_spy' if defined?(IRB)
|
10
10
|
|
11
11
|
module LiveAST
|
12
|
-
NATIVE_EVAL = Kernel.method(:eval)
|
12
|
+
NATIVE_EVAL = Kernel.method(:eval) #:nodoc:
|
13
13
|
|
14
14
|
class << self
|
15
|
-
attr_writer :parser
|
15
|
+
attr_writer :parser #:nodoc:
|
16
16
|
|
17
|
-
def parser
|
18
|
-
@parser ||=
|
17
|
+
def parser #:nodoc:
|
18
|
+
@parser ||= begin
|
19
19
|
require 'live_ast/ruby_parser'
|
20
20
|
LiveAST::RubyParser
|
21
|
-
|
21
|
+
end
|
22
22
|
end
|
23
23
|
|
24
24
|
#
|
@@ -26,7 +26,7 @@ module LiveAST
|
|
26
26
|
#
|
27
27
|
# Equivalent to <code>obj.to_ast</code>.
|
28
28
|
#
|
29
|
-
def ast(obj)
|
29
|
+
def ast(obj) #:nodoc:
|
30
30
|
case obj
|
31
31
|
when Method, UnboundMethod
|
32
32
|
Linker.find_method_ast(obj.owner, obj.name, *obj.source_location)
|
@@ -50,7 +50,7 @@ module LiveAST
|
|
50
50
|
#
|
51
51
|
# Equivalent to <code>Kernel#ast_eval</code>.
|
52
52
|
#
|
53
|
-
def eval(*args)
|
53
|
+
def eval(*args) #:nodoc:
|
54
54
|
Evaler.eval(args[0], *args)
|
55
55
|
end
|
56
56
|
|
@@ -59,14 +59,14 @@ module LiveAST
|
|
59
59
|
#
|
60
60
|
# Equivalent to <code>Kernel#ast_load</code>.
|
61
61
|
#
|
62
|
-
def load(file, wrap = false)
|
62
|
+
def load(file, wrap = false) #:nodoc:
|
63
63
|
Loader.load(file, wrap)
|
64
64
|
end
|
65
65
|
|
66
66
|
#
|
67
67
|
# strip the revision token from a string
|
68
68
|
#
|
69
|
-
def strip_token(file)
|
69
|
+
def strip_token(file) #:nodoc:
|
70
70
|
file.sub(/#{Regexp.quote Linker::REVISION_TOKEN}[a-z]+/, "")
|
71
71
|
end
|
72
72
|
end
|
data/lib/live_ast/common.rb
CHANGED
@@ -8,11 +8,7 @@ module LiveAST
|
|
8
8
|
rescue NameError
|
9
9
|
thing = arg.nil? ? nil : arg.class
|
10
10
|
|
11
|
-
message =
|
12
|
-
"can't convert #{thing.inspect} into String"
|
13
|
-
else
|
14
|
-
"no implicit conversion of #{thing.inspect} into String"
|
15
|
-
end
|
11
|
+
message = "no implicit conversion of #{thing.inspect} into String"
|
16
12
|
raise TypeError, message
|
17
13
|
end
|
18
14
|
|
@@ -21,17 +17,18 @@ module LiveAST
|
|
21
17
|
|
22
18
|
range = 0 if range == (0..0)
|
23
19
|
|
24
|
-
|
25
|
-
|
20
|
+
message = if RUBY_VERSION < "2.3.0"
|
21
|
+
"wrong number of arguments (#{args.size} for #{range})"
|
22
|
+
else
|
23
|
+
"wrong number of arguments (given #{args.size}, expected #{range})"
|
24
|
+
end
|
25
|
+
raise ArgumentError, message
|
26
26
|
end
|
27
27
|
|
28
28
|
def check_is_binding(obj)
|
29
29
|
return if obj.is_a? Binding
|
30
|
-
|
31
|
-
|
32
|
-
else
|
33
|
-
"wrong argument type #{obj.class} (expected binding)"
|
34
|
-
end
|
30
|
+
|
31
|
+
message = "wrong argument type #{obj.class} (expected binding)"
|
35
32
|
raise TypeError, message
|
36
33
|
end
|
37
34
|
|
data/lib/live_ast/error.rb
CHANGED
data/lib/live_ast/evaler.rb
CHANGED
@@ -9,7 +9,7 @@ module LiveAST
|
|
9
9
|
file, line = location_for_eval(bind, *rest)
|
10
10
|
file = LiveAST.strip_token(file)
|
11
11
|
|
12
|
-
key,
|
12
|
+
key, = Linker.new_cache_synced(parser_source, file, line, false)
|
13
13
|
|
14
14
|
begin
|
15
15
|
NATIVE_EVAL.call(evaler_source, bind, key, line)
|
data/lib/live_ast/irb_spy.rb
CHANGED
@@ -7,20 +7,23 @@ module LiveAST
|
|
7
7
|
attr_writer :history
|
8
8
|
|
9
9
|
def code_at(line)
|
10
|
-
|
11
|
-
|
12
|
-
|
10
|
+
code = ""
|
11
|
+
checked_history[line..-1].each do |code_line|
|
12
|
+
code << code_line << "\n"
|
13
|
+
return code if can_parse code
|
13
14
|
end
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
15
|
+
end
|
16
|
+
|
17
|
+
def can_parse(code)
|
18
|
+
LiveAST.parser.new.parse(code)
|
19
|
+
rescue StandardError
|
20
|
+
false
|
21
|
+
end
|
22
|
+
|
23
|
+
def checked_history
|
24
|
+
return @history if @history
|
25
|
+
raise NotImplementedError,
|
26
|
+
"LiveAST cannot access history for this IRB input method"
|
24
27
|
end
|
25
28
|
end
|
26
29
|
end
|
data/lib/live_ast/linker.rb
CHANGED
data/lib/live_ast/loader.rb
CHANGED
@@ -18,15 +18,12 @@ module LiveAST
|
|
18
18
|
end
|
19
19
|
|
20
20
|
def header_footer(wrap)
|
21
|
-
if wrap
|
22
|
-
|
23
|
-
else
|
24
|
-
locals = NATIVE_EVAL.call("local_variables", TOPLEVEL_BINDING)
|
21
|
+
return "class << Object.new;", ";end", true if wrap
|
22
|
+
locals = NATIVE_EVAL.call("local_variables", TOPLEVEL_BINDING)
|
25
23
|
|
26
|
-
|
24
|
+
params = locals.empty? ? "" : ("|;" + locals.join(",") + "|")
|
27
25
|
|
28
|
-
|
29
|
-
end
|
26
|
+
return "lambda do #{params}", ";end.call", locals.empty?
|
30
27
|
end
|
31
28
|
|
32
29
|
def suppress_warnings
|
data/lib/live_ast/reader.rb
CHANGED
@@ -32,31 +32,10 @@ module LiveAST
|
|
32
32
|
private
|
33
33
|
|
34
34
|
def handle_args(args)
|
35
|
-
if RUBY_VERSION < '2.0.0'
|
36
|
-
handle_args_pre_20(args)
|
37
|
-
else
|
38
|
-
handle_args_20(args)
|
39
|
-
end
|
40
|
-
end
|
41
|
-
|
42
|
-
def handle_args_20(args)
|
43
35
|
LiveAST::Common.check_arity(args, 1..3)
|
44
36
|
args[0] = Common.arg_to_str(args[0])
|
45
37
|
args[1] = Common.arg_to_str(args[1]) if args.length > 1
|
46
38
|
end
|
47
|
-
|
48
|
-
def handle_args_pre_20(args)
|
49
|
-
raise ArgumentError, "block not supplied" if args.empty?
|
50
|
-
|
51
|
-
args[0] = Common.arg_to_str(args[0])
|
52
|
-
|
53
|
-
unless (1..3).include? args.size
|
54
|
-
raise ArgumentError,
|
55
|
-
"wrong number of arguments: instance_eval(src) or instance_eval{..}"
|
56
|
-
end
|
57
|
-
|
58
|
-
args[1] = Common.arg_to_str(args[1]) if args.length > 1
|
59
|
-
end
|
60
39
|
end
|
61
40
|
end
|
62
41
|
|
@@ -67,23 +46,24 @@ end
|
|
67
46
|
# Override for Kernel#eval and Kernel.eval
|
68
47
|
module Kernel
|
69
48
|
class << self
|
70
|
-
|
49
|
+
alias live_ast_original_singleton_eval eval
|
71
50
|
end
|
72
51
|
|
73
|
-
|
52
|
+
alias live_ast_original_eval eval
|
74
53
|
|
75
54
|
def eval(*args)
|
76
55
|
LiveAST::Common.check_arity(args, 1..4)
|
77
56
|
LiveAST.eval(
|
78
57
|
args[0],
|
79
58
|
args[1] || binding.of_caller(1),
|
80
|
-
*LiveAST::Common.location_for_eval(*args[1..3])
|
59
|
+
*LiveAST::Common.location_for_eval(*args[1..3])
|
60
|
+
)
|
81
61
|
end
|
82
62
|
end
|
83
63
|
|
84
64
|
# Override for Binding#eval
|
85
65
|
class Binding
|
86
|
-
|
66
|
+
alias live_ast_original_binding_eval eval
|
87
67
|
|
88
68
|
def eval(*args)
|
89
69
|
LiveAST.eval(args[0], self, *args[1..-1])
|
@@ -92,21 +72,24 @@ end
|
|
92
72
|
|
93
73
|
# Override for BasicObject#instance_eval
|
94
74
|
class BasicObject
|
95
|
-
|
75
|
+
alias live_ast_original_instance_eval instance_eval
|
96
76
|
|
97
77
|
def instance_eval(*args, &block)
|
98
78
|
if block
|
99
79
|
live_ast_original_instance_eval(*args, &block)
|
100
80
|
else
|
101
81
|
::LiveAST::ReplaceEval.
|
102
|
-
module_or_instance_eval(:instance,
|
82
|
+
module_or_instance_eval(:instance,
|
83
|
+
self,
|
84
|
+
::Kernel.binding.of_caller(1),
|
85
|
+
args)
|
103
86
|
end
|
104
87
|
end
|
105
88
|
end
|
106
89
|
|
107
90
|
# Overrides for Module#module_eval and Module#class_eval
|
108
91
|
class Module
|
109
|
-
|
92
|
+
alias live_ast_original_module_eval module_eval
|
110
93
|
|
111
94
|
def module_eval(*args, &block)
|
112
95
|
if block
|
@@ -118,5 +101,5 @@ class Module
|
|
118
101
|
end
|
119
102
|
|
120
103
|
remove_method :class_eval
|
121
|
-
|
104
|
+
alias class_eval module_eval
|
122
105
|
end
|
data/lib/live_ast/ruby_parser.rb
CHANGED
@@ -15,11 +15,10 @@ module LiveAST
|
|
15
15
|
@defs
|
16
16
|
end
|
17
17
|
|
18
|
+
STOREABLE_SEXP_TYPES = [:defn, :defs, :iter].freeze
|
19
|
+
|
18
20
|
def process(sexp)
|
19
|
-
|
20
|
-
when :defn, :defs, :iter
|
21
|
-
store_sexp(sexp, sexp.line)
|
22
|
-
end
|
21
|
+
store_sexp(sexp, sexp.line) if STOREABLE_SEXP_TYPES.include? sexp.first
|
23
22
|
|
24
23
|
sexp.each do |elem|
|
25
24
|
process(elem) if elem.is_a? Sexp
|
@@ -134,7 +134,7 @@ module LiveAST
|
|
134
134
|
# foo { "bar" }
|
135
135
|
#
|
136
136
|
def no_arg_block(name, ret)
|
137
|
-
s(:iter, s(:call, nil, name),
|
137
|
+
s(:iter, s(:call, nil, name), 0, s(:str, ret))
|
138
138
|
end
|
139
139
|
|
140
140
|
#
|
@@ -173,8 +173,8 @@ module LiveAST
|
|
173
173
|
def nested_lambdas(str)
|
174
174
|
s(:iter,
|
175
175
|
s(:call, nil, :lambda),
|
176
|
-
|
177
|
-
s(:iter, s(:call, nil, :lambda),
|
176
|
+
0,
|
177
|
+
s(:iter, s(:call, nil, :lambda), 0, s(:str, str)))
|
178
178
|
end
|
179
179
|
|
180
180
|
# nested_defs(:f, :g, "foo") returns the ast of
|
@@ -193,7 +193,7 @@ module LiveAST
|
|
193
193
|
s(:args),
|
194
194
|
s(:iter,
|
195
195
|
s(:call, s(:const, :Class), :new),
|
196
|
-
|
196
|
+
0,
|
197
197
|
s(:defn, v, s(:args), s(:str, str))))
|
198
198
|
end
|
199
199
|
end
|
data/lib/live_ast/to_ruby.rb
CHANGED
data/lib/live_ast/version.rb
CHANGED
data/test/alias_test.rb
CHANGED
@@ -14,7 +14,7 @@ class AstLoadTest < BaseTest
|
|
14
14
|
end
|
15
15
|
|
16
16
|
def noninvasive_ast_reload
|
17
|
-
|
17
|
+
code1 = %{
|
18
18
|
class AstLoadTest::B
|
19
19
|
def f
|
20
20
|
"first B#f"
|
@@ -22,7 +22,7 @@ class AstLoadTest < BaseTest
|
|
22
22
|
end
|
23
23
|
}
|
24
24
|
|
25
|
-
|
25
|
+
code2 = %{
|
26
26
|
class AstLoadTest::B
|
27
27
|
def f
|
28
28
|
"second B#f"
|
@@ -30,12 +30,12 @@ class AstLoadTest < BaseTest
|
|
30
30
|
end
|
31
31
|
}
|
32
32
|
|
33
|
-
temp_file
|
33
|
+
temp_file code1 do |file|
|
34
34
|
load file
|
35
35
|
|
36
36
|
LiveAST.ast(B.instance_method(:f))
|
37
37
|
|
38
|
-
write_file file,
|
38
|
+
write_file file, code2
|
39
39
|
ast_load file
|
40
40
|
|
41
41
|
assert_equal no_arg_def(:f, "second B#f"),
|
data/test/backtrace_test.rb
CHANGED
@@ -150,7 +150,7 @@ define_unsorted_test_case "BacktraceTest", RegularTest do
|
|
150
150
|
|
151
151
|
def test_tokens_stripped
|
152
152
|
lines = exception_backtrace do
|
153
|
-
ast_eval %{ ast_eval
|
153
|
+
ast_eval %{ ast_eval ' ast_eval "raise", binding ', binding }, binding
|
154
154
|
end
|
155
155
|
lines.each do |line|
|
156
156
|
assert_nil line.index(LiveAST::Linker::REVISION_TOKEN)
|
data/test/base/reload_test.rb
CHANGED
@@ -8,7 +8,7 @@ class ReloadTest < BaseTest
|
|
8
8
|
end
|
9
9
|
|
10
10
|
def raw_reload
|
11
|
-
|
11
|
+
code1 = %{
|
12
12
|
class ReloadTest::A
|
13
13
|
def f
|
14
14
|
"first A#f"
|
@@ -16,7 +16,7 @@ class ReloadTest < BaseTest
|
|
16
16
|
end
|
17
17
|
}
|
18
18
|
|
19
|
-
|
19
|
+
code2 = %{
|
20
20
|
class ReloadTest::A
|
21
21
|
def f
|
22
22
|
"second A#f"
|
@@ -24,12 +24,12 @@ class ReloadTest < BaseTest
|
|
24
24
|
end
|
25
25
|
}
|
26
26
|
|
27
|
-
temp_file
|
27
|
+
temp_file code1 do |file|
|
28
28
|
load file
|
29
29
|
|
30
30
|
LiveAST.ast(A.instance_method(:f))
|
31
31
|
|
32
|
-
write_file file,
|
32
|
+
write_file file, code2
|
33
33
|
load file
|
34
34
|
|
35
35
|
# forced a raw-reload inconsistency -- verify bogus
|
data/test/encoding_test.rb
CHANGED
@@ -1,29 +1,23 @@
|
|
1
1
|
require_relative 'main'
|
2
2
|
|
3
3
|
class AllEncodingTest < RegularTest
|
4
|
-
ENC_TESTS =
|
5
|
-
default
|
6
|
-
usascii US-ASCII
|
7
|
-
utf8 UTF-8
|
8
|
-
utf8unix UTF-8
|
9
|
-
utf8mac UTF-8
|
10
|
-
utf8mac_alt UTF8-MAC
|
11
|
-
utf8dos UTF-8
|
12
|
-
utf8bom UTF-8
|
13
|
-
utf8bom_only UTF-8
|
14
|
-
usascii_with_utf8bom US-ASCII
|
15
|
-
koi8_with_utf8bom KOI8-R
|
16
|
-
cp932 Windows-31J
|
17
|
-
eucjp EUC-JP
|
18
|
-
koi8 KOI8-R
|
19
|
-
koi8_shebang KOI8-R
|
20
|
-
|
21
|
-
|
22
|
-
if RUBY_VERSION < '2.0.0'
|
23
|
-
ENC_TESTS['default'] = 'US-ASCII'
|
24
|
-
else
|
25
|
-
ENC_TESTS['default'] = 'UTF-8'
|
26
|
-
end
|
4
|
+
ENC_TESTS = {
|
5
|
+
default: "UTF-8",
|
6
|
+
usascii: "US-ASCII",
|
7
|
+
utf8: "UTF-8",
|
8
|
+
utf8unix: "UTF-8",
|
9
|
+
utf8mac: "UTF-8",
|
10
|
+
utf8mac_alt: "UTF8-MAC",
|
11
|
+
utf8dos: "UTF-8",
|
12
|
+
utf8bom: "UTF-8",
|
13
|
+
utf8bom_only: "UTF-8",
|
14
|
+
usascii_with_utf8bom: "US-ASCII",
|
15
|
+
koi8_with_utf8bom: "KOI8-R",
|
16
|
+
cp932: "Windows-31J",
|
17
|
+
eucjp: "EUC-JP",
|
18
|
+
koi8: "KOI8-R",
|
19
|
+
koi8_shebang: "KOI8-R"
|
20
|
+
}.freeze
|
27
21
|
|
28
22
|
ENC_TESTS.each_pair do |abbr, name|
|
29
23
|
define_method "test_#{abbr}" do
|
@@ -8,7 +8,7 @@ class ASTReloadTest < ReplaceEvalTest
|
|
8
8
|
end
|
9
9
|
|
10
10
|
def ast_reload
|
11
|
-
|
11
|
+
code1 = %{
|
12
12
|
class ASTReloadTest::C
|
13
13
|
def f
|
14
14
|
"first C#f"
|
@@ -16,7 +16,7 @@ class ASTReloadTest < ReplaceEvalTest
|
|
16
16
|
end
|
17
17
|
}
|
18
18
|
|
19
|
-
|
19
|
+
code2 = %{
|
20
20
|
class ASTReloadTest::C
|
21
21
|
def f
|
22
22
|
"second C#f"
|
@@ -24,12 +24,12 @@ class ASTReloadTest < ReplaceEvalTest
|
|
24
24
|
end
|
25
25
|
}
|
26
26
|
|
27
|
-
temp_file
|
27
|
+
temp_file code1 do |file|
|
28
28
|
load file
|
29
29
|
|
30
30
|
LiveAST.ast(C.instance_method(:f))
|
31
31
|
|
32
|
-
write_file file,
|
32
|
+
write_file file, code2
|
33
33
|
load file
|
34
34
|
|
35
35
|
assert_equal no_arg_def(:f, "second C#f"),
|
@@ -174,10 +174,16 @@ class FullReplaceEvalTest < ReplaceEvalTest
|
|
174
174
|
require 'live_ast/full'
|
175
175
|
end
|
176
176
|
|
177
|
-
let(:orig) {
|
178
|
-
|
179
|
-
|
180
|
-
|
177
|
+
let(:orig) {
|
178
|
+
assert_raises(ArgumentError, TypeError) do
|
179
|
+
Object.new.live_ast_original_instance_eval(*args)
|
180
|
+
end
|
181
|
+
}
|
182
|
+
let(:live) {
|
183
|
+
assert_raises(ArgumentError, TypeError) do
|
184
|
+
Object.new.instance_eval(*args)
|
185
|
+
end
|
186
|
+
}
|
181
187
|
|
182
188
|
describe "when the second argument is nil" do
|
183
189
|
let(:args) { ['1', nil] }
|
@@ -354,7 +360,7 @@ class FullReplaceEvalTest < ReplaceEvalTest
|
|
354
360
|
|
355
361
|
x = 5
|
356
362
|
eval %{
|
357
|
-
assert_equal(3, eval(
|
363
|
+
assert_equal(3, eval(' eval("1 + 2") '))
|
358
364
|
x = 6
|
359
365
|
}
|
360
366
|
assert_equal 6, x
|
data/test/irb_test.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
require_relative 'main'
|
2
|
+
require 'live_ast/irb_spy'
|
2
3
|
|
3
4
|
class IRBTest < RegularTest
|
4
5
|
def with_module(parent, child)
|
@@ -10,16 +11,31 @@ class IRBTest < RegularTest
|
|
10
11
|
end
|
11
12
|
end
|
12
13
|
|
13
|
-
def
|
14
|
+
def setup
|
15
|
+
LiveAST::IRBSpy.history = [
|
16
|
+
nil,
|
17
|
+
"class Foo; def bar; 'bar'; end; end",
|
18
|
+
"class Bar",
|
19
|
+
" def foo",
|
20
|
+
" 'foo'",
|
21
|
+
" end",
|
22
|
+
"end"
|
23
|
+
]
|
24
|
+
end
|
25
|
+
|
26
|
+
def test_single_line
|
27
|
+
with_module(Object, :IRB) do
|
28
|
+
expected = no_arg_def(:bar, "bar")
|
29
|
+
result = LiveAST::Linker.fetch_from_cache("(irb)", 1)
|
30
|
+
assert_equal expected, result
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def test_multiple_lines
|
14
35
|
with_module(Object, :IRB) do
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
"def f ; end"
|
19
|
-
end
|
20
|
-
end
|
21
|
-
LiveAST::Linker.fetch_from_cache("(irb)", 1)
|
22
|
-
end
|
36
|
+
expected = no_arg_def(:foo, "foo")
|
37
|
+
result = LiveAST::Linker.fetch_from_cache("(irb)", 3)
|
38
|
+
assert_equal expected, result
|
23
39
|
end
|
24
40
|
end
|
25
41
|
end
|
data/test/load_path_test.rb
CHANGED
@@ -19,7 +19,7 @@ class LoadPathTest < BaseTest
|
|
19
19
|
end
|
20
20
|
|
21
21
|
def test_chdir
|
22
|
-
mkdir DATA_DIR, verbose: false
|
22
|
+
mkdir DATA_DIR, verbose: false
|
23
23
|
Dir.chdir(DATA_DIR) do
|
24
24
|
check_load
|
25
25
|
check_errors
|
@@ -27,32 +27,30 @@ class LoadPathTest < BaseTest
|
|
27
27
|
end
|
28
28
|
|
29
29
|
def check_load
|
30
|
-
|
30
|
+
code1 = %{
|
31
31
|
def hello
|
32
32
|
"password"
|
33
33
|
end
|
34
34
|
}
|
35
35
|
|
36
|
-
|
36
|
+
code2 = %{
|
37
37
|
def goodbye
|
38
38
|
"bubbleboy"
|
39
39
|
end
|
40
40
|
}
|
41
41
|
|
42
|
-
temp_file
|
43
|
-
Object.send(:remove_method, :hello) rescue nil
|
42
|
+
temp_file code1, "foo.rb" do |path|
|
44
43
|
load "foo.rb"
|
45
44
|
assert_equal "password", hello
|
46
45
|
|
47
|
-
write_file path,
|
46
|
+
write_file path, code2
|
48
47
|
|
49
|
-
Object.send(:remove_method, :goodbye) rescue nil
|
50
48
|
LiveAST.load "foo.rb"
|
51
49
|
assert_equal "bubbleboy", goodbye
|
52
50
|
end
|
53
51
|
ensure
|
54
|
-
Object.send(:remove_method, :hello)
|
55
|
-
Object.send(:remove_method, :goodbye)
|
52
|
+
Object.send(:remove_method, :hello)
|
53
|
+
Object.send(:remove_method, :goodbye)
|
56
54
|
end
|
57
55
|
|
58
56
|
def compare_load_errors(file)
|
data/test/main.rb
CHANGED
@@ -36,8 +36,8 @@ class JLMiniTest < MiniTest::Test
|
|
36
36
|
|
37
37
|
def mu_pp(obj)
|
38
38
|
delim("_") <<
|
39
|
-
|
40
|
-
|
39
|
+
obj.pretty_inspect.chomp <<
|
40
|
+
delim("=")
|
41
41
|
end
|
42
42
|
|
43
43
|
def unfixable
|
@@ -49,7 +49,7 @@ class JLMiniTest < MiniTest::Test
|
|
49
49
|
def assert_nothing_raised
|
50
50
|
yield
|
51
51
|
assert_nil nil
|
52
|
-
rescue => ex
|
52
|
+
rescue StandardError => ex
|
53
53
|
raise MiniTest::Assertion,
|
54
54
|
exception_details(ex, "Expected nothing raised, but got:")
|
55
55
|
end
|
@@ -81,7 +81,7 @@ class BaseTest < JLMiniTest
|
|
81
81
|
yield path
|
82
82
|
ensure
|
83
83
|
FileUtils.rm_f path
|
84
|
-
FileUtils.rmdir DATA_DIR
|
84
|
+
FileUtils.rmdir DATA_DIR
|
85
85
|
end
|
86
86
|
end
|
87
87
|
|
@@ -99,8 +99,7 @@ class BaseTest < JLMiniTest
|
|
99
99
|
e.backtrace
|
100
100
|
end
|
101
101
|
|
102
|
-
def ignore(*_args)
|
103
|
-
end
|
102
|
+
def ignore(*_args); end
|
104
103
|
end
|
105
104
|
|
106
105
|
class RegularTest < BaseTest
|
data/test/rubyspec_test.rb
CHANGED
@@ -4,36 +4,38 @@ require_relative '../devel/levitate'
|
|
4
4
|
#
|
5
5
|
# Tests against rubyspec branch which discards '|ast@' tokens
|
6
6
|
#
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
7
|
+
if ENV["LIVE_AST_RUBYSPEC_HOME"]
|
8
|
+
class RubySpecTest < RegularTest
|
9
|
+
FILES = [
|
10
|
+
'core/basicobject/instance_eval_spec.rb',
|
11
|
+
'core/binding/eval_spec.rb',
|
12
|
+
'core/kernel/eval_spec.rb',
|
13
|
+
'core/kernel/instance_eval_spec.rb',
|
14
|
+
'core/module/class_eval_spec.rb',
|
15
|
+
'core/module/module_eval_spec.rb',
|
16
|
+
].freeze
|
16
17
|
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
18
|
+
def setup
|
19
|
+
super
|
20
|
+
puts "\n==== rubyspec"
|
21
|
+
end
|
21
22
|
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
23
|
+
FILES.each do |file|
|
24
|
+
mname = "test_" + file.tr("/", "_").chop!.chop!.chop!
|
25
|
+
define_method mname do
|
26
|
+
Dir.chdir ENV["LIVE_AST_RUBYSPEC_HOME"] do
|
27
|
+
cmd =
|
28
|
+
["mspec", "-t", Levitate.ruby_bin] +
|
28
29
|
|
29
|
-
|
30
|
-
|
31
|
-
|
30
|
+
(["-T"] * Levitate.ruby_opts.size).
|
31
|
+
zip(Levitate.ruby_opts).
|
32
|
+
flatten +
|
32
33
|
|
33
|
-
|
34
|
+
[file]
|
34
35
|
|
35
|
-
|
36
|
+
assert system(*cmd)
|
37
|
+
end
|
36
38
|
end
|
37
39
|
end
|
38
40
|
end
|
39
|
-
end
|
41
|
+
end
|
data/test/thread_test.rb
CHANGED
@@ -1,97 +1,99 @@
|
|
1
1
|
require 'main'
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
3
|
+
if LiveAST.parser::Test.respond_to?(:unparser_matches_ruby2ruby?) &&
|
4
|
+
LiveAST.parser::Test.unparser_matches_ruby2ruby?
|
5
|
+
class ToRubyTest < RegularTest
|
6
|
+
def setup
|
7
|
+
super
|
8
|
+
require 'live_ast/to_ruby'
|
9
|
+
end
|
10
|
+
|
11
|
+
def test_lambda_0
|
12
|
+
src = %{lambda { "moo" }}
|
13
|
+
dst = ast_eval(src, binding).to_ruby
|
14
|
+
assert_equal src, dst
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_lambda_1
|
18
|
+
src = %{lambda { |x| (x ** 2) }}
|
19
|
+
dst = ast_eval(src, binding).to_ruby
|
20
|
+
assert_equal src, dst
|
21
|
+
end
|
22
|
+
|
23
|
+
def test_lambda_2
|
24
|
+
src = %{lambda { |x, y| (x + y) }}
|
25
|
+
dst = ast_eval(src, binding).to_ruby
|
26
|
+
assert_equal src, dst
|
27
|
+
end
|
28
|
+
|
29
|
+
def test_proc_0
|
30
|
+
src = %{proc { "moo" }}
|
31
|
+
dst = ast_eval(src, binding).to_ruby
|
32
|
+
assert_equal src, dst
|
33
|
+
end
|
34
|
+
|
35
|
+
def test_proc_1
|
36
|
+
src = %{proc { |x| (x ** 2) }}
|
37
|
+
dst = ast_eval(src, binding).to_ruby
|
38
|
+
assert_equal src, dst
|
39
|
+
end
|
40
|
+
|
41
|
+
def test_proc_2
|
42
|
+
src = %{proc { |x, y| (x * y) }}
|
43
|
+
dst = ast_eval(src, binding).to_ruby
|
44
|
+
assert_equal src, dst
|
45
|
+
end
|
46
|
+
|
47
|
+
def test_block_0
|
48
|
+
src = %{return_block { "moo" }}
|
49
|
+
dst = ast_eval(src, binding).to_ruby
|
50
|
+
assert_equal src, dst
|
51
|
+
end
|
52
|
+
|
53
|
+
def test_block_1
|
54
|
+
src = %{return_block { |x| (x ** 2) }}
|
55
|
+
dst = ast_eval(src, binding).to_ruby
|
56
|
+
assert_equal src, dst
|
57
|
+
end
|
58
|
+
|
59
|
+
def test_block_2
|
60
|
+
src = %{return_block { |x, y| (x - y) }}
|
61
|
+
dst = ast_eval(src, binding).to_ruby
|
62
|
+
assert_equal src, dst
|
63
|
+
end
|
64
|
+
|
65
|
+
def test_method_0
|
66
|
+
src = %{def f\n "moo"\nend}
|
67
|
+
dst = Class.new do
|
68
|
+
ast_eval(src, binding)
|
69
|
+
end.instance_method(:f).to_ruby
|
70
|
+
assert_equal src, dst
|
71
|
+
end
|
72
|
+
|
73
|
+
def test_method_1
|
74
|
+
src = %{def f(x)\n (x ** 2)\nend}
|
75
|
+
dst = Class.new do
|
76
|
+
ast_eval(src, binding)
|
77
|
+
end.instance_method(:f).to_ruby
|
78
|
+
assert_equal src, dst
|
79
|
+
end
|
80
|
+
|
81
|
+
def test_method_2
|
82
|
+
src = %{def f(x, y)\n (x / y)\nend}
|
83
|
+
dst = Class.new do
|
84
|
+
ast_eval(src, binding)
|
85
|
+
end.instance_method(:f).to_ruby
|
86
|
+
assert_equal src, dst
|
87
|
+
end
|
88
|
+
|
89
|
+
def test_to_ast_after_to_ruby
|
90
|
+
src = %{lambda { "moo" }}
|
91
|
+
expected_ast = ast_eval(src, binding).to_ast
|
92
|
+
|
93
|
+
lmb = ast_eval(src, binding)
|
94
|
+
lmb.to_ruby
|
95
|
+
|
96
|
+
assert_equal expected_ast, lmb.to_ast
|
97
|
+
end
|
7
98
|
end
|
8
|
-
|
9
|
-
def test_lambda_0
|
10
|
-
src = %{lambda { "moo" }}
|
11
|
-
dst = ast_eval(src, binding).to_ruby
|
12
|
-
assert_equal src, dst
|
13
|
-
end
|
14
|
-
|
15
|
-
def test_lambda_1
|
16
|
-
src = %{lambda { |x| (x ** 2) }}
|
17
|
-
dst = ast_eval(src, binding).to_ruby
|
18
|
-
assert_equal src, dst
|
19
|
-
end
|
20
|
-
|
21
|
-
def test_lambda_2
|
22
|
-
src = %{lambda { |x, y| (x + y) }}
|
23
|
-
dst = ast_eval(src, binding).to_ruby
|
24
|
-
assert_equal src, dst
|
25
|
-
end
|
26
|
-
|
27
|
-
def test_proc_0
|
28
|
-
src = %{proc { "moo" }}
|
29
|
-
dst = ast_eval(src, binding).to_ruby
|
30
|
-
assert_equal src, dst
|
31
|
-
end
|
32
|
-
|
33
|
-
def test_proc_1
|
34
|
-
src = %{proc { |x| (x ** 2) }}
|
35
|
-
dst = ast_eval(src, binding).to_ruby
|
36
|
-
assert_equal src, dst
|
37
|
-
end
|
38
|
-
|
39
|
-
def test_proc_2
|
40
|
-
src = %{proc { |x, y| (x * y) }}
|
41
|
-
dst = ast_eval(src, binding).to_ruby
|
42
|
-
assert_equal src, dst
|
43
|
-
end
|
44
|
-
|
45
|
-
def test_block_0
|
46
|
-
src = %{return_block { "moo" }}
|
47
|
-
dst = ast_eval(src, binding).to_ruby
|
48
|
-
assert_equal src, dst
|
49
|
-
end
|
50
|
-
|
51
|
-
def test_block_1
|
52
|
-
src = %{return_block { |x| (x ** 2) }}
|
53
|
-
dst = ast_eval(src, binding).to_ruby
|
54
|
-
assert_equal src, dst
|
55
|
-
end
|
56
|
-
|
57
|
-
def test_block_2
|
58
|
-
src = %{return_block { |x, y| (x - y) }}
|
59
|
-
dst = ast_eval(src, binding).to_ruby
|
60
|
-
assert_equal src, dst
|
61
|
-
end
|
62
|
-
|
63
|
-
def test_method_0
|
64
|
-
src = %{def f\n "moo"\nend}
|
65
|
-
dst = Class.new do
|
66
|
-
ast_eval(src, binding)
|
67
|
-
end.instance_method(:f).to_ruby
|
68
|
-
assert_equal src, dst
|
69
|
-
end
|
70
|
-
|
71
|
-
def test_method_1
|
72
|
-
src = %{def f(x)\n (x ** 2)\nend}
|
73
|
-
dst = Class.new do
|
74
|
-
ast_eval(src, binding)
|
75
|
-
end.instance_method(:f).to_ruby
|
76
|
-
assert_equal src, dst
|
77
|
-
end
|
78
|
-
|
79
|
-
def test_method_2
|
80
|
-
src = %{def f(x, y)\n (x / y)\nend}
|
81
|
-
dst = Class.new do
|
82
|
-
ast_eval(src, binding)
|
83
|
-
end.instance_method(:f).to_ruby
|
84
|
-
assert_equal src, dst
|
85
|
-
end
|
86
|
-
|
87
|
-
def test_to_ast_after_to_ruby
|
88
|
-
src = %{lambda { "moo" }}
|
89
|
-
expected_ast = ast_eval(src, binding).to_ast
|
90
|
-
|
91
|
-
lmb = ast_eval(src, binding)
|
92
|
-
lmb.to_ruby
|
93
|
-
|
94
|
-
assert_equal expected_ast, lmb.to_ast
|
95
|
-
end
|
96
|
-
end if LiveAST.parser::Test.respond_to?(:unparser_matches_ruby2ruby?) &&
|
97
|
-
LiveAST.parser::Test.unparser_matches_ruby2ruby?
|
99
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mvz-live_ast
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- James M. Lawrence
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2017-09-22 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: ruby_parser
|
@@ -17,42 +17,42 @@ dependencies:
|
|
17
17
|
requirements:
|
18
18
|
- - "~>"
|
19
19
|
- !ruby/object:Gem::Version
|
20
|
-
version:
|
20
|
+
version: 3.10.1
|
21
21
|
type: :runtime
|
22
22
|
prerelease: false
|
23
23
|
version_requirements: !ruby/object:Gem::Requirement
|
24
24
|
requirements:
|
25
25
|
- - "~>"
|
26
26
|
- !ruby/object:Gem::Version
|
27
|
-
version:
|
27
|
+
version: 3.10.1
|
28
28
|
- !ruby/object:Gem::Dependency
|
29
29
|
name: ruby2ruby
|
30
30
|
requirement: !ruby/object:Gem::Requirement
|
31
31
|
requirements:
|
32
|
-
- - "
|
32
|
+
- - "~>"
|
33
33
|
- !ruby/object:Gem::Version
|
34
|
-
version:
|
34
|
+
version: 2.4.0
|
35
35
|
type: :runtime
|
36
36
|
prerelease: false
|
37
37
|
version_requirements: !ruby/object:Gem::Requirement
|
38
38
|
requirements:
|
39
|
-
- - "
|
39
|
+
- - "~>"
|
40
40
|
- !ruby/object:Gem::Version
|
41
|
-
version:
|
41
|
+
version: 2.4.0
|
42
42
|
- !ruby/object:Gem::Dependency
|
43
43
|
name: binding_of_caller
|
44
44
|
requirement: !ruby/object:Gem::Requirement
|
45
45
|
requirements:
|
46
|
-
- - "
|
46
|
+
- - "~>"
|
47
47
|
- !ruby/object:Gem::Version
|
48
|
-
version:
|
48
|
+
version: 0.7.2
|
49
49
|
type: :development
|
50
50
|
prerelease: false
|
51
51
|
version_requirements: !ruby/object:Gem::Requirement
|
52
52
|
requirements:
|
53
|
-
- - "
|
53
|
+
- - "~>"
|
54
54
|
- !ruby/object:Gem::Version
|
55
|
-
version:
|
55
|
+
version: 0.7.2
|
56
56
|
- !ruby/object:Gem::Dependency
|
57
57
|
name: bundler
|
58
58
|
requirement: !ruby/object:Gem::Requirement
|
@@ -213,7 +213,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
213
213
|
requirements:
|
214
214
|
- - ">="
|
215
215
|
- !ruby/object:Gem::Version
|
216
|
-
version: 1.
|
216
|
+
version: 2.1.0
|
217
217
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
218
218
|
requirements:
|
219
219
|
- - ">="
|
@@ -221,59 +221,58 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
221
221
|
version: '0'
|
222
222
|
requirements: []
|
223
223
|
rubyforge_project:
|
224
|
-
rubygems_version: 2.
|
224
|
+
rubygems_version: 2.6.13
|
225
225
|
signing_key:
|
226
226
|
specification_version: 4
|
227
227
|
summary: Live abstract syntax trees of methods and procs.
|
228
228
|
test_files:
|
229
|
-
- test/
|
230
|
-
- test/
|
231
|
-
- test/
|
232
|
-
- test/
|
229
|
+
- test/readme_test.rb
|
230
|
+
- test/rubyspec_test.rb
|
231
|
+
- test/lambda_test.rb
|
232
|
+
- test/redefine_method_test.rb
|
233
233
|
- test/stdlib_test.rb
|
234
|
-
- test/rubygems_test.rb
|
235
234
|
- test/full/replace_eval_test.rb
|
236
235
|
- test/full/ast_reload_test.rb
|
237
236
|
- test/to_ruby/to_ruby_test.rb
|
238
237
|
- test/to_ruby/to_ruby_feature_test.rb
|
239
|
-
- test/
|
240
|
-
- test/eval_test.rb
|
241
|
-
- test/ast_eval/ast_eval_test.rb
|
242
|
-
- test/readme_test.rb
|
243
|
-
- test/def_test.rb
|
244
|
-
- test/attr_test.rb
|
245
|
-
- test/thread_test.rb
|
246
|
-
- test/load_path_test.rb
|
247
|
-
- test/ast_load/ast_load_test.rb
|
248
|
-
- test/alias_test.rb
|
249
|
-
- test/rubyspec_test.rb
|
250
|
-
- test/redefine_method_test.rb
|
251
|
-
- test/lambda_test.rb
|
252
|
-
- test/error_test.rb
|
253
|
-
- test/recursive_eval_test.rb
|
254
|
-
- test/define_singleton_method_test.rb
|
255
|
-
- test/encoding_test/utf8bom_only.rb
|
256
|
-
- test/encoding_test/utf8unix.rb
|
257
|
-
- test/encoding_test/eucjp.rb
|
258
|
-
- test/encoding_test/usascii_with_utf8bom.rb
|
259
|
-
- test/encoding_test/utf8bom.rb
|
238
|
+
- test/to_ast/to_ast_feature_test.rb
|
260
239
|
- test/encoding_test/utf8mac_alt.rb
|
261
|
-
- test/encoding_test/default.rb
|
262
240
|
- test/encoding_test/usascii.rb
|
263
|
-
- test/encoding_test/
|
264
|
-
- test/encoding_test/
|
265
|
-
- test/encoding_test/
|
241
|
+
- test/encoding_test/default.rb
|
242
|
+
- test/encoding_test/utf8dos.rb
|
243
|
+
- test/encoding_test/eucjp.rb
|
266
244
|
- test/encoding_test/bad.rb
|
267
|
-
- test/encoding_test/utf8mac.rb
|
268
245
|
- test/encoding_test/koi8_with_utf8bom.rb
|
269
|
-
- test/encoding_test/
|
246
|
+
- test/encoding_test/utf8bom_only.rb
|
247
|
+
- test/encoding_test/koi8_shebang.rb
|
248
|
+
- test/encoding_test/utf8unix.rb
|
249
|
+
- test/encoding_test/cp932.rb
|
250
|
+
- test/encoding_test/utf8.rb
|
270
251
|
- test/encoding_test/koi8.rb
|
252
|
+
- test/encoding_test/utf8bom.rb
|
253
|
+
- test/encoding_test/usascii_with_utf8bom.rb
|
254
|
+
- test/encoding_test/utf8mac.rb
|
255
|
+
- test/encoding_test.rb
|
256
|
+
- test/alias_test.rb
|
257
|
+
- test/rubygems_test.rb
|
258
|
+
- test/define_singleton_method_test.rb
|
259
|
+
- test/covert_define_method_test.rb
|
260
|
+
- test/ast_load/ast_load_test.rb
|
261
|
+
- test/backtrace_test.rb
|
271
262
|
- test/load_test.rb
|
263
|
+
- test/singleton_test.rb
|
264
|
+
- test/recursive_eval_test.rb
|
265
|
+
- test/base/reload_test.rb
|
266
|
+
- test/base/noninvasive_test.rb
|
267
|
+
- test/define_method_test.rb
|
268
|
+
- test/eval_test.rb
|
269
|
+
- test/attr_test.rb
|
270
|
+
- test/irb_test.rb
|
271
|
+
- test/load_path_test.rb
|
272
272
|
- test/nested_test.rb
|
273
|
+
- test/def_test.rb
|
274
|
+
- test/thread_test.rb
|
275
|
+
- test/flush_cache_test.rb
|
276
|
+
- test/error_test.rb
|
277
|
+
- test/ast_eval/ast_eval_test.rb
|
273
278
|
- test/main.rb
|
274
|
-
- test/define_method_test.rb
|
275
|
-
- test/backtrace_test.rb
|
276
|
-
- test/base/noninvasive_test.rb
|
277
|
-
- test/base/reload_test.rb
|
278
|
-
- test/encoding_test.rb
|
279
|
-
has_rdoc:
|