live_ast_ripper 0.5.1 → 0.6.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,12 @@
1
1
 
2
2
  = live_ast_ripper ChangeLog
3
3
 
4
+ == Version 0.6.0
5
+
6
+ * added new testing API methods
7
+ * fixed a recursion issue
8
+ * optimized
9
+
4
10
  == Version 0.5.1
5
11
 
6
12
  * doc fixes
data/MANIFEST CHANGED
@@ -2,6 +2,7 @@ CHANGES.rdoc
2
2
  MANIFEST
3
3
  README.rdoc
4
4
  Rakefile
5
- devel/jumpstart.rb
5
+ devel/levitate.rb
6
6
  lib/live_ast_ripper.rb
7
- lib/live_ast_ripper/test_forms.rb
7
+ lib/live_ast_ripper/test.rb
8
+ lib/live_ast_ripper/version.rb
data/README.rdoc CHANGED
@@ -3,7 +3,11 @@
3
3
 
4
4
  == Summary
5
5
 
6
- A Ripper-based parser plug-in for LiveAST.
6
+ A Ripper-based parser plugin for LiveAST.
7
+
8
+ == Install
9
+
10
+ % gem install live_ast_ripper
7
11
 
8
12
  == Links
9
13
 
data/Rakefile CHANGED
@@ -1,12 +1,14 @@
1
- require_relative 'devel/jumpstart'
1
+ require_relative 'devel/levitate'
2
2
 
3
- Jumpstart.new "live_ast_ripper" do |s|
3
+ Levitate.new "live_ast_ripper" do |s|
4
4
  s.developers << ["James M. Lawrence", "quixoticsycophant@gmail.com"]
5
5
  s.github_user = "quix"
6
- s.version = "0.5.1"
6
+ s.camel_name = "LiveASTRipper"
7
7
  s.description = s.summary
8
8
  end
9
9
 
10
- # testing done inside live_ast
11
10
  task :test do
11
+ puts "Testing is done with LiveAST test suite."
12
12
  end
13
+
14
+ task :default => :test
@@ -1,5 +1,5 @@
1
1
 
2
- class Jumpstart
2
+ class Levitate
3
3
  class Installer
4
4
  def initialize
5
5
  require 'fileutils'
@@ -816,8 +816,8 @@ class Jumpstart
816
816
  begin
817
817
  }
818
818
  footer = %{
819
- rescue Exception => __jumpstart_exception
820
- puts "raises \#{__jumpstart_exception.class}"
819
+ rescue Exception => __levitate_exception
820
+ puts "raises \#{__levitate_exception.class}"
821
821
  end
822
822
  }
823
823
  final_code = header + code + footer
@@ -860,15 +860,15 @@ class Jumpstart
860
860
  end
861
861
 
862
862
  def doc_to_spec(file, *sections, &block)
863
- jump = self
863
+ levitate = self
864
864
  describe file do
865
865
  sections.each { |section|
866
866
  describe "section `#{section}'" do
867
867
  it "should run as claimed" do
868
868
  if block
869
- jump.run_doc_section(file, section, self, &block)
869
+ levitate.run_doc_section(file, section, self, &block)
870
870
  else
871
- jump.run_doc_section(file, section, self) {
871
+ levitate.run_doc_section(file, section, self) {
872
872
  |expected, actual, index|
873
873
  actual.should == expected
874
874
  }
@@ -880,14 +880,14 @@ class Jumpstart
880
880
  end
881
881
 
882
882
  def doc_to_test(file, *sections, &block)
883
- jump = self
883
+ levitate = self
884
884
  klass = Class.new MiniTest::Unit::TestCase do
885
885
  sections.each { |section|
886
886
  define_method "test_#{file}_#{section}" do
887
887
  if block
888
- jump.run_doc_section(file, section, self, &block)
888
+ levitate.run_doc_section(file, section, self, &block)
889
889
  else
890
- jump.run_doc_section(file, section, self) {
890
+ levitate.run_doc_section(file, section, self) {
891
891
  |expected, actual, index|
892
892
  assert_equal expected, actual
893
893
  }
@@ -1,19 +1,15 @@
1
1
  require 'live_ast/base'
2
2
  require 'ripper'
3
3
 
4
+ #
5
+ # Ripper-based parser plugin for LiveAST.
6
+ #
4
7
  class LiveASTRipper
5
- class << self
6
- #
7
- # Whether to strip line/column and other personality traits.
8
- #
9
- # This is Ripper-specific -- not part of the live_ast API.
10
- #
11
- attr_accessor :steamroll
12
- end
13
-
14
8
  #
15
- # Returns a line --> sexp hash where sexp corresponds to the
16
- # method or block defined at the given line.
9
+ # Returns a line-to-sexp hash where sexp corresponds to the method
10
+ # or block defined at the given line.
11
+ #
12
+ # This method is the only requirement of a LiveAST parser plugin.
17
13
  #
18
14
  def parse(code)
19
15
  @defs = {}
@@ -22,78 +18,56 @@ class LiveASTRipper
22
18
  end
23
19
 
24
20
  def process(sexp)
25
- case sexp[0]
26
- when :def
27
- process_def(sexp)
28
- when :method_add_block
29
- process_method_add_block(sexp)
30
- else
31
- sexp.map { |elem|
32
- elem.is_a?(Array) ? process(elem) : elem
33
- }
34
- end
35
- end
36
-
37
- def process_def(sexp)
38
- line = sexp[1][2][0]
39
-
40
- result = []
41
- result << sexp.shift
42
- result << sexp.shift
43
- result << process(sexp.shift)
44
- result << process(sexp.shift)
45
-
46
- result = steamroll(result) if LiveASTRipper.steamroll
47
- store_sexp(result, line)
48
-
49
- []
50
- end
51
-
52
- def process_method_add_block(sexp)
53
- line =
54
- case sexp[1][0]
55
- when :method_add_arg
56
- sexp[1][1][1].last[0]
57
- when :call, :command_call
58
- sexp[1][3][2][0]
59
- when :command
60
- sexp[1][1][2][0]
21
+ line =
22
+ case sexp.first
23
+ when :def
24
+ sexp[1][2][0]
25
+ when :method_add_block
26
+ case sexp[1][0]
27
+ when :method_add_arg
28
+ sexp[1][1][1].last[0]
29
+ when :call, :command_call
30
+ sexp[1][3][2][0]
31
+ when :command
32
+ sexp[1][1][2][0]
33
+ end
61
34
  end
62
35
 
63
- result = []
64
- result << sexp.shift
65
- result << process(sexp.shift)
66
- result << process(sexp.shift)
67
-
68
- result = steamroll(result) if LiveASTRipper.steamroll
69
- store_sexp(result, line)
36
+ if line
37
+ @defs[line] = @defs.has_key?(line) ? :multiple : sexp
38
+ end
70
39
 
71
- []
72
- end
40
+ steamroll(sexp) if LiveASTRipper.steamroll
73
41
 
74
- def store_sexp(sexp, line)
75
- @defs[line] = @defs.has_key?(line) ? :multiple : sexp
42
+ sexp.each do |elem|
43
+ process(elem) if elem.is_a? Array
44
+ end
76
45
  end
77
46
 
78
47
  def steamroll(sexp)
79
- sexp.map { |elem|
80
- if elem.is_a? Array
81
- sub_elem =
82
- if elem[0].is_a?(Symbol) and elem[0][0] == "@"
83
- elem[0..-2]
84
- else
85
- elem
86
- end
87
- steamroll(sub_elem)
88
- elsif elem == :brace_block or elem == :do_block
48
+ if sexp.first.is_a?(Symbol) and sexp.first[0] == "@"
49
+ # remove [line, column]
50
+ sexp.pop
51
+ end
52
+
53
+ sexp.map! { |elem|
54
+ case elem
55
+ when :brace_block, :do_block
89
56
  :block
90
57
  else
91
58
  elem
92
59
  end
93
60
  }
94
61
  end
62
+
63
+ class << self
64
+ #
65
+ # Whether to strip line/column and other personality traits.
66
+ #
67
+ attr_accessor :steamroll
68
+ end
95
69
  end
96
70
 
97
- LiveASTRipper.autoload :TestForms, "live_ast_ripper/test_forms"
71
+ LiveASTRipper.autoload :Test, "live_ast_ripper/test"
98
72
 
99
73
  LiveAST.parser = LiveASTRipper
@@ -1,6 +1,8 @@
1
1
 
2
- # For testing with LiveAST.
3
- module LiveASTRipper::TestForms
2
+ #
3
+ # Used by the LiveAST test suite.
4
+ #
5
+ module LiveASTRipper::Test
4
6
  #
5
7
  # no_arg_def(:f, "A#f") returns the ast of
6
8
  #
@@ -211,7 +213,67 @@ module LiveASTRipper::TestForms
211
213
  op,
212
214
  [:var_ref, [:@ident, "y"]]]]]]
213
215
  end
216
+
217
+ #
218
+ # nested_lambdas("foo") returns the ast of
219
+ #
220
+ # lambda {
221
+ # lambda {
222
+ # "foo"
223
+ # }
224
+ # }
225
+ #
226
+ def nested_lambdas(str)
227
+ [:method_add_block,
228
+ [:method_add_arg, [:fcall, [:@ident, "lambda"]], []],
229
+ [:block,
230
+ nil,
231
+ [[:method_add_block,
232
+ [:method_add_arg, [:fcall, [:@ident, "lambda"]], []],
233
+ [:block,
234
+ nil,
235
+ [[:string_literal,
236
+ [:string_content, [:@tstring_content, str]]]]]]]]]
237
+ end
238
+
239
+ # nested_defs(:f, :g, "foo") returns the ast of
240
+ #
241
+ # def f
242
+ # Class.new do
243
+ # def g
244
+ # "foo"
245
+ # end
246
+ # end
247
+ # end
248
+ #
249
+ def nested_defs(u, v, str)
250
+ [:def,
251
+ [:@ident, u.to_s],
252
+ [:params, nil, nil, nil, nil, nil],
253
+ [:bodystmt,
254
+ [[:method_add_block,
255
+ [:call,
256
+ [:var_ref, [:@const, "Class"]],
257
+ :".",
258
+ [:@ident, "new"]],
259
+ [:block,
260
+ nil,
261
+ [[:def,
262
+ [:@ident, v.to_s],
263
+ [:params, nil, nil, nil, nil, nil],
264
+ [:bodystmt,
265
+ [[:string_literal,
266
+ [:string_content, [:@tstring_content, str]]]],
267
+ nil,
268
+ nil,
269
+ nil]]]]]],
270
+ nil,
271
+ nil,
272
+ nil]]
273
+ end
214
274
  end
215
275
 
276
+ #
216
277
  # testing assumes sexps are steamrolled
278
+ #
217
279
  LiveASTRipper.steamroll = true
@@ -0,0 +1,3 @@
1
+ module LiveASTRipper
2
+ VERSION = "0.6.0"
3
+ end
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: live_ast_ripper
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.5.1
5
+ version: 0.6.0
6
6
  platform: ruby
7
7
  authors:
8
8
  - James M. Lawrence
@@ -10,11 +10,11 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2011-02-24 00:00:00 -05:00
13
+ date: 2011-02-26 00:00:00 -05:00
14
14
  default_executable:
15
15
  dependencies: []
16
16
 
17
- description: A Ripper-based parser plug-in for LiveAST.
17
+ description: A Ripper-based parser plugin for LiveAST.
18
18
  email:
19
19
  - quixoticsycophant@gmail.com
20
20
  executables: []
@@ -27,9 +27,10 @@ files:
27
27
  - CHANGES.rdoc
28
28
  - README.rdoc
29
29
  - Rakefile
30
- - devel/jumpstart.rb
30
+ - devel/levitate.rb
31
31
  - lib/live_ast_ripper.rb
32
- - lib/live_ast_ripper/test_forms.rb
32
+ - lib/live_ast_ripper/test.rb
33
+ - lib/live_ast_ripper/version.rb
33
34
  - MANIFEST
34
35
  has_rdoc: true
35
36
  homepage: http://quix.github.com/live_ast_ripper
@@ -40,7 +41,7 @@ rdoc_options:
40
41
  - --main
41
42
  - README.rdoc
42
43
  - --title
43
- - "live_ast_ripper: A Ripper-based parser plug-in for LiveAST."
44
+ - "live_ast_ripper: A Ripper-based parser plugin for LiveAST."
44
45
  require_paths:
45
46
  - lib
46
47
  required_ruby_version: !ruby/object:Gem::Requirement
@@ -61,6 +62,6 @@ rubyforge_project:
61
62
  rubygems_version: 1.5.2
62
63
  signing_key:
63
64
  specification_version: 3
64
- summary: A Ripper-based parser plug-in for LiveAST.
65
+ summary: A Ripper-based parser plugin for LiveAST.
65
66
  test_files: []
66
67