ruby_parser 3.0.4 → 3.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.

Potentially problematic release.


This version of ruby_parser might be problematic. Click here for more details.

data.tar.gz.sig CHANGED
Binary file
@@ -1,3 +1,16 @@
1
+ === 3.1.0 / 2012-12-06
2
+
3
+ * 2 minor enhancements:
4
+
5
+ * Added RubyParser.for_current_ruby to provide a parser that matches your runtime. (neilconway)
6
+ * Duck-typed IDENT_CHAR_RE instead of using RUBY_VERSION
7
+
8
+ * 3 bug fixes:
9
+
10
+ * Cleared out body comments in class/module/defn/defs
11
+ * Flipped lexer tests to US-ASCII to avoid encoding hell
12
+ * yyerror is now an alias for syntax_error
13
+
1
14
  === 3.0.4 / 2012-11-26
2
15
 
3
16
  * 1 bug fix:
@@ -4617,6 +4617,7 @@ end
4617
4617
  def _reduce_310(val, _values, result)
4618
4618
  result = new_class val
4619
4619
  self.env.unextend
4620
+ self.lexer.comments # we don't care about comments in the body
4620
4621
 
4621
4622
  result
4622
4623
  end
@@ -4645,6 +4646,7 @@ end
4645
4646
  def _reduce_314(val, _values, result)
4646
4647
  result = new_sclass val
4647
4648
  self.env.unextend
4649
+ self.lexer.comments # we don't care about comments in the body
4648
4650
 
4649
4651
  result
4650
4652
  end
@@ -4668,6 +4670,7 @@ end
4668
4670
  def _reduce_317(val, _values, result)
4669
4671
  result = new_module val
4670
4672
  self.env.unextend
4673
+ self.lexer.comments # we don't care about comments in the body
4671
4674
 
4672
4675
  result
4673
4676
  end
@@ -4685,6 +4688,7 @@ def _reduce_319(val, _values, result)
4685
4688
  result = new_defn val
4686
4689
  self.env.unextend
4687
4690
  self.in_def = false
4691
+ self.lexer.comments # we don't care about comments in the body
4688
4692
 
4689
4693
  result
4690
4694
  end
@@ -4709,6 +4713,7 @@ def _reduce_322(val, _values, result)
4709
4713
 
4710
4714
  self.env.unextend
4711
4715
  self.in_single -= 1
4716
+ self.lexer.comments # we don't care about comments in the body
4712
4717
 
4713
4718
  result
4714
4719
  end
@@ -537,7 +537,6 @@ rule
537
537
  result = s(:op_asgn, val[0], val[4], val[2], val[3])
538
538
  }
539
539
  | primary_value tCOLON2 tCONSTANT tOP_ASGN arg
540
-
541
540
  {
542
541
  yyerror "constant re-assignment"
543
542
  }
@@ -1083,6 +1082,7 @@ rule
1083
1082
  {
1084
1083
  result = new_class val
1085
1084
  self.env.unextend
1085
+ self.lexer.comments # we don't care about comments in the body
1086
1086
  }
1087
1087
  | kCLASS tLSHFT
1088
1088
  {
@@ -1103,6 +1103,7 @@ rule
1103
1103
  {
1104
1104
  result = new_sclass val
1105
1105
  self.env.unextend
1106
+ self.lexer.comments # we don't care about comments in the body
1106
1107
  }
1107
1108
  | kMODULE
1108
1109
  {
@@ -1120,6 +1121,7 @@ rule
1120
1121
  {
1121
1122
  result = new_module val
1122
1123
  self.env.unextend
1124
+ self.lexer.comments # we don't care about comments in the body
1123
1125
  }
1124
1126
  | kDEF fname
1125
1127
  {
@@ -1133,6 +1135,7 @@ rule
1133
1135
  result = new_defn val
1134
1136
  self.env.unextend
1135
1137
  self.in_def = false
1138
+ self.lexer.comments # we don't care about comments in the body
1136
1139
  }
1137
1140
  | kDEF singleton dot_or_colon
1138
1141
  {
@@ -1151,6 +1154,7 @@ rule
1151
1154
 
1152
1155
  self.env.unextend
1153
1156
  self.in_single -= 1
1157
+ self.lexer.comments # we don't care about comments in the body
1154
1158
  }
1155
1159
  | kBREAK
1156
1160
  {
@@ -4681,6 +4681,7 @@ end
4681
4681
  def _reduce_314(val, _values, result)
4682
4682
  result = new_class val
4683
4683
  self.env.unextend
4684
+ self.lexer.comments # we don't care about comments in the body
4684
4685
 
4685
4686
  result
4686
4687
  end
@@ -4709,6 +4710,7 @@ end
4709
4710
  def _reduce_318(val, _values, result)
4710
4711
  result = new_sclass val
4711
4712
  self.env.unextend
4713
+ self.lexer.comments # we don't care about comments in the body
4712
4714
 
4713
4715
  result
4714
4716
  end
@@ -4732,6 +4734,7 @@ end
4732
4734
  def _reduce_321(val, _values, result)
4733
4735
  result = new_module val
4734
4736
  self.env.unextend
4737
+ self.lexer.comments # we don't care about comments in the body
4735
4738
 
4736
4739
  result
4737
4740
  end
@@ -4751,6 +4754,7 @@ def _reduce_323(val, _values, result)
4751
4754
 
4752
4755
  self.env.unextend
4753
4756
  self.in_def = false
4757
+ self.lexer.comments # we don't care about comments in the body
4754
4758
 
4755
4759
  result
4756
4760
  end
@@ -4777,6 +4781,7 @@ def _reduce_326(val, _values, result)
4777
4781
 
4778
4782
  self.env.unextend
4779
4783
  self.in_single -= 1
4784
+ self.lexer.comments # we don't care about comments in the body
4780
4785
 
4781
4786
  result
4782
4787
  end
@@ -608,7 +608,6 @@ rule
608
608
  result = s(:op_asgn, val[0], val[4], val[2], val[3])
609
609
  }
610
610
  | primary_value tCOLON2 tCONSTANT tOP_ASGN arg
611
-
612
611
  {
613
612
  yyerror "constant re-assignment"
614
613
  }
@@ -1066,6 +1065,7 @@ rule
1066
1065
  {
1067
1066
  result = new_class val
1068
1067
  self.env.unextend
1068
+ self.lexer.comments # we don't care about comments in the body
1069
1069
  }
1070
1070
  | kCLASS tLSHFT
1071
1071
  {
@@ -1086,6 +1086,7 @@ rule
1086
1086
  {
1087
1087
  result = new_sclass val
1088
1088
  self.env.unextend
1089
+ self.lexer.comments # we don't care about comments in the body
1089
1090
  }
1090
1091
  | kMODULE
1091
1092
  {
@@ -1103,6 +1104,7 @@ rule
1103
1104
  {
1104
1105
  result = new_module val
1105
1106
  self.env.unextend
1107
+ self.lexer.comments # we don't care about comments in the body
1106
1108
  }
1107
1109
  | kDEF fname
1108
1110
  {
@@ -1118,6 +1120,7 @@ rule
1118
1120
 
1119
1121
  self.env.unextend
1120
1122
  self.in_def = false
1123
+ self.lexer.comments # we don't care about comments in the body
1121
1124
  }
1122
1125
  | kDEF singleton dot_or_colon
1123
1126
  {
@@ -1138,6 +1141,7 @@ rule
1138
1141
 
1139
1142
  self.env.unextend
1140
1143
  self.in_single -= 1
1144
+ self.lexer.comments # we don't care about comments in the body
1141
1145
  }
1142
1146
  | kBREAK
1143
1147
  {
@@ -4,13 +4,10 @@ class RubyLexer
4
4
 
5
5
  RUBY19 = "".respond_to? :encoding
6
6
 
7
- IDENT_CHAR_RE = case RUBY_VERSION
8
- when /^1\.8/ then
9
- /[\w\x80-\xFF]/
10
- when /^(1\.9|2\.0)/ then # HACK - matching 2.0 for now
7
+ IDENT_CHAR_RE = if RUBY19 then
11
8
  /[\w\u0080-\uFFFF]/u
12
9
  else
13
- raise "bork"
10
+ /[\w\x80-\xFF]/
14
11
  end
15
12
 
16
13
  IDENT_RE = /^#{IDENT_CHAR_RE}+/
@@ -752,7 +749,6 @@ class RubyLexer
752
749
  tok = self.yacc_value = src.matched
753
750
  return TOKENS[tok]
754
751
  elsif src.scan(/\=begin(?=\s)/) then
755
- # @comments << '=' << src.matched
756
752
  @comments << src.matched
757
753
 
758
754
  unless src.scan(/.*?\n=end( |\t|\f)*[^\n]*(\n|\z)/m) then
@@ -108,7 +108,7 @@ class RPStringScanner < StringScanner
108
108
  end
109
109
 
110
110
  module RubyParserStuff
111
- VERSION = '3.0.4' unless constants.include? "VERSION" # SIGH
111
+ VERSION = '3.1.0' unless constants.include? "VERSION" # SIGH
112
112
 
113
113
  attr_accessor :lexer, :in_def, :in_single, :file
114
114
  attr_reader :env, :comments
@@ -1049,10 +1049,7 @@ module RubyParserStuff
1049
1049
  # do nothing for now
1050
1050
  end
1051
1051
 
1052
- def yyerror msg
1053
- warn msg if $DEBUG
1054
- super()
1055
- end
1052
+ alias yyerror syntax_error
1056
1053
 
1057
1054
  def on_error(et, ev, values)
1058
1055
  super
@@ -1301,6 +1298,17 @@ class RubyParser
1301
1298
  @p18.reset
1302
1299
  @p19.reset
1303
1300
  end
1301
+
1302
+ def self.for_current_ruby
1303
+ case RUBY_VERSION
1304
+ when /^1\.8/ then
1305
+ Ruby18Parser.new
1306
+ when /^1\.9/ then
1307
+ Ruby19Parser.new
1308
+ else
1309
+ raise "unrecognized RUBY_VERSION #{RUBY_VERSION}"
1310
+ end
1311
+ end
1304
1312
  end
1305
1313
 
1306
1314
  ############################################################
@@ -1,4 +1,5 @@
1
1
  #!/usr/local/bin/ruby
2
+ # encoding: US-ASCII
2
3
 
3
4
  require 'rubygems'
4
5
  gem "minitest"
@@ -27,6 +27,8 @@ end
27
27
  class RubyParserTestCase < ParseTreeTestCase
28
28
  attr_accessor :result, :processor
29
29
 
30
+ make_my_diffs_pretty!
31
+
30
32
  def self.previous key
31
33
  "Ruby"
32
34
  end
@@ -880,8 +882,8 @@ module TestRubyParserShared
880
882
  end
881
883
 
882
884
  def test_i_fucking_hate_line_numbers
883
- rb = <<-EOM.gsub(/^ {6}/, '')
884
- def a
885
+ rb = <<-END.gsub(/^ {6}/, '')
886
+ if true
885
887
  p 1
886
888
  a.b 2
887
889
  c.d 3, 4
@@ -893,53 +895,81 @@ module TestRubyParserShared
893
895
  e.f(5)
894
896
  g.h(6, 7)
895
897
  end
896
- EOM
898
+ END
897
899
 
898
- pt = s(:defn, :a, s(:args).line(2),
899
- s(:call, nil, :p, s(:lit, 1).line(2)).line(2),
900
- s(:call, s(:call, nil, :a).line(3), :b,
901
- s(:lit, 2).line(3)).line(3),
902
- s(:call, s(:call, nil, :c).line(4), :d,
903
- s(:lit, 3).line(4), s(:lit, 4).line(4)).line(4),
904
- s(:call, s(:call, nil, :e).line(5), :f,
905
- s(:lit, 5).line(5)).line(5),
906
- s(:call, s(:call, nil, :g).line(6), :h,
907
- s(:lit, 6).line(6), s(:lit, 7).line(6)).line(6),
908
- s(:call, nil, :p, s(:lit, 1).line(7)).line(7),
909
- s(:call, s(:call, nil, :a).line(8), :b,
910
- s(:lit, 2).line(8)).line(8),
911
- s(:call, s(:call, nil, :c).line(9), :d,
912
- s(:lit, 3).line(9), s(:lit, 4).line(9)).line(9),
913
- s(:call, s(:call, nil, :e).line(10), :f,
914
- s(:lit, 5).line(10)).line(10),
915
- s(:call, s(:call, nil, :g).line(11), :h,
916
- s(:lit, 6).line(11), s(:lit, 7).line(11)).line(11)
917
- ).line(1)
900
+ pt = s(:if, s(:true).line(1),
901
+ s(:block,
902
+ s(:call, nil, :p, s(:lit, 1).line(2)).line(2),
903
+ s(:call, s(:call, nil, :a).line(3), :b,
904
+ s(:lit, 2).line(3)).line(3),
905
+ s(:call, s(:call, nil, :c).line(4), :d,
906
+ s(:lit, 3).line(4), s(:lit, 4).line(4)).line(4),
907
+ s(:call, s(:call, nil, :e).line(5), :f,
908
+ s(:lit, 5).line(5)).line(5),
909
+ s(:call, s(:call, nil, :g).line(6), :h,
910
+ s(:lit, 6).line(6), s(:lit, 7).line(6)).line(6),
911
+ s(:call, nil, :p, s(:lit, 1).line(7)).line(7),
912
+ s(:call, s(:call, nil, :a).line(8), :b,
913
+ s(:lit, 2).line(8)).line(8),
914
+ s(:call, s(:call, nil, :c).line(9), :d,
915
+ s(:lit, 3).line(9), s(:lit, 4).line(9)).line(9),
916
+ s(:call, s(:call, nil, :e).line(10), :f,
917
+ s(:lit, 5).line(10)).line(10),
918
+ s(:call, s(:call, nil, :g).line(11), :h,
919
+ s(:lit, 6).line(11), s(:lit, 7).line(11)).line(11)).line(2),
920
+ nil).line(1)
918
921
 
919
922
  assert_parse rb, pt
920
923
  end
921
924
 
922
925
  def test_i_fucking_hate_line_numbers2
923
926
  rb = <<-EOM.gsub(/^ {6}/, '')
924
- def a
925
- p('a')
926
- b = 1
927
- p b
928
- c =1
927
+ if true then
928
+ p('a')
929
+ b = 1
930
+ p b
931
+ c =1
929
932
  end
930
933
  a
931
934
  EOM
932
935
 
933
- pt = s(:block,
934
- s(:defn, :a, s(:args).line(2),
936
+ pt = s(:block,
937
+ s(:if, s(:true).line(1),
938
+ s(:block,
935
939
  s(:call, nil, :p, s(:str, "a").line(2)).line(2),
936
940
  s(:lasgn, :b, s(:lit, 1).line(3)).line(3),
937
941
  s(:call, nil, :p, s(:lvar, :b).line(4)).line(4),
938
- s(:lasgn, :c, s(:lit, 1).line(5)).line(5)).line(1),
939
- s(:call, nil, :a).line(7)).line(1)
942
+ s(:lasgn, :c, s(:lit, 1).line(5)).line(5)).line(2), # TODO line 2?
943
+ nil).line(1),
944
+ s(:call, nil, :a).line(7)).line(1)
940
945
 
941
946
  assert_parse rb, pt
942
947
  end
948
+
949
+ def test_parse_comments
950
+ p = RubyParser.new
951
+ sexp = p.parse <<-CODE
952
+ # class comment
953
+ class Inline
954
+ def show
955
+ # woot
956
+ end
957
+
958
+ # Returns a list of things
959
+ def list
960
+ # woot
961
+ end
962
+ end
963
+ CODE
964
+
965
+ assert_equal "# class comment\n", sexp.comments
966
+ act = sexp.find_nodes(:defn).map(&:comments)
967
+ exp = ["", "# Returns a list of things\n"]
968
+
969
+ assert_equal exp, act
970
+ assert_equal [], processor.comments
971
+ assert_equal "", processor.lexer.comments
972
+ end
943
973
  end
944
974
 
945
975
  class TestRubyParser < MiniTest::Unit::TestCase
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby_parser
3
3
  version: !ruby/object:Gem::Version
4
- hash: 15
4
+ hash: 3
5
5
  prerelease:
6
6
  segments:
7
7
  - 3
8
+ - 1
8
9
  - 0
9
- - 4
10
- version: 3.0.4
10
+ version: 3.1.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Ryan Davis
@@ -36,7 +36,7 @@ cert_chain:
36
36
  FBHgymkyj/AOSqKRIpXPhjC6
37
37
  -----END CERTIFICATE-----
38
38
 
39
- date: 2012-11-26 00:00:00 Z
39
+ date: 2012-12-07 00:00:00 Z
40
40
  dependencies:
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: sexp_processor
metadata.gz.sig CHANGED
@@ -1,2 +1 @@
1
- ���a7'TJ��A����[�W$[�P,��r�S{�C���ͪ���2�S�%˽I��E��%�V��@�얤��l�-���W��q�;�{g�2�Z^�e�mJ���ޡ��C���4��� ��=Ȍa"�bq���U��E�_է���Z����]z�k��@t���o�.&nUf2��%��zWl����8H��
2
- ޜl*�G Tq H4�;|���E.#�9�M����2)&���Y� ����o�P]��Q���
1
+ �ۇ�o�����?�^iuvS�?��bx