live_ast 0.2.3 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGES.rdoc CHANGED
@@ -1,6 +1,19 @@
1
1
 
2
2
  = LiveAST ChangeLog
3
3
 
4
+ == Version 0.5.0
5
+
6
+ * use non-stupid parser plugin API
7
+
8
+ == Version 0.4.0 X yanked
9
+
10
+ * new parser plugin design to work around obscure autoload failure
11
+
12
+ == Version 0.3.0 X yanked
13
+
14
+ * parser is now an external plugin
15
+ * default parser has been moved to live_ast_ruby_parser gem
16
+
4
17
  == Version 0.2.3
5
18
 
6
19
  * fix a utf-8 BOM issue
data/MANIFEST CHANGED
@@ -11,7 +11,6 @@ lib/live_ast/error.rb
11
11
  lib/live_ast/evaler.rb
12
12
  lib/live_ast/linker.rb
13
13
  lib/live_ast/loader.rb
14
- lib/live_ast/parser.rb
15
14
  lib/live_ast/reader.rb
16
15
  lib/live_ast/replace_load.rb
17
16
  lib/live_ast/replace_raise.rb
@@ -44,13 +43,12 @@ test/flush_cache_test.rb
44
43
  test/lambda_test.rb
45
44
  test/load_path_test.rb
46
45
  test/load_test.rb
46
+ test/main.rb
47
47
  test/noninvasive_test.rb
48
48
  test/readme_test.rb
49
49
  test/recursive_eval_test.rb
50
50
  test/redefine_method_test.rb
51
51
  test/reload_test.rb
52
- test/shared/ast_generators.rb
53
- test/shared/main.rb
54
52
  test/stdlib_test.rb
55
53
  test/thread_test.rb
56
54
  test/to_ast_feature_test.rb
data/README.rdoc CHANGED
@@ -56,7 +56,8 @@ methods and procs.
56
56
 
57
57
  % gem install live_ast
58
58
 
59
- A manual install option is also available.
59
+ Or from inside an unpacked .tgz download, <code>rake install</code> /
60
+ <code>rake uninstall</code>.
60
61
 
61
62
  == Description
62
63
 
@@ -74,26 +75,30 @@ the parser outputs).
74
75
  Note that RubyParser does not currently support the newer Ruby 1.9
75
76
  syntax features (<code>Racc::ParseError</code> will be raised).
76
77
 
78
+ To use the Ripper parser instead, <code>gem install
79
+ live_ast_ripper</code> and then <code>require
80
+ 'live_ast_ripper'</code>.
81
+
77
82
  LiveAST is thread-safe.
78
83
 
79
84
  Ruby 1.9.2 or higher is required.
80
85
 
81
86
  == Links
82
87
 
83
- * Home: https://github.com/quix/live_ast
84
- * Documentation: http://quix.github.com/live_ast
88
+ * Home: http://quix.github.com/live_ast
85
89
  * Feature Requests, Bug Reports: http://github.com/quix/live_ast/issues
90
+ * Manual Download: http://github.com/quix/live_ast/archives/master
91
+ * Repository: http://github.com/quix/live_ast
86
92
 
87
93
  == +to_ruby+
88
94
 
89
- Although the ruby2ruby package (<code>gem install ruby2ruby</code>) is
90
- not an official dependency of LiveAST, for convenience
95
+ Although +ruby2ruby+ is not required by default,
91
96
 
92
97
  require 'live_ast/to_ruby'
93
98
 
94
- will require ruby2ruby and define the +to_ruby+ method for +Method+,
99
+ will require +ruby2ruby+ and define the +to_ruby+ method for +Method+,
95
100
  +UnboundMethod+, and +Proc+. These methods are one-liners which pass
96
- the extracted ASTs to ruby2ruby.
101
+ the extracted ASTs to +ruby2ruby+.
97
102
 
98
103
  require 'live_ast'
99
104
  require 'live_ast/to_ruby'
@@ -108,6 +113,9 @@ the extracted ASTs to ruby2ruby.
108
113
 
109
114
  p A.instance_method(:f).to_ruby # => "def f\n \"A#f\"\nend"
110
115
 
116
+ In general, +to_ruby+ will hook into the unparser provided by the
117
+ parser, if one is found.
118
+
111
119
  == Loading Source
112
120
 
113
121
  Objects created via +require+ and +load+ will be AST-accessible.
@@ -154,41 +162,30 @@ or blocks in order for its AST to be available.
154
162
  a = lambda { } ; b = lambda { }
155
163
  a.to_ast # => raises LiveAST::MultipleDefinitionsOnSameLineError
156
164
 
157
- == Manual Download/Install
158
-
159
- http://github.com/quix/live_ast/archives/master
165
+ ----
160
166
 
161
- % tar zxvf live_ast-x.x.x.tgz
162
- % cd live_ast-x.x.x
163
- % rake install
167
+ == <em>Technical Issues</em>
164
168
 
165
- To uninstall,
169
+ You can probably skip these next sections. Goodbye.
166
170
 
167
- % rake uninstall
171
+ ----
168
172
 
169
- == Technical Issues
170
-
171
- You can probably ignore this section. Goodbye.
172
-
173
- === Replacing the Parser
173
+ == Replacing the Parser
174
174
 
175
175
  Despite its name, LiveAST knows nothing about ASTs. It merely reports
176
- what it finds in the line-to-AST hash obtained from
177
- <code>LiveAST::Parser#parse</code>. Replacing the +Parser+ class is
178
- therefore easy: the only specification is that the +parse+ method
179
- return such a hash.
176
+ what it finds in the line-to-AST hash returned by the parser's +parse+
177
+ method. Replacing the parser class is therefore easy: the only
178
+ specification is that the +parse+ instance method return such a hash.
180
179
 
181
- Supposing your new <code>LiveAST::Parser</code> is defined in
182
- <code>/path/to/my/code/live_ast/parser.rb</code>,
180
+ To override the default parser,
183
181
 
184
- $LOAD_PATH.unshift '/path/to/my/code'
185
- require 'live_ast'
182
+ LiveAST.parser = YourParser
186
183
 
187
- will override LiveAST's default parser with your own. To test it,
188
- provide some examples of what your ASTs look like in
189
- <code>tests/shared/ast_generators.rb</code>.
184
+ To test it, provide some examples of what the ASTs look like in
185
+ <code>YourParser::TestForms</code>. See the +live_ast_ruby_parser+ gem
186
+ for reference.
190
187
 
191
- === Noninvasive Mode
188
+ == Noninvasive Mode
192
189
 
193
190
  For safety purposes, <code>require 'live_ast'</code> performs the
194
191
  invasive act of redefining +load+ (but not +require+); otherwise bad
@@ -210,7 +207,7 @@ To select features individually,
210
207
  require 'live_ast/ast_load' # define Kernel#ast_load (mentioned below)
211
208
  require 'live_ast/replace_load' # redefine Kernel#load
212
209
 
213
- === Noninvasive Interface
210
+ == Noninvasive Interface
214
211
 
215
212
  The following alternative interface is available.
216
213
 
@@ -235,7 +232,7 @@ The following alternative interface is available.
235
232
 
236
233
  ast_eval # => raises NameError
237
234
 
238
- === Reloading Files In Noninvasive Mode
235
+ == Reloading Files In Noninvasive Mode
239
236
 
240
237
  Use +ast_load+ or (equivalently) <code>LiveAST.load</code> when
241
238
  reloading an AST-aware file.
@@ -261,16 +258,16 @@ Realize that <code>foo.rb</code> may be referenced by an unknown
261
258
  number of methods and blocks. If the original <code>foo.rb</code>
262
259
  source were dumped in favor of the modified <code>foo.rb</code>, then
263
260
  an unknown number of those references would be invalidated (and some
264
- may even point to the wrong AST!).
261
+ may even point to the wrong AST).
265
262
 
266
263
  This is the reason for the caching that results in the stale AST
267
264
  above. It should now be clear why the default behavior of
268
265
  <code>require 'live_ast'</code> is to redefine +load+: doing so
269
266
  prevents this problem entirely. On the other hand if it is fully known
270
- where and when files are being reloaded (if at all) then there's no
271
- need for paranoia; the noninvasive option may be the most appropriate.
267
+ where files are being reloaded (if at all) then there's no need for
268
+ paranoia; the noninvasive option may be the most appropriate.
272
269
 
273
- === The Source/AST Cache
270
+ == The Source/AST Cache
274
271
 
275
272
  +ast_eval+ and +load+ cache all incoming code, while
276
273
  <code>require</code>d files are cached on a need-to-know basis. When
@@ -297,13 +294,13 @@ files will never be flushed. However a method redefined via +ast_eval+
297
294
  or +load+ is susceptible to +flush_cache+ even when its original
298
295
  definition pointed to a <code>require</code>d file.
299
296
 
300
- === About +require+
297
+ == About +require+
301
298
 
302
299
  No measures have been taken to detect manipulations of
303
300
  <code>$LOADED_FEATURES</code> which would cause +require+ to load the
304
301
  same file twice. Though +require+ <em>could</em> be replaced in
305
- similar fashion to +load+--heading off problems arising from such
306
- "raw" reloads--the overhead would seem inappropriate in relation to
302
+ similar fashion to +load+---heading off problems arising from such
303
+ "raw" reloads---the overhead would seem inappropriate in relation to
307
304
  the rarity of this case.
308
305
 
309
306
  Therefore the working assumption is that +require+ will load a file
@@ -311,10 +308,11 @@ only once. Furthermore, if a file has not been reloaded then it is
311
308
  assumed that the file is unmodified between the moment it is
312
309
  <code>require</code>d and the moment the first AST is pulled from it.
313
310
 
314
- === Backtraces
311
+ == Backtraces
315
312
 
316
313
  +ast_eval+ is meant to be compatible with +eval+. For instance the
317
- first line of the backtrace should be identical to that of +eval+:
314
+ first line of +ast_eval+'s backtrace should be identical to that of
315
+ +eval+:
318
316
 
319
317
  require 'live_ast'
320
318
 
@@ -329,17 +327,17 @@ Let's make a slight change,
329
327
  f.call
330
328
  # => test.rb|ast@a:3:in `block in <main>': boom (RuntimeError)
331
329
 
332
- Oh no! What the heck is '<code>|ast@a</code>' doing there? LiveAST's
330
+ What the heck is '<code>|ast@a</code>' doing there? LiveAST's
333
331
  implementation has just been exposed: each source input is assigned a
334
- unique key that enables a Ruby object to find its own definition.
332
+ unique key which enables a Ruby object to find its own definition.
335
333
 
336
334
  In the first case above, +ast_eval+ has removed the key from the
337
335
  exception backtrace. But in the second case there is no opportunity to
338
336
  remove it since +ast_eval+ has already returned.
339
337
 
340
- If you find this to be problem--for example if you cannot add a filter
341
- for the jump-to-location feature in your editor--then +raise+ may be
342
- redefined to strip these tokens,
338
+ If you find this to be problem---for example if you cannot add a
339
+ filter for the jump-to-location feature in your editor---then +raise+
340
+ may be redefined to strip these tokens,
343
341
 
344
342
  require 'live_ast'
345
343
  require 'live_ast/replace_raise'
@@ -355,7 +353,7 @@ by <code>1/0</code> comes from C). In principle this could be fixed by
355
353
  having the Ruby interpreter dynamically call +raise+.
356
354
 
357
355
 
358
- === Replacing +eval+
356
+ == Replacing +eval+
359
357
 
360
358
  If +ast_eval+ did not require a binding argument then it could assume
361
359
  the role of +eval+, thereby making LiveAST fully transparent to the
data/Rakefile CHANGED
@@ -1,21 +1,20 @@
1
1
  require_relative 'devel/jumpstart'
2
2
 
3
3
  Jumpstart.new "live_ast" do |s|
4
- s.developer "James M. Lawrence", "quixoticsycophant@gmail.com"
4
+ s.developers << ["James M. Lawrence", "quixoticsycophant@gmail.com"]
5
5
  s.github_user = "quix"
6
+ s.rubyforge_info = ["quix", "liveast"]
6
7
  s.camel_name = "LiveAST"
7
- s.rdoc_title = "LiveAST: Live Abstract Syntax Trees"
8
- s.extra_rdoc_options = ["-a"]
9
-
10
- # my code compensates for a ruby_parser bug; make this equal for now
11
- s.dependency("ruby_parser", "= 2.0.6")
12
8
 
9
+ s.rdoc_title = "LiveAST: Live Abstract Syntax Trees"
13
10
  s.rdoc_files = %w[
14
- README.rdoc
15
11
  lib/live_ast/ast_eval.rb
12
+ lib/live_ast/base.rb
16
13
  lib/live_ast/to_ast.rb
17
14
  lib/live_ast/to_ruby.rb
18
- lib/live_ast/base.rb
19
15
  lib/live_ast/version.rb
20
16
  ]
17
+ s.rdoc_options << "-a"
18
+
19
+ s.dependencies = ["live_ast_ruby_parser"]
21
20
  end