mvz-live_ast 1.3.2 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (58) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGES.rdoc +8 -1
  3. data/README.rdoc +3 -3
  4. data/Rakefile +20 -20
  5. data/lib/live_ast.rb +4 -4
  6. data/lib/live_ast/ast_eval.rb +1 -1
  7. data/lib/live_ast/ast_load.rb +1 -1
  8. data/lib/live_ast/base.rb +13 -12
  9. data/lib/live_ast/common.rb +2 -10
  10. data/lib/live_ast/evaler.rb +3 -3
  11. data/lib/live_ast/full.rb +2 -2
  12. data/lib/live_ast/irb_spy.rb +4 -4
  13. data/lib/live_ast/loader.rb +2 -2
  14. data/lib/live_ast/reader.rb +1 -1
  15. data/lib/live_ast/replace_eval.rb +12 -13
  16. data/lib/live_ast/replace_load.rb +1 -1
  17. data/lib/live_ast/replace_raise.rb +3 -3
  18. data/lib/live_ast/ruby_parser.rb +4 -4
  19. data/lib/live_ast/ruby_parser/test.rb +12 -0
  20. data/lib/live_ast/ruby_parser/unparser.rb +1 -1
  21. data/lib/live_ast/to_ast.rb +13 -18
  22. data/lib/live_ast/to_ruby.rb +8 -18
  23. data/lib/live_ast/version.rb +1 -1
  24. data/test/alias_test.rb +1 -1
  25. data/test/ast_eval/ast_eval_test.rb +2 -2
  26. data/test/ast_load/ast_load_test.rb +2 -2
  27. data/test/attr_test.rb +1 -1
  28. data/test/backtrace_test.rb +4 -4
  29. data/test/base/noninvasive_test.rb +1 -1
  30. data/test/base/reload_test.rb +1 -1
  31. data/test/covert_define_method_test.rb +1 -1
  32. data/test/def_test.rb +1 -1
  33. data/test/define_method_test.rb +2 -2
  34. data/test/define_singleton_method_test.rb +1 -1
  35. data/test/encoding_test.rb +1 -1
  36. data/test/error_test.rb +3 -3
  37. data/test/eval_test.rb +1 -1
  38. data/test/flush_cache_test.rb +3 -1
  39. data/test/full/ast_reload_test.rb +1 -1
  40. data/test/full/replace_eval_test.rb +8 -8
  41. data/test/irb_test.rb +2 -2
  42. data/test/lambda_test.rb +2 -2
  43. data/test/load_path_test.rb +2 -2
  44. data/test/load_test.rb +3 -3
  45. data/test/main.rb +18 -18
  46. data/test/nested_test.rb +1 -1
  47. data/test/readme_test.rb +3 -3
  48. data/test/recursive_eval_test.rb +1 -1
  49. data/test/redefine_method_test.rb +1 -1
  50. data/test/rubygems_test.rb +4 -4
  51. data/test/rubyspec_test.rb +8 -8
  52. data/test/singleton_test.rb +1 -1
  53. data/test/stdlib_test.rb +1 -1
  54. data/test/thread_test.rb +2 -2
  55. data/test/to_ast/to_ast_feature_test.rb +2 -2
  56. data/test/to_ruby/to_ruby_feature_test.rb +2 -2
  57. data/test/to_ruby/to_ruby_test.rb +15 -15
  58. metadata +74 -60
@@ -1,26 +1,16 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'live_ast/base'
3
+ require "live_ast/base"
4
4
 
5
- [Method, UnboundMethod, Proc].each do |klass|
6
- klass.class_eval do
7
- def to_ruby #:nodoc:
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
- class Method
14
- # :method: to_ruby
15
- # Generate ruby code which reflects the AST of this object.
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
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module LiveAST
4
- VERSION = "1.3.2"
4
+ VERSION = "2.0.0"
5
5
  end
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative 'main'
3
+ require_relative "main"
4
4
 
5
5
  class AliasTest < RegularTest
6
6
  class A
@@ -1,8 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'main'
3
+ require "main"
4
4
 
5
- require 'live_ast/ast_eval'
5
+ require "live_ast/ast_eval"
6
6
 
7
7
  class ASTEvalTest < BaseTest
8
8
  def test_defines_ast_eval
@@ -1,8 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'main'
3
+ require "main"
4
4
 
5
- require 'live_ast/ast_load'
5
+ require "live_ast/ast_load"
6
6
 
7
7
  class AstLoadTest < BaseTest
8
8
  include FileUtils
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative 'main'
3
+ require_relative "main"
4
4
 
5
5
  class AttrTest < RegularTest
6
6
  class A
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative 'main'
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 'live_ast/replace_raise'
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
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'main'
3
+ require "main"
4
4
 
5
5
  class NoninvasiveTest < BaseTest
6
6
  def test_no_clutter
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'main'
3
+ require "main"
4
4
 
5
5
  class ReloadTest < BaseTest
6
6
  include FileUtils
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative 'main'
3
+ require_relative "main"
4
4
 
5
5
  class CovertDefineMethodTest < RegularTest
6
6
  DEFINE = lambda do
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative 'main'
3
+ require_relative "main"
4
4
 
5
5
  class DefTest < RegularTest
6
6
  class A
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative 'main'
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 :+
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative 'main'
3
+ require_relative "main"
4
4
 
5
5
  class DefineSingletonMethodTest < RegularTest
6
6
  def test_define_singleton_method
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative 'main'
3
+ require_relative "main"
4
4
 
5
5
  class AllEncodingTest < RegularTest
6
6
  ENC_TESTS = {
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative 'main'
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 test_reload_with_raw_eval_1
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 test_reload_with_raw_eval_2
78
+ def test_reload_with_raw_eval_two
79
79
  c = ast_eval %{
80
80
  Class.new do
81
81
  def f
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative 'main'
3
+ require_relative "main"
4
4
 
5
5
  class EvalTest < RegularTest
6
6
  DEFINE_A = lambda do
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative 'main'
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 'main'
3
+ require "main"
4
4
 
5
5
  class ASTReloadTest < ReplaceEvalTest
6
6
  include FileUtils
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'main'
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 test_const_lookup_2
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 test_const_lookup_3
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
- [[], ('a'..'z').to_a].each do |args|
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 'live_ast/full'
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) { ['1', nil] }
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
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative 'main'
4
- require 'live_ast/irb_spy'
3
+ require_relative "main"
4
+ require "live_ast/irb_spy"
5
5
 
6
6
  class IRBTest < RegularTest
7
7
  def with_module(parent, child)
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative 'main'
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 = binop_block(:lambda, :-)
34
+ expected = binop_lambda(:-)
35
35
  assert_equal expected, a.to_ast
36
36
  end
37
37
 
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative 'main'
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
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative 'main'
4
- require_relative '../devel/levitate'
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__) + "/../lib")
83
+ lib = File.expand_path("../lib", File.dirname(__FILE__))
84
84
 
85
85
  [
86
86
  # respects a loaded file setting $VERBOSE = true
@@ -1,22 +1,22 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- $LOAD_PATH.unshift File.expand_path(File.dirname(__FILE__) + '/../lib')
3
+ $LOAD_PATH.unshift File.expand_path("../lib", File.dirname(__FILE__))
4
4
 
5
5
  # require first for stdlib_test
6
- require 'pp'
7
- require 'find'
8
- require 'fileutils'
6
+ require "pp"
7
+ require "find"
8
+ require "fileutils"
9
9
 
10
- require 'minitest/mock'
11
- require 'minitest/autorun'
10
+ require "minitest/mock"
11
+ require "minitest/autorun"
12
12
 
13
13
  $VERBOSE = true
14
14
 
15
- require 'live_ast/base'
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 = ('A'..'Z').to_a[rand(26)]
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 => ex
55
+ rescue StandardError => e
56
56
  raise MiniTest::Assertion,
57
- exception_details(ex, "Expected nothing raised, but got:")
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__) + "/data")
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 ||= ('a'..'z').to_a.shuffle.join + ".rb"
79
- path = DATA_DIR + "/" + basename
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 'live_ast'
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 'live_ast/full'
117
+ require "live_ast/full"
118
118
  true
119
119
  rescue LoadError
120
- raise "need: gem install binding_of_caller" if RUBY_ENGINE == "ruby"
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