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.
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