live_ast 0.6.1 → 0.6.2
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.
- data/CHANGES.rdoc +5 -0
- data/README.rdoc +3 -0
- data/devel/levitate.rb +11 -5
- data/lib/live_ast/base.rb +1 -1
- data/lib/live_ast/irb_spy.rb +25 -62
- data/lib/live_ast/linker.rb +0 -3
- data/lib/live_ast/version.rb +1 -1
- data/test/irb_test.rb +5 -18
- metadata +3 -2
data/CHANGES.rdoc
CHANGED
data/README.rdoc
CHANGED
@@ -162,6 +162,9 @@ or blocks in order for its AST to be available.
|
|
162
162
|
a = lambda { } ; b = lambda { }
|
163
163
|
a.to_ast # => raises LiveAST::MultipleDefinitionsOnSameLineError
|
164
164
|
|
165
|
+
Code given to the <code>-e</code> command-line switch is not
|
166
|
+
AST-accessible.
|
167
|
+
|
165
168
|
----
|
166
169
|
|
167
170
|
== <em>Technical Issues</em>
|
data/devel/levitate.rb
CHANGED
@@ -250,7 +250,7 @@ class Levitate
|
|
250
250
|
include Util
|
251
251
|
|
252
252
|
def initialize(gem_name)
|
253
|
-
$LOAD_PATH.unshift File.dirname(__FILE__) + '/../lib'
|
253
|
+
$LOAD_PATH.unshift File.expand_path(File.dirname(__FILE__) + '/../lib')
|
254
254
|
|
255
255
|
require 'rubygems/package_task'
|
256
256
|
|
@@ -402,7 +402,7 @@ class Levitate
|
|
402
402
|
end
|
403
403
|
|
404
404
|
attribute :extra_rdoc_files do
|
405
|
-
File.file?(
|
405
|
+
[readme_file, history_file].select { |file| File.file?(file) }
|
406
406
|
end
|
407
407
|
|
408
408
|
attribute :browser do
|
@@ -478,9 +478,11 @@ class Levitate
|
|
478
478
|
begin
|
479
479
|
sections[send("#{section}_section")].
|
480
480
|
gsub("\n", " ").
|
481
|
-
split(%r!\.\s
|
481
|
+
split(%r!\.\s+!m).
|
482
482
|
first(send("#{section}_sentences")).
|
483
|
-
join(".
|
483
|
+
join(". ").
|
484
|
+
concat(".").
|
485
|
+
sub(%r!\.+\Z!, ".")
|
484
486
|
rescue
|
485
487
|
"FIXME: #{section}"
|
486
488
|
end
|
@@ -749,7 +751,11 @@ class Levitate
|
|
749
751
|
|
750
752
|
def define_changes
|
751
753
|
task :changes do
|
752
|
-
|
754
|
+
if File.read(history_file).index version
|
755
|
+
raise "version not updated"
|
756
|
+
end
|
757
|
+
|
758
|
+
header = "\n\n== Version #{version}\n\n"
|
753
759
|
|
754
760
|
bullets = `git log --format=%s #{last_release}..HEAD`.lines.map { |line|
|
755
761
|
"* #{line}"
|
data/lib/live_ast/base.rb
CHANGED
@@ -5,7 +5,7 @@ require 'live_ast/evaler'
|
|
5
5
|
require 'live_ast/linker'
|
6
6
|
require 'live_ast/loader'
|
7
7
|
require 'live_ast/error'
|
8
|
-
require 'live_ast/irb_spy' if defined?(IRB)
|
8
|
+
require 'live_ast/irb_spy' if defined?(IRB)
|
9
9
|
|
10
10
|
module LiveAST
|
11
11
|
NATIVE_EVAL = Kernel.method(:eval) #:nodoc:
|
data/lib/live_ast/irb_spy.rb
CHANGED
@@ -1,74 +1,37 @@
|
|
1
|
-
#
|
2
|
-
# Some hacks to get LiveAST working with IRB.
|
3
|
-
#
|
4
|
-
# (1) Because Readline::HISTORY is empty at startup, we count the
|
5
|
-
# lines of the history file in order to determine where the new
|
6
|
-
# history begins for this IRB session.
|
7
|
-
#
|
8
|
-
# (2) IRB::ReadlineInputMethod#gets discards empty input lines,
|
9
|
-
# causing Readline::HISTORY to be out of sync with the current line
|
10
|
-
# number, thereby fouling up source_location. We redefine #gets to
|
11
|
-
# keep empty lines.
|
12
|
-
#
|
13
1
|
|
14
2
|
module LiveAST
|
15
3
|
module IRBSpy
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
grow = 0
|
21
|
-
begin
|
22
|
-
code = history[start..(start + grow)].join("\n")
|
23
|
-
LiveAST.parser.new.parse(code) or raise "#{LiveAST.parser} error"
|
24
|
-
rescue
|
25
|
-
grow += 1
|
26
|
-
retry if start + grow < history.size
|
27
|
-
raise
|
28
|
-
end
|
29
|
-
code
|
4
|
+
def self.code_at(line)
|
5
|
+
unless defined?(@history)
|
6
|
+
raise NotImplementedError,
|
7
|
+
"LiveAST cannot access history for this IRB input method"
|
30
8
|
end
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
history_file = File.expand_path(history_file)
|
40
|
-
end
|
41
|
-
history_file = IRB.rc_file("_history") unless history_file
|
42
|
-
|
43
|
-
if File.exist?(history_file)
|
44
|
-
File.readlines(history_file).size
|
45
|
-
else
|
46
|
-
0
|
47
|
-
end
|
48
|
-
else
|
49
|
-
0
|
50
|
-
end
|
9
|
+
grow = 0
|
10
|
+
begin
|
11
|
+
code = @history[line..(line + grow)].join
|
12
|
+
LiveAST.parser.new.parse(code) or raise "#{LiveAST.parser} error"
|
13
|
+
rescue
|
14
|
+
grow += 1
|
15
|
+
retry if line + grow < @history.size
|
16
|
+
raise
|
51
17
|
end
|
18
|
+
code
|
52
19
|
end
|
53
|
-
|
54
|
-
@history_start = find_history_start
|
55
20
|
end
|
56
21
|
end
|
57
22
|
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
@eof = true
|
71
|
-
l
|
23
|
+
[
|
24
|
+
IRB::StdioInputMethod,
|
25
|
+
defined?(IRB::ReadlineInputMethod) ? IRB::ReadlineInputMethod : nil,
|
26
|
+
].compact.each do |klass|
|
27
|
+
klass.module_eval do
|
28
|
+
alias_method :live_ast_original_gets, :gets
|
29
|
+
def gets
|
30
|
+
live_ast_original_gets.tap do
|
31
|
+
if defined?(@line)
|
32
|
+
LiveAST::IRBSpy.instance_variable_set(:@history, @line)
|
33
|
+
end
|
34
|
+
end
|
72
35
|
end
|
73
36
|
end
|
74
37
|
end
|
data/lib/live_ast/linker.rb
CHANGED
@@ -83,9 +83,6 @@ module LiveAST
|
|
83
83
|
if !cache and !file.index(REVISION_TOKEN)
|
84
84
|
_, cache =
|
85
85
|
if defined?(IRB) and file == "(irb)"
|
86
|
-
unless defined? Readline::HISTORY
|
87
|
-
raise "LiveAST requires readline enabled in irb."
|
88
|
-
end
|
89
86
|
new_cache(IRBSpy.code_at(line), file, line, false)
|
90
87
|
else
|
91
88
|
#
|
data/lib/live_ast/version.rb
CHANGED
data/test/irb_test.rb
CHANGED
@@ -10,28 +10,15 @@ class IRBTest < RegularTest
|
|
10
10
|
end
|
11
11
|
end
|
12
12
|
|
13
|
-
def test_readline_not_present
|
14
|
-
with_module(Object, :IRB) do
|
15
|
-
error = assert_raises RuntimeError do
|
16
|
-
LiveAST::Linker.fetch_from_cache("(irb)", 33)
|
17
|
-
end
|
18
|
-
assert_match(/readline enabled/, error.message)
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
13
|
def test_irb
|
23
14
|
with_module(Object, :IRB) do
|
24
|
-
with_module(
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
def self.code_at(line)
|
29
|
-
"def f ; end"
|
30
|
-
end
|
31
|
-
end
|
32
|
-
LiveAST::Linker.fetch_from_cache("(irb)", 1)
|
15
|
+
with_module(LiveAST, :IRBSpy) do
|
16
|
+
LiveAST::IRBSpy.class_eval do
|
17
|
+
def self.code_at(line)
|
18
|
+
"def f ; end"
|
33
19
|
end
|
34
20
|
end
|
21
|
+
LiveAST::Linker.fetch_from_cache("(irb)", 1)
|
35
22
|
end
|
36
23
|
end
|
37
24
|
end
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: live_ast
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.6.
|
5
|
+
version: 0.6.2
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- James M. Lawrence
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2011-03-
|
13
|
+
date: 2011-03-09 00:00:00 -05:00
|
14
14
|
default_executable:
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
@@ -33,6 +33,7 @@ extensions: []
|
|
33
33
|
|
34
34
|
extra_rdoc_files:
|
35
35
|
- README.rdoc
|
36
|
+
- CHANGES.rdoc
|
36
37
|
files:
|
37
38
|
- CHANGES.rdoc
|
38
39
|
- README.rdoc
|