mvz-live_ast 2.0.0 → 2.1.1
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 +9 -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 +85 -120
- 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: d2f6177411755421ed4f570258386498d1fb2f1e4215f63e29742047b81140b5
|
4
|
+
data.tar.gz: 8b963f0d5b60cae5977e22c17e7acedff8fdcfeba9437fa0f5ed4c5b963e64ba
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b6747a62bfcc46aa05ab45612b2b80831936f0b4bce3ba439f1ef0fe5468ddaaa09771e0c9b8f324c5e0ab49048dca50a13186a19c4016f8678b10ed87474841
|
7
|
+
data.tar.gz: fbf59148663fe10cadfa3bb127c0c4df7c93349b662f72239dbaaf78691fb43e38a812ce9a9d7ea4607b21da4a923671985cb66b867011207401e0b9426adba2
|
data/CHANGES.rdoc
CHANGED
@@ -1,5 +1,14 @@
|
|
1
1
|
= live_ast Changes
|
2
2
|
|
3
|
+
== Version 2.1.1
|
4
|
+
|
5
|
+
* Loosen dependency on ruby2ruby
|
6
|
+
|
7
|
+
== Version 2.1.0
|
8
|
+
|
9
|
+
* Add support for Ruby 3.1
|
10
|
+
* Add `live_ast/replace_caller` similar to `replace_raise`
|
11
|
+
|
3
12
|
== Version 2.0.0
|
4
13
|
|
5
14
|
* Breaking change: Use bindings gem instead of binding_of_caller.
|
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,30 +1,36 @@
|
|
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.1
|
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-10-14 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: ruby2ruby
|
16
16
|
requirement: !ruby/object:Gem::Requirement
|
17
17
|
requirements:
|
18
|
-
- - "
|
18
|
+
- - ">="
|
19
|
+
- !ruby/object:Gem::Version
|
20
|
+
version: '2.4'
|
21
|
+
- - "<"
|
19
22
|
- !ruby/object:Gem::Version
|
20
|
-
version: 2.
|
23
|
+
version: '2.6'
|
21
24
|
type: :runtime
|
22
25
|
prerelease: false
|
23
26
|
version_requirements: !ruby/object:Gem::Requirement
|
24
27
|
requirements:
|
25
|
-
- - "
|
28
|
+
- - ">="
|
26
29
|
- !ruby/object:Gem::Version
|
27
|
-
version: 2.4
|
30
|
+
version: '2.4'
|
31
|
+
- - "<"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '2.6'
|
28
34
|
- !ruby/object:Gem::Dependency
|
29
35
|
name: ruby_parser
|
30
36
|
requirement: !ruby/object:Gem::Requirement
|
@@ -81,6 +87,20 @@ dependencies:
|
|
81
87
|
- - "~>"
|
82
88
|
- !ruby/object:Gem::Version
|
83
89
|
version: '13.0'
|
90
|
+
- !ruby/object:Gem::Dependency
|
91
|
+
name: rake-manifest
|
92
|
+
requirement: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: 0.2.0
|
97
|
+
type: :development
|
98
|
+
prerelease: false
|
99
|
+
version_requirements: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - "~>"
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: 0.2.0
|
84
104
|
- !ruby/object:Gem::Dependency
|
85
105
|
name: rdoc
|
86
106
|
requirement: !ruby/object:Gem::Requirement
|
@@ -101,32 +121,75 @@ dependencies:
|
|
101
121
|
requirements:
|
102
122
|
- - "~>"
|
103
123
|
- !ruby/object:Gem::Version
|
104
|
-
version: 1.
|
124
|
+
version: '1.25'
|
125
|
+
type: :development
|
126
|
+
prerelease: false
|
127
|
+
version_requirements: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - "~>"
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '1.25'
|
132
|
+
- !ruby/object:Gem::Dependency
|
133
|
+
name: rubocop-minitest
|
134
|
+
requirement: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - "~>"
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: 0.22.0
|
139
|
+
type: :development
|
140
|
+
prerelease: false
|
141
|
+
version_requirements: !ruby/object:Gem::Requirement
|
142
|
+
requirements:
|
143
|
+
- - "~>"
|
144
|
+
- !ruby/object:Gem::Version
|
145
|
+
version: 0.22.0
|
146
|
+
- !ruby/object:Gem::Dependency
|
147
|
+
name: rubocop-packaging
|
148
|
+
requirement: !ruby/object:Gem::Requirement
|
149
|
+
requirements:
|
150
|
+
- - "~>"
|
151
|
+
- !ruby/object:Gem::Version
|
152
|
+
version: 0.5.0
|
105
153
|
type: :development
|
106
154
|
prerelease: false
|
107
155
|
version_requirements: !ruby/object:Gem::Requirement
|
108
156
|
requirements:
|
109
157
|
- - "~>"
|
110
158
|
- !ruby/object:Gem::Version
|
111
|
-
version:
|
159
|
+
version: 0.5.0
|
112
160
|
- !ruby/object:Gem::Dependency
|
113
161
|
name: rubocop-performance
|
114
162
|
requirement: !ruby/object:Gem::Requirement
|
115
163
|
requirements:
|
116
164
|
- - "~>"
|
117
165
|
- !ruby/object:Gem::Version
|
118
|
-
version: 1.
|
166
|
+
version: '1.13'
|
167
|
+
type: :development
|
168
|
+
prerelease: false
|
169
|
+
version_requirements: !ruby/object:Gem::Requirement
|
170
|
+
requirements:
|
171
|
+
- - "~>"
|
172
|
+
- !ruby/object:Gem::Version
|
173
|
+
version: '1.13'
|
174
|
+
- !ruby/object:Gem::Dependency
|
175
|
+
name: rubocop-rake
|
176
|
+
requirement: !ruby/object:Gem::Requirement
|
177
|
+
requirements:
|
178
|
+
- - "~>"
|
179
|
+
- !ruby/object:Gem::Version
|
180
|
+
version: 0.6.0
|
119
181
|
type: :development
|
120
182
|
prerelease: false
|
121
183
|
version_requirements: !ruby/object:Gem::Requirement
|
122
184
|
requirements:
|
123
185
|
- - "~>"
|
124
186
|
- !ruby/object:Gem::Version
|
125
|
-
version:
|
187
|
+
version: 0.6.0
|
126
188
|
description: |2
|
127
189
|
LiveAST enables a program to find the ASTs of objects created by dynamically
|
128
190
|
generated code.
|
129
|
-
email:
|
191
|
+
email:
|
192
|
+
- matijs@matijs.net
|
130
193
|
executables: []
|
131
194
|
extensions: []
|
132
195
|
extra_rdoc_files:
|
@@ -135,9 +198,6 @@ extra_rdoc_files:
|
|
135
198
|
files:
|
136
199
|
- CHANGES.rdoc
|
137
200
|
- README.rdoc
|
138
|
-
- Rakefile
|
139
|
-
- devel/levitate.rb
|
140
|
-
- devel/levitate_config.rb
|
141
201
|
- lib/live_ast.rb
|
142
202
|
- lib/live_ast/ast_eval.rb
|
143
203
|
- lib/live_ast/ast_load.rb
|
@@ -150,6 +210,7 @@ files:
|
|
150
210
|
- lib/live_ast/linker.rb
|
151
211
|
- lib/live_ast/loader.rb
|
152
212
|
- lib/live_ast/reader.rb
|
213
|
+
- lib/live_ast/replace_caller.rb
|
153
214
|
- lib/live_ast/replace_eval.rb
|
154
215
|
- lib/live_ast/replace_load.rb
|
155
216
|
- lib/live_ast/replace_raise.rb
|
@@ -159,61 +220,15 @@ files:
|
|
159
220
|
- lib/live_ast/to_ast.rb
|
160
221
|
- lib/live_ast/to_ruby.rb
|
161
222
|
- 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
223
|
homepage: https://github.com/mvz/live_ast
|
213
224
|
licenses:
|
214
225
|
- MIT
|
215
|
-
metadata:
|
216
|
-
|
226
|
+
metadata:
|
227
|
+
homepage_uri: https://github.com/mvz/live_ast
|
228
|
+
source_code_uri: https://github.com/mvz/live_ast
|
229
|
+
changelog_uri: https://github.com/mvz/live_ast/blob/master/CHANGES.rdoc
|
230
|
+
rubygems_mfa_required: 'true'
|
231
|
+
post_install_message:
|
217
232
|
rdoc_options:
|
218
233
|
- "--main"
|
219
234
|
- README.rdoc
|
@@ -234,58 +249,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
234
249
|
- !ruby/object:Gem::Version
|
235
250
|
version: '0'
|
236
251
|
requirements: []
|
237
|
-
rubygems_version: 3.
|
238
|
-
signing_key:
|
252
|
+
rubygems_version: 3.3.7
|
253
|
+
signing_key:
|
239
254
|
specification_version: 4
|
240
255
|
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
|
256
|
+
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