mvz-live_ast 2.0.0 → 2.1.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 +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
|