mvz-live_ast 2.0.0 → 2.1.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 +5 -0
- data/README.rdoc +14 -0
- data/lib/live_ast/base.rb +7 -9
- data/lib/live_ast/irb_spy.rb +1 -1
- data/lib/live_ast/replace_caller.rb +14 -0
- data/lib/live_ast/version.rb +1 -1
- metadata +75 -116
- data/Rakefile +0 -62
- data/devel/levitate.rb +0 -184
- data/devel/levitate_config.rb +0 -4
- data/test/alias_test.rb +0 -25
- data/test/ast_eval/ast_eval_test.rb +0 -13
- data/test/ast_load/ast_load_test.rb +0 -47
- data/test/attr_test.rb +0 -26
- data/test/backtrace_test.rb +0 -161
- data/test/base/noninvasive_test.rb +0 -55
- data/test/base/reload_test.rb +0 -43
- data/test/covert_define_method_test.rb +0 -25
- data/test/def_test.rb +0 -37
- data/test/define_method_test.rb +0 -69
- data/test/define_singleton_method_test.rb +0 -17
- data/test/encoding_test/bad.rb +0 -1
- data/test/encoding_test/cp932.rb +0 -6
- data/test/encoding_test/default.rb +0 -5
- data/test/encoding_test/eucjp.rb +0 -6
- data/test/encoding_test/koi8.rb +0 -6
- data/test/encoding_test/koi8_shebang.rb +0 -7
- data/test/encoding_test/koi8_with_utf8bom.rb +0 -6
- data/test/encoding_test/usascii.rb +0 -6
- data/test/encoding_test/usascii_with_utf8bom.rb +0 -6
- data/test/encoding_test/utf8.rb +0 -6
- data/test/encoding_test/utf8bom.rb +0 -6
- data/test/encoding_test/utf8bom_only.rb +0 -5
- data/test/encoding_test/utf8dos.rb +0 -6
- data/test/encoding_test/utf8mac.rb +0 -6
- data/test/encoding_test/utf8mac_alt.rb +0 -6
- data/test/encoding_test/utf8unix.rb +0 -6
- data/test/encoding_test.rb +0 -54
- data/test/error_test.rb +0 -118
- data/test/eval_test.rb +0 -271
- data/test/flush_cache_test.rb +0 -102
- data/test/full/ast_reload_test.rb +0 -41
- data/test/full/replace_eval_test.rb +0 -433
- data/test/irb_test.rb +0 -43
- data/test/lambda_test.rb +0 -65
- data/test/load_path_test.rb +0 -77
- data/test/load_test.rb +0 -125
- data/test/main.rb +0 -134
- data/test/nested_test.rb +0 -31
- data/test/readme_test.rb +0 -16
- data/test/recursive_eval_test.rb +0 -53
- data/test/redefine_method_test.rb +0 -85
- data/test/rubygems_test.rb +0 -27
- data/test/rubyspec_test.rb +0 -39
- data/test/singleton_test.rb +0 -27
- data/test/stdlib_test.rb +0 -15
- data/test/thread_test.rb +0 -45
- data/test/to_ast/to_ast_feature_test.rb +0 -13
- data/test/to_ruby/to_ruby_feature_test.rb +0 -13
- data/test/to_ruby/to_ruby_test.rb +0 -101
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c77dc5f539e5e56367987217f1a7389f37806f2da4ec1c3f55fb9b53d03c2172
|
4
|
+
data.tar.gz: 75a943f11e62f41dd4cfcd2984b8d7fd972d180d7e8b551e8f13282d55eba95c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0e4a9b8778a9ba187553712fcfb20611df3ed73e6cbf441dea5e2505c3f345d5644acc2a5f8c69977d8ad4fb9fdad6045304b853841f94446d2c99887ab64c40
|
7
|
+
data.tar.gz: c45e2c0739d6c2da44c696779eb61bb69fb47c2f5a9612c949f2cab86ca9378fd4f4e371c3dcebcbd2cdaafdf57cd2461af827048e7db225484c0361178d9b9f
|
data/CHANGES.rdoc
CHANGED
data/README.rdoc
CHANGED
@@ -224,6 +224,20 @@ code. An exception from within a native method will likely still
|
|
224
224
|
contain the token in its backtrace (e.g., in MRI the exception raised
|
225
225
|
by <code>1/0</code> comes from C).
|
226
226
|
|
227
|
+
Similarly to replace_raise, there is a replace_caller for libraries that
|
228
|
+
use the output of Kernel.caller directly to identify files. This has the
|
229
|
+
same caveats as replace_raise.
|
230
|
+
|
231
|
+
require 'live_ast'
|
232
|
+
|
233
|
+
f = ast_eval %{ lambda { caller.first } }, binding
|
234
|
+
f.call
|
235
|
+
=> "(irb)|ast@o:7:in `irb_binding'"
|
236
|
+
|
237
|
+
require 'live_ast/replace_caller'
|
238
|
+
f.call
|
239
|
+
=> "(irb):7:in `block in irb_binding'"
|
240
|
+
|
227
241
|
== Replacing the Parser
|
228
242
|
|
229
243
|
Despite its name, LiveAST knows nothing about ASTs. It merely reports
|
data/lib/live_ast/base.rb
CHANGED
@@ -1,7 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require "thread"
|
4
|
-
|
5
3
|
require "live_ast/common"
|
6
4
|
require "live_ast/reader"
|
7
5
|
require "live_ast/evaler"
|
@@ -11,12 +9,12 @@ require "live_ast/error"
|
|
11
9
|
require "live_ast/irb_spy" if defined?(IRB)
|
12
10
|
|
13
11
|
module LiveAST
|
14
|
-
NATIVE_EVAL = Kernel.method(:eval)
|
12
|
+
NATIVE_EVAL = Kernel.method(:eval) # :nodoc:
|
15
13
|
|
16
14
|
class << self
|
17
|
-
attr_writer :parser
|
15
|
+
attr_writer :parser # :nodoc:
|
18
16
|
|
19
|
-
def parser
|
17
|
+
def parser # :nodoc:
|
20
18
|
@parser ||=
|
21
19
|
begin
|
22
20
|
require "live_ast/ruby_parser"
|
@@ -29,7 +27,7 @@ module LiveAST
|
|
29
27
|
#
|
30
28
|
# Equivalent to <code>obj.to_ast</code>.
|
31
29
|
#
|
32
|
-
def ast(obj)
|
30
|
+
def ast(obj) # :nodoc:
|
33
31
|
case obj
|
34
32
|
when Method, UnboundMethod
|
35
33
|
Linker.find_method_ast(obj.owner, obj.name, *obj.source_location)
|
@@ -53,7 +51,7 @@ module LiveAST
|
|
53
51
|
#
|
54
52
|
# Equivalent to <code>Kernel#ast_eval</code>.
|
55
53
|
#
|
56
|
-
def eval(*args)
|
54
|
+
def eval(*args) # :nodoc:
|
57
55
|
Evaler.eval(args[0], *args)
|
58
56
|
end
|
59
57
|
|
@@ -62,14 +60,14 @@ module LiveAST
|
|
62
60
|
#
|
63
61
|
# Equivalent to <code>Kernel#ast_load</code>.
|
64
62
|
#
|
65
|
-
def load(file, wrap = false)
|
63
|
+
def load(file, wrap = false) # :nodoc:
|
66
64
|
Loader.load(file, wrap)
|
67
65
|
end
|
68
66
|
|
69
67
|
#
|
70
68
|
# strip the revision token from a string
|
71
69
|
#
|
72
|
-
def strip_token(file)
|
70
|
+
def strip_token(file) # :nodoc:
|
73
71
|
file.sub(/#{Regexp.quote Linker::REVISION_TOKEN}[a-z]+/, "")
|
74
72
|
end
|
75
73
|
end
|
data/lib/live_ast/irb_spy.rb
CHANGED
@@ -0,0 +1,14 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "live_ast/base"
|
4
|
+
|
5
|
+
module Kernel
|
6
|
+
private
|
7
|
+
|
8
|
+
alias live_ast_original_caller caller
|
9
|
+
def caller(*args)
|
10
|
+
c = live_ast_original_caller(*args)
|
11
|
+
c.shift
|
12
|
+
c.map { |line| LiveAST.strip_token line }
|
13
|
+
end
|
14
|
+
end
|
data/lib/live_ast/version.rb
CHANGED
metadata
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mvz-live_ast
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- James M. Lawrence
|
8
8
|
- Matijs van Zuijlen
|
9
|
-
autorequire:
|
9
|
+
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2022-02-11 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: ruby2ruby
|
@@ -81,6 +81,20 @@ dependencies:
|
|
81
81
|
- - "~>"
|
82
82
|
- !ruby/object:Gem::Version
|
83
83
|
version: '13.0'
|
84
|
+
- !ruby/object:Gem::Dependency
|
85
|
+
name: rake-manifest
|
86
|
+
requirement: !ruby/object:Gem::Requirement
|
87
|
+
requirements:
|
88
|
+
- - "~>"
|
89
|
+
- !ruby/object:Gem::Version
|
90
|
+
version: 0.2.0
|
91
|
+
type: :development
|
92
|
+
prerelease: false
|
93
|
+
version_requirements: !ruby/object:Gem::Requirement
|
94
|
+
requirements:
|
95
|
+
- - "~>"
|
96
|
+
- !ruby/object:Gem::Version
|
97
|
+
version: 0.2.0
|
84
98
|
- !ruby/object:Gem::Dependency
|
85
99
|
name: rdoc
|
86
100
|
requirement: !ruby/object:Gem::Requirement
|
@@ -101,32 +115,75 @@ dependencies:
|
|
101
115
|
requirements:
|
102
116
|
- - "~>"
|
103
117
|
- !ruby/object:Gem::Version
|
104
|
-
version: 1.
|
118
|
+
version: '1.25'
|
119
|
+
type: :development
|
120
|
+
prerelease: false
|
121
|
+
version_requirements: !ruby/object:Gem::Requirement
|
122
|
+
requirements:
|
123
|
+
- - "~>"
|
124
|
+
- !ruby/object:Gem::Version
|
125
|
+
version: '1.25'
|
126
|
+
- !ruby/object:Gem::Dependency
|
127
|
+
name: rubocop-minitest
|
128
|
+
requirement: !ruby/object:Gem::Requirement
|
129
|
+
requirements:
|
130
|
+
- - "~>"
|
131
|
+
- !ruby/object:Gem::Version
|
132
|
+
version: 0.17.1
|
105
133
|
type: :development
|
106
134
|
prerelease: false
|
107
135
|
version_requirements: !ruby/object:Gem::Requirement
|
108
136
|
requirements:
|
109
137
|
- - "~>"
|
110
138
|
- !ruby/object:Gem::Version
|
111
|
-
version:
|
139
|
+
version: 0.17.1
|
140
|
+
- !ruby/object:Gem::Dependency
|
141
|
+
name: rubocop-packaging
|
142
|
+
requirement: !ruby/object:Gem::Requirement
|
143
|
+
requirements:
|
144
|
+
- - "~>"
|
145
|
+
- !ruby/object:Gem::Version
|
146
|
+
version: 0.5.0
|
147
|
+
type: :development
|
148
|
+
prerelease: false
|
149
|
+
version_requirements: !ruby/object:Gem::Requirement
|
150
|
+
requirements:
|
151
|
+
- - "~>"
|
152
|
+
- !ruby/object:Gem::Version
|
153
|
+
version: 0.5.0
|
112
154
|
- !ruby/object:Gem::Dependency
|
113
155
|
name: rubocop-performance
|
114
156
|
requirement: !ruby/object:Gem::Requirement
|
115
157
|
requirements:
|
116
158
|
- - "~>"
|
117
159
|
- !ruby/object:Gem::Version
|
118
|
-
version: 1.
|
160
|
+
version: '1.13'
|
161
|
+
type: :development
|
162
|
+
prerelease: false
|
163
|
+
version_requirements: !ruby/object:Gem::Requirement
|
164
|
+
requirements:
|
165
|
+
- - "~>"
|
166
|
+
- !ruby/object:Gem::Version
|
167
|
+
version: '1.13'
|
168
|
+
- !ruby/object:Gem::Dependency
|
169
|
+
name: rubocop-rake
|
170
|
+
requirement: !ruby/object:Gem::Requirement
|
171
|
+
requirements:
|
172
|
+
- - "~>"
|
173
|
+
- !ruby/object:Gem::Version
|
174
|
+
version: 0.6.0
|
119
175
|
type: :development
|
120
176
|
prerelease: false
|
121
177
|
version_requirements: !ruby/object:Gem::Requirement
|
122
178
|
requirements:
|
123
179
|
- - "~>"
|
124
180
|
- !ruby/object:Gem::Version
|
125
|
-
version:
|
181
|
+
version: 0.6.0
|
126
182
|
description: |2
|
127
183
|
LiveAST enables a program to find the ASTs of objects created by dynamically
|
128
184
|
generated code.
|
129
|
-
email:
|
185
|
+
email:
|
186
|
+
- matijs@matijs.net
|
130
187
|
executables: []
|
131
188
|
extensions: []
|
132
189
|
extra_rdoc_files:
|
@@ -135,9 +192,6 @@ extra_rdoc_files:
|
|
135
192
|
files:
|
136
193
|
- CHANGES.rdoc
|
137
194
|
- README.rdoc
|
138
|
-
- Rakefile
|
139
|
-
- devel/levitate.rb
|
140
|
-
- devel/levitate_config.rb
|
141
195
|
- lib/live_ast.rb
|
142
196
|
- lib/live_ast/ast_eval.rb
|
143
197
|
- lib/live_ast/ast_load.rb
|
@@ -150,6 +204,7 @@ files:
|
|
150
204
|
- lib/live_ast/linker.rb
|
151
205
|
- lib/live_ast/loader.rb
|
152
206
|
- lib/live_ast/reader.rb
|
207
|
+
- lib/live_ast/replace_caller.rb
|
153
208
|
- lib/live_ast/replace_eval.rb
|
154
209
|
- lib/live_ast/replace_load.rb
|
155
210
|
- lib/live_ast/replace_raise.rb
|
@@ -159,61 +214,15 @@ files:
|
|
159
214
|
- lib/live_ast/to_ast.rb
|
160
215
|
- lib/live_ast/to_ruby.rb
|
161
216
|
- lib/live_ast/version.rb
|
162
|
-
- test/alias_test.rb
|
163
|
-
- test/ast_eval/ast_eval_test.rb
|
164
|
-
- test/ast_load/ast_load_test.rb
|
165
|
-
- test/attr_test.rb
|
166
|
-
- test/backtrace_test.rb
|
167
|
-
- test/base/noninvasive_test.rb
|
168
|
-
- test/base/reload_test.rb
|
169
|
-
- test/covert_define_method_test.rb
|
170
|
-
- test/def_test.rb
|
171
|
-
- test/define_method_test.rb
|
172
|
-
- test/define_singleton_method_test.rb
|
173
|
-
- test/encoding_test.rb
|
174
|
-
- test/encoding_test/bad.rb
|
175
|
-
- test/encoding_test/cp932.rb
|
176
|
-
- test/encoding_test/default.rb
|
177
|
-
- test/encoding_test/eucjp.rb
|
178
|
-
- test/encoding_test/koi8.rb
|
179
|
-
- test/encoding_test/koi8_shebang.rb
|
180
|
-
- test/encoding_test/koi8_with_utf8bom.rb
|
181
|
-
- test/encoding_test/usascii.rb
|
182
|
-
- test/encoding_test/usascii_with_utf8bom.rb
|
183
|
-
- test/encoding_test/utf8.rb
|
184
|
-
- test/encoding_test/utf8bom.rb
|
185
|
-
- test/encoding_test/utf8bom_only.rb
|
186
|
-
- test/encoding_test/utf8dos.rb
|
187
|
-
- test/encoding_test/utf8mac.rb
|
188
|
-
- test/encoding_test/utf8mac_alt.rb
|
189
|
-
- test/encoding_test/utf8unix.rb
|
190
|
-
- test/error_test.rb
|
191
|
-
- test/eval_test.rb
|
192
|
-
- test/flush_cache_test.rb
|
193
|
-
- test/full/ast_reload_test.rb
|
194
|
-
- test/full/replace_eval_test.rb
|
195
|
-
- test/irb_test.rb
|
196
|
-
- test/lambda_test.rb
|
197
|
-
- test/load_path_test.rb
|
198
|
-
- test/load_test.rb
|
199
|
-
- test/main.rb
|
200
|
-
- test/nested_test.rb
|
201
|
-
- test/readme_test.rb
|
202
|
-
- test/recursive_eval_test.rb
|
203
|
-
- test/redefine_method_test.rb
|
204
|
-
- test/rubygems_test.rb
|
205
|
-
- test/rubyspec_test.rb
|
206
|
-
- test/singleton_test.rb
|
207
|
-
- test/stdlib_test.rb
|
208
|
-
- test/thread_test.rb
|
209
|
-
- test/to_ast/to_ast_feature_test.rb
|
210
|
-
- test/to_ruby/to_ruby_feature_test.rb
|
211
|
-
- test/to_ruby/to_ruby_test.rb
|
212
217
|
homepage: https://github.com/mvz/live_ast
|
213
218
|
licenses:
|
214
219
|
- MIT
|
215
|
-
metadata:
|
216
|
-
|
220
|
+
metadata:
|
221
|
+
homepage_uri: https://github.com/mvz/live_ast
|
222
|
+
source_code_uri: https://github.com/mvz/live_ast
|
223
|
+
changelog_uri: https://github.com/mvz/live_ast/blob/master/CHANGES.rdoc
|
224
|
+
rubygems_mfa_required: 'true'
|
225
|
+
post_install_message:
|
217
226
|
rdoc_options:
|
218
227
|
- "--main"
|
219
228
|
- README.rdoc
|
@@ -234,58 +243,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
234
243
|
- !ruby/object:Gem::Version
|
235
244
|
version: '0'
|
236
245
|
requirements: []
|
237
|
-
rubygems_version: 3.
|
238
|
-
signing_key:
|
246
|
+
rubygems_version: 3.3.3
|
247
|
+
signing_key:
|
239
248
|
specification_version: 4
|
240
249
|
summary: Live abstract syntax trees of methods and procs.
|
241
|
-
test_files:
|
242
|
-
- test/alias_test.rb
|
243
|
-
- test/full/ast_reload_test.rb
|
244
|
-
- test/full/replace_eval_test.rb
|
245
|
-
- test/eval_test.rb
|
246
|
-
- test/load_path_test.rb
|
247
|
-
- test/readme_test.rb
|
248
|
-
- test/stdlib_test.rb
|
249
|
-
- test/encoding_test/koi8_shebang.rb
|
250
|
-
- test/encoding_test/utf8dos.rb
|
251
|
-
- test/encoding_test/koi8.rb
|
252
|
-
- test/encoding_test/eucjp.rb
|
253
|
-
- test/encoding_test/utf8bom.rb
|
254
|
-
- test/encoding_test/utf8bom_only.rb
|
255
|
-
- test/encoding_test/cp932.rb
|
256
|
-
- test/encoding_test/usascii.rb
|
257
|
-
- test/encoding_test/utf8.rb
|
258
|
-
- test/encoding_test/usascii_with_utf8bom.rb
|
259
|
-
- test/encoding_test/utf8mac_alt.rb
|
260
|
-
- test/encoding_test/default.rb
|
261
|
-
- test/encoding_test/koi8_with_utf8bom.rb
|
262
|
-
- test/encoding_test/utf8unix.rb
|
263
|
-
- test/encoding_test/utf8mac.rb
|
264
|
-
- test/encoding_test/bad.rb
|
265
|
-
- test/to_ruby/to_ruby_test.rb
|
266
|
-
- test/to_ruby/to_ruby_feature_test.rb
|
267
|
-
- test/nested_test.rb
|
268
|
-
- test/singleton_test.rb
|
269
|
-
- test/define_singleton_method_test.rb
|
270
|
-
- test/irb_test.rb
|
271
|
-
- test/attr_test.rb
|
272
|
-
- test/lambda_test.rb
|
273
|
-
- test/load_test.rb
|
274
|
-
- test/base/noninvasive_test.rb
|
275
|
-
- test/base/reload_test.rb
|
276
|
-
- test/encoding_test.rb
|
277
|
-
- test/rubyspec_test.rb
|
278
|
-
- test/main.rb
|
279
|
-
- test/define_method_test.rb
|
280
|
-
- test/error_test.rb
|
281
|
-
- test/rubygems_test.rb
|
282
|
-
- test/ast_load/ast_load_test.rb
|
283
|
-
- test/def_test.rb
|
284
|
-
- test/recursive_eval_test.rb
|
285
|
-
- test/ast_eval/ast_eval_test.rb
|
286
|
-
- test/flush_cache_test.rb
|
287
|
-
- test/thread_test.rb
|
288
|
-
- test/redefine_method_test.rb
|
289
|
-
- test/backtrace_test.rb
|
290
|
-
- test/covert_define_method_test.rb
|
291
|
-
- test/to_ast/to_ast_feature_test.rb
|
250
|
+
test_files: []
|
data/Rakefile
DELETED
@@ -1,62 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require "rake/clean"
|
4
|
-
require "bundler/gem_tasks"
|
5
|
-
require "rake/testtask"
|
6
|
-
require "rdoc/task"
|
7
|
-
|
8
|
-
namespace :test do
|
9
|
-
desc "run tests"
|
10
|
-
Rake::TestTask.new(:main) do |t|
|
11
|
-
t.libs = ["lib"]
|
12
|
-
t.ruby_opts += ["-w -Itest"]
|
13
|
-
t.test_files = FileList["test/*_test.rb"]
|
14
|
-
end
|
15
|
-
|
16
|
-
Rake::TestTask.new(:base) do |t|
|
17
|
-
t.libs = ["lib"]
|
18
|
-
t.ruby_opts += ["-w -Itest"]
|
19
|
-
t.test_files = FileList["test/base/*_test.rb"]
|
20
|
-
end
|
21
|
-
|
22
|
-
Rake::TestTask.new(:ast_load) do |t|
|
23
|
-
t.libs = ["lib"]
|
24
|
-
t.ruby_opts += ["-w -Itest"]
|
25
|
-
t.test_files = FileList["test/ast_load/*_test.rb"]
|
26
|
-
end
|
27
|
-
|
28
|
-
Rake::TestTask.new(:ast_eval) do |t|
|
29
|
-
t.libs = ["lib"]
|
30
|
-
t.ruby_opts += ["-w -Itest"]
|
31
|
-
t.test_files = FileList["test/ast_eval/*_test.rb"]
|
32
|
-
end
|
33
|
-
|
34
|
-
Rake::TestTask.new(:to_ast) do |t|
|
35
|
-
t.libs = ["lib"]
|
36
|
-
t.ruby_opts += ["-w -Itest"]
|
37
|
-
t.test_files = FileList["test/to_ast/*_test.rb"]
|
38
|
-
end
|
39
|
-
|
40
|
-
Rake::TestTask.new(:to_ruby) do |t|
|
41
|
-
t.libs = ["lib"]
|
42
|
-
t.ruby_opts += ["-w -Itest"]
|
43
|
-
t.test_files = FileList["test/to_ruby/*_test.rb"]
|
44
|
-
end
|
45
|
-
|
46
|
-
Rake::TestTask.new(:full) do |t|
|
47
|
-
t.libs = ["lib"]
|
48
|
-
t.ruby_opts += ["-w -Itest"]
|
49
|
-
t.test_files = FileList["test/full/*_test.rb"]
|
50
|
-
end
|
51
|
-
|
52
|
-
task all: [:main, :base, :ast_load, :to_ast, :to_ruby, :full]
|
53
|
-
end
|
54
|
-
|
55
|
-
RDoc::Task.new(:rdoc) do |t|
|
56
|
-
t.main = "README.rdoc"
|
57
|
-
t.title = "LiveAST: Live Abstract Syntax Trees"
|
58
|
-
t.options += ["--visibility", "private"]
|
59
|
-
t.rdoc_files.include("README.rdoc", "CHANGES.rdoc", "lib")
|
60
|
-
end
|
61
|
-
|
62
|
-
task default: "test:all"
|
data/devel/levitate.rb
DELETED
@@ -1,184 +0,0 @@
|
|
1
|
-
class Levitate
|
2
|
-
#### utility for instance and class
|
3
|
-
module Util
|
4
|
-
def ruby_bin
|
5
|
-
require 'rbconfig'
|
6
|
-
|
7
|
-
name = File.join(
|
8
|
-
RbConfig::CONFIG["bindir"],
|
9
|
-
RbConfig::CONFIG["RUBY_INSTALL_NAME"]
|
10
|
-
)
|
11
|
-
|
12
|
-
if RbConfig::CONFIG["host"] =~ %r!(mswin|cygwin|mingw)! and
|
13
|
-
File.basename(name) !~ %r!\.(exe|com|bat|cmd)\Z!i
|
14
|
-
name + RbConfig::CONFIG["EXEEXT"]
|
15
|
-
else
|
16
|
-
name
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
|
-
def ruby_command
|
21
|
-
[ruby_bin] + Levitate.ruby_opts.to_a
|
22
|
-
end
|
23
|
-
|
24
|
-
def ruby_command_string
|
25
|
-
ruby_command.join(" ")
|
26
|
-
end
|
27
|
-
|
28
|
-
def run(*args)
|
29
|
-
cmd = ruby_command + args
|
30
|
-
unless system(*cmd)
|
31
|
-
cmd_str = cmd.map { |t| "'#{t}'" }.join(", ")
|
32
|
-
raise "system(#{cmd_str}) failed with status #{$?.exitstatus}"
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
def run_each_file(*files)
|
37
|
-
files.each { |file|
|
38
|
-
run("-w", file)
|
39
|
-
}
|
40
|
-
end
|
41
|
-
|
42
|
-
def run_code_and_capture(code)
|
43
|
-
IO.popen(ruby_command_string, "r+") { |pipe|
|
44
|
-
pipe.print(code)
|
45
|
-
pipe.flush
|
46
|
-
pipe.close_write
|
47
|
-
pipe.read
|
48
|
-
}
|
49
|
-
end
|
50
|
-
|
51
|
-
def run_file_and_capture(file)
|
52
|
-
unless File.file? file
|
53
|
-
raise "file does not exist: `#{file}'"
|
54
|
-
end
|
55
|
-
IO.popen(ruby_command_string + " " + file, "r") { |pipe|
|
56
|
-
pipe.read
|
57
|
-
}
|
58
|
-
end
|
59
|
-
|
60
|
-
def with_warnings(value = true)
|
61
|
-
previous = $VERBOSE
|
62
|
-
$VERBOSE = value
|
63
|
-
begin
|
64
|
-
yield
|
65
|
-
ensure
|
66
|
-
$VERBOSE = previous
|
67
|
-
end
|
68
|
-
end
|
69
|
-
|
70
|
-
def no_warnings(&block)
|
71
|
-
with_warnings(nil, &block)
|
72
|
-
end
|
73
|
-
|
74
|
-
def to_camel_case(str)
|
75
|
-
str.split('_').map { |t| t.capitalize }.join
|
76
|
-
end
|
77
|
-
|
78
|
-
def write_file(file)
|
79
|
-
contents = yield
|
80
|
-
File.open(file, "wb") { |out|
|
81
|
-
out.print(contents)
|
82
|
-
}
|
83
|
-
contents
|
84
|
-
end
|
85
|
-
|
86
|
-
def instance_exec2(obj, *args, &block)
|
87
|
-
method_name = ["_", obj.object_id, "_", Thread.current.object_id].join
|
88
|
-
(class << obj; self; end).class_eval do
|
89
|
-
define_method method_name, &block
|
90
|
-
begin
|
91
|
-
obj.send(method_name, *args)
|
92
|
-
ensure
|
93
|
-
remove_method method_name
|
94
|
-
end
|
95
|
-
end
|
96
|
-
end
|
97
|
-
end
|
98
|
-
extend Util
|
99
|
-
include Util
|
100
|
-
|
101
|
-
#### public helpers for testing
|
102
|
-
|
103
|
-
class << self
|
104
|
-
def run_doc_code(code, expected, index, instance, &block)
|
105
|
-
lib = File.expand_path(File.dirname(__FILE__) + "/../lib")
|
106
|
-
header = %{
|
107
|
-
$LOAD_PATH.unshift "#{lib}"
|
108
|
-
begin
|
109
|
-
}
|
110
|
-
footer = %{
|
111
|
-
rescue Exception => __levitate_exception
|
112
|
-
puts "raises \#{__levitate_exception.class}"
|
113
|
-
end
|
114
|
-
}
|
115
|
-
final_code = header + code + footer
|
116
|
-
|
117
|
-
# Sometimes code is required to be inside a file.
|
118
|
-
actual = nil
|
119
|
-
require 'tempfile'
|
120
|
-
Tempfile.open("run-rdoc-code") { |temp_file|
|
121
|
-
temp_file.print(final_code)
|
122
|
-
temp_file.close
|
123
|
-
actual = run_file_and_capture(temp_file.path).chomp
|
124
|
-
}
|
125
|
-
|
126
|
-
instance_exec2(instance, expected, actual, index, &block)
|
127
|
-
end
|
128
|
-
|
129
|
-
def run_doc_section(file, section, instance, &block)
|
130
|
-
contents = File.read(file)
|
131
|
-
re = %r!^=+[ \t]#{Regexp.quote(section)}.*?\n(.*?)^=!m
|
132
|
-
if (section_contents = contents[re, 1])
|
133
|
-
index = 0
|
134
|
-
section_contents.scan(%r!^( \S.*?)(?=(^\S|\Z))!m) { |indented, unused|
|
135
|
-
code_sections = indented.split(%r!^ \#\#\#\# output:\s*$!)
|
136
|
-
code, expected = (
|
137
|
-
case code_sections.size
|
138
|
-
when 1
|
139
|
-
[indented, indented.scan(%r!\# => (.*?)\n!).flatten.join("\n")]
|
140
|
-
when 2
|
141
|
-
code_sections
|
142
|
-
else
|
143
|
-
raise "parse error"
|
144
|
-
end
|
145
|
-
)
|
146
|
-
code.gsub!(/^\s*%.*$/, "") # ignore shell command examples
|
147
|
-
run_doc_code(code, expected, index, instance, &block)
|
148
|
-
index += 1
|
149
|
-
}
|
150
|
-
else
|
151
|
-
raise "couldn't find section `#{section}' of `#{file}'"
|
152
|
-
end
|
153
|
-
end
|
154
|
-
|
155
|
-
def doc_to_test(file, *sections, &block)
|
156
|
-
levitate = self
|
157
|
-
klass = Class.new MiniTest::Test do
|
158
|
-
sections.each { |section|
|
159
|
-
define_method "test_#{file}_#{section}" do
|
160
|
-
if block
|
161
|
-
levitate.run_doc_section(file, section, self, &block)
|
162
|
-
else
|
163
|
-
levitate.run_doc_section(file, section, self) {
|
164
|
-
|expected, actual, index|
|
165
|
-
assert_equal expected, actual
|
166
|
-
}
|
167
|
-
end
|
168
|
-
end
|
169
|
-
}
|
170
|
-
end
|
171
|
-
Object.const_set("Test#{file}".gsub(".", ""), klass)
|
172
|
-
end
|
173
|
-
|
174
|
-
def ruby_opts
|
175
|
-
@ruby_opts ||= []
|
176
|
-
end
|
177
|
-
attr_writer :ruby_opts
|
178
|
-
end
|
179
|
-
end
|
180
|
-
|
181
|
-
lambda do
|
182
|
-
config = File.join(File.dirname(__FILE__), "levitate_config.rb")
|
183
|
-
require config if File.file? config
|
184
|
-
end.call
|
data/devel/levitate_config.rb
DELETED
data/test/alias_test.rb
DELETED
@@ -1,25 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require_relative "main"
|
4
|
-
|
5
|
-
class AliasTest < RegularTest
|
6
|
-
class A
|
7
|
-
def f
|
8
|
-
"A#f"
|
9
|
-
end
|
10
|
-
|
11
|
-
alias g f
|
12
|
-
end
|
13
|
-
|
14
|
-
def test_alias_unbound_method
|
15
|
-
expected = no_arg_def(:f, "A#f")
|
16
|
-
assert_equal expected, A.instance_method(:f).to_ast
|
17
|
-
assert_equal expected, A.instance_method(:g).to_ast
|
18
|
-
end
|
19
|
-
|
20
|
-
def test_alias_method
|
21
|
-
expected = no_arg_def(:f, "A#f")
|
22
|
-
assert_equal expected, A.new.method(:f).to_ast
|
23
|
-
assert_equal expected, A.new.method(:g).to_ast
|
24
|
-
end
|
25
|
-
end
|