brakeman 3.4.0 → 3.4.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (72) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGES +10 -0
  3. data/bundle/load.rb +3 -3
  4. data/bundle/ruby/2.3.0/gems/{ruby2ruby-2.3.0 → ruby2ruby-2.3.1}/History.txt +10 -0
  5. data/bundle/ruby/2.3.0/gems/{ruby2ruby-2.3.0 → ruby2ruby-2.3.1}/Manifest.txt +0 -0
  6. data/bundle/ruby/2.3.0/gems/{ruby2ruby-2.3.0 → ruby2ruby-2.3.1}/README.txt +0 -0
  7. data/bundle/ruby/2.3.0/gems/{ruby2ruby-2.3.0 → ruby2ruby-2.3.1}/Rakefile +0 -0
  8. data/bundle/ruby/2.3.0/gems/{ruby2ruby-2.3.0 → ruby2ruby-2.3.1}/bin/r2r_show +0 -0
  9. data/bundle/ruby/2.3.0/gems/{ruby2ruby-2.3.0 → ruby2ruby-2.3.1}/lib/ruby2ruby.rb +34 -1
  10. data/bundle/ruby/2.3.0/gems/{ruby2ruby-2.3.0 → ruby2ruby-2.3.1}/test/test_ruby2ruby.rb +41 -0
  11. data/bundle/ruby/2.3.0/gems/{ruby_parser-3.8.2 → ruby_parser-3.8.3}/History.txt +12 -0
  12. data/bundle/ruby/2.3.0/gems/{ruby_parser-3.8.2 → ruby_parser-3.8.3}/Manifest.txt +0 -0
  13. data/bundle/ruby/2.3.0/gems/{ruby_parser-3.8.2 → ruby_parser-3.8.3}/README.txt +0 -0
  14. data/bundle/ruby/2.3.0/gems/{ruby_parser-3.8.2 → ruby_parser-3.8.3}/Rakefile +0 -0
  15. data/bundle/ruby/2.3.0/gems/{ruby_parser-3.8.2 → ruby_parser-3.8.3}/bin/ruby_parse +0 -0
  16. data/bundle/ruby/2.3.0/gems/{ruby_parser-3.8.2 → ruby_parser-3.8.3}/bin/ruby_parse_extract_error +0 -0
  17. data/bundle/ruby/2.3.0/gems/{ruby_parser-3.8.2 → ruby_parser-3.8.3}/lib/ruby18_parser.rb +7 -8
  18. data/bundle/ruby/2.3.0/gems/{ruby_parser-3.8.2 → ruby_parser-3.8.3}/lib/ruby18_parser.y +7 -8
  19. data/bundle/ruby/2.3.0/gems/{ruby_parser-3.8.2 → ruby_parser-3.8.3}/lib/ruby19_parser.rb +8 -9
  20. data/bundle/ruby/2.3.0/gems/{ruby_parser-3.8.2 → ruby_parser-3.8.3}/lib/ruby19_parser.y +10 -11
  21. data/bundle/ruby/2.3.0/gems/ruby_parser-3.8.3/lib/ruby20_parser.rb +6690 -0
  22. data/bundle/ruby/2.3.0/gems/{ruby_parser-3.8.2 → ruby_parser-3.8.3}/lib/ruby20_parser.y +14 -50
  23. data/bundle/ruby/2.3.0/gems/ruby_parser-3.8.3/lib/ruby21_parser.rb +6738 -0
  24. data/bundle/ruby/2.3.0/gems/{ruby_parser-3.8.2 → ruby_parser-3.8.3}/lib/ruby21_parser.y +14 -48
  25. data/bundle/ruby/2.3.0/gems/{ruby_parser-3.8.2 → ruby_parser-3.8.3}/lib/ruby22_parser.rb +263 -286
  26. data/bundle/ruby/2.3.0/gems/{ruby_parser-3.8.2 → ruby_parser-3.8.3}/lib/ruby22_parser.y +14 -45
  27. data/bundle/ruby/2.3.0/gems/{ruby_parser-3.8.2 → ruby_parser-3.8.3}/lib/ruby23_parser.rb +269 -292
  28. data/bundle/ruby/2.3.0/gems/{ruby_parser-3.8.2 → ruby_parser-3.8.3}/lib/ruby23_parser.y +14 -45
  29. data/bundle/ruby/2.3.0/gems/{ruby_parser-3.8.2 → ruby_parser-3.8.3}/lib/ruby_lexer.rb +41 -8
  30. data/bundle/ruby/2.3.0/gems/{ruby_parser-3.8.2 → ruby_parser-3.8.3}/lib/ruby_lexer.rex +6 -6
  31. data/bundle/ruby/2.3.0/gems/{ruby_parser-3.8.2 → ruby_parser-3.8.3}/lib/ruby_lexer.rex.rb +17 -11
  32. data/bundle/ruby/2.3.0/gems/{ruby_parser-3.8.2 → ruby_parser-3.8.3}/lib/ruby_parser.rb +0 -0
  33. data/bundle/ruby/2.3.0/gems/{ruby_parser-3.8.2 → ruby_parser-3.8.3}/lib/ruby_parser.yy +20 -33
  34. data/bundle/ruby/2.3.0/gems/{ruby_parser-3.8.2 → ruby_parser-3.8.3}/lib/ruby_parser_extras.rb +65 -3
  35. data/bundle/ruby/2.3.0/gems/{ruby_parser-3.8.2 → ruby_parser-3.8.3}/test/test_ruby_lexer.rb +88 -14
  36. data/bundle/ruby/2.3.0/gems/{ruby_parser-3.8.2 → ruby_parser-3.8.3}/test/test_ruby_parser.rb +102 -9
  37. data/bundle/ruby/2.3.0/gems/{ruby_parser-3.8.2 → ruby_parser-3.8.3}/test/test_ruby_parser_extras.rb +1 -1
  38. data/bundle/ruby/2.3.0/gems/{terminal-table-1.7.1 → terminal-table-1.7.3}/Gemfile +2 -0
  39. data/bundle/ruby/2.3.0/gems/{terminal-table-1.7.1 → terminal-table-1.7.3}/History.rdoc +10 -0
  40. data/bundle/ruby/2.3.0/gems/{terminal-table-1.7.1 → terminal-table-1.7.3}/Manifest +0 -0
  41. data/bundle/ruby/2.3.0/gems/{terminal-table-1.7.1 → terminal-table-1.7.3}/README.rdoc +0 -0
  42. data/bundle/ruby/2.3.0/gems/terminal-table-1.7.3/Rakefile +15 -0
  43. data/bundle/ruby/2.3.0/gems/{terminal-table-1.7.1 → terminal-table-1.7.3}/Todo.rdoc +0 -0
  44. data/bundle/ruby/2.3.0/gems/{terminal-table-1.7.1 → terminal-table-1.7.3}/examples/examples.rb +0 -0
  45. data/bundle/ruby/2.3.0/gems/{terminal-table-1.7.1 → terminal-table-1.7.3}/lib/terminal-table.rb +0 -0
  46. data/bundle/ruby/2.3.0/gems/{terminal-table-1.7.1 → terminal-table-1.7.3}/lib/terminal-table/cell.rb +0 -0
  47. data/bundle/ruby/2.3.0/gems/{terminal-table-1.7.1 → terminal-table-1.7.3}/lib/terminal-table/import.rb +0 -0
  48. data/bundle/ruby/2.3.0/gems/{terminal-table-1.7.1 → terminal-table-1.7.3}/lib/terminal-table/row.rb +4 -0
  49. data/bundle/ruby/2.3.0/gems/{terminal-table-1.7.1 → terminal-table-1.7.3}/lib/terminal-table/separator.rb +0 -0
  50. data/bundle/ruby/2.3.0/gems/{terminal-table-1.7.1 → terminal-table-1.7.3}/lib/terminal-table/style.rb +9 -0
  51. data/bundle/ruby/2.3.0/gems/terminal-table-1.7.3/lib/terminal-table/table.rb +343 -0
  52. data/bundle/ruby/2.3.0/gems/{terminal-table-1.7.1 → terminal-table-1.7.3}/lib/terminal-table/table_helper.rb +0 -0
  53. data/bundle/ruby/2.3.0/gems/{terminal-table-1.7.1 → terminal-table-1.7.3}/lib/terminal-table/version.rb +1 -1
  54. data/bundle/ruby/2.3.0/gems/{terminal-table-1.7.1 → terminal-table-1.7.3}/terminal-table.gemspec +0 -0
  55. data/lib/brakeman.rb +2 -1
  56. data/lib/brakeman/app_tree.rb +22 -5
  57. data/lib/brakeman/checks/check_forgery_setting.rb +43 -31
  58. data/lib/brakeman/checks/check_link_to_href.rb +33 -19
  59. data/lib/brakeman/checks/check_sql.rb +3 -1
  60. data/lib/brakeman/checks/check_symbol_dos.rb +1 -0
  61. data/lib/brakeman/checks/check_unsafe_reflection.rb +1 -1
  62. data/lib/brakeman/options.rb +5 -0
  63. data/lib/brakeman/processors/gem_processor.rb +17 -10
  64. data/lib/brakeman/report/ignore/interactive.rb +17 -6
  65. data/lib/brakeman/scanner.rb +4 -0
  66. data/lib/brakeman/tracker/config.rb +10 -1
  67. data/lib/brakeman/version.rb +1 -1
  68. metadata +53 -53
  69. data/bundle/ruby/2.3.0/gems/ruby_parser-3.8.2/lib/ruby20_parser.rb +0 -6728
  70. data/bundle/ruby/2.3.0/gems/ruby_parser-3.8.2/lib/ruby21_parser.rb +0 -6766
  71. data/bundle/ruby/2.3.0/gems/terminal-table-1.7.1/Rakefile +0 -9
  72. data/bundle/ruby/2.3.0/gems/terminal-table-1.7.1/lib/terminal-table/table.rb +0 -239
@@ -91,7 +91,7 @@ class RPStringScanner < StringScanner
91
91
  end
92
92
 
93
93
  module RubyParserStuff
94
- VERSION = "3.8.2" unless constants.include? "VERSION" # SIGH
94
+ VERSION = "3.8.3" unless constants.include? "VERSION" # SIGH
95
95
 
96
96
  attr_accessor :lexer, :in_def, :in_single, :file
97
97
  attr_reader :env, :comments
@@ -875,11 +875,73 @@ module RubyParserStuff
875
875
  str = val[0]
876
876
  str.force_encoding("ASCII-8BIT") unless str.valid_encoding? unless RUBY_VERSION < "1.9"
877
877
  result = s(:str, str)
878
- self.lexer.lineno += str.count("\n") + self.lexer.extra_lineno
879
- self.lexer.extra_lineno = 0
878
+ self.lexer.fixup_lineno str.count("\n")
880
879
  result
881
880
  end
882
881
 
882
+ def new_qword_list_entry val
883
+ str = val[1]
884
+ str.force_encoding("ASCII-8BIT") unless str.valid_encoding? unless RUBY_VERSION < "1.9"
885
+ result = s(:str, str)
886
+ self.lexer.fixup_lineno
887
+ result
888
+ end
889
+
890
+ def new_qword_list
891
+ result = s(:array)
892
+ self.lexer.fixup_lineno
893
+ result
894
+ end
895
+
896
+ def new_word_list
897
+ result = s(:array)
898
+ self.lexer.fixup_lineno
899
+ result
900
+ end
901
+
902
+ def new_word_list_entry val
903
+ result = val[1][0] == :evstr ? s(:dstr, "", val[1]) : val[1]
904
+ self.lexer.fixup_lineno
905
+ result
906
+ end
907
+
908
+ def new_qsym_list
909
+ result = s(:array)
910
+ self.lexer.fixup_lineno
911
+ result
912
+ end
913
+
914
+ def new_qsym_list_entry val
915
+ result = s(:lit, val[1].to_sym)
916
+ self.lexer.fixup_lineno
917
+ result
918
+ end
919
+
920
+ def new_symbol_list
921
+ result = s(:array)
922
+ self.lexer.fixup_lineno
923
+ result
924
+ end
925
+
926
+ def new_symbol_list_entry val
927
+ _list, sym, _nil = val # TODO: use _list
928
+ result = val[1]
929
+
930
+ result ||= s(:str, "")
931
+
932
+ case sym[0]
933
+ when :dstr then
934
+ sym[0] = :dsym
935
+ when :str then
936
+ sym = s(:lit, sym.last.to_sym)
937
+ else
938
+ debug20 24
939
+ sym = s(:dsym, "", sym || s(:str, ""))
940
+ end
941
+ self.lexer.fixup_lineno
942
+ sym
943
+ end
944
+
883
945
  def new_super args
884
946
  if args && args.node_type == :block_pass then
885
947
  s(:super, args)
@@ -89,6 +89,8 @@ class TestRubyLexer < Minitest::Test
89
89
  case value
90
90
  when Float then
91
91
  assert_in_epsilon value, act_value, 0.001, msg
92
+ when NilClass then
93
+ assert_nil act_value, msg
92
94
  else
93
95
  assert_equal value, act_value, msg
94
96
  end
@@ -967,7 +969,17 @@ class TestRubyLexer < Minitest::Test
967
969
  end
968
970
 
969
971
  def test_yylex_float_e_bad_double_e
970
- refute_lex "1e2e3"
972
+ assert_lex3("1e2e3",
973
+ nil,
974
+ :tFLOAT, 100, :expr_end,
975
+ :tIDENTIFIER, "e3", :expr_end)
976
+ end
977
+
978
+ def test_yylex_float_if_modifier
979
+ assert_lex3("1e2if",
980
+ nil,
981
+ :tFLOAT, 100, :expr_end,
982
+ :kIF_MOD, "if", :expr_beg)
971
983
  end
972
984
 
973
985
  def test_yylex_float_e_bad_trailing_underscore
@@ -1409,6 +1421,13 @@ class TestRubyLexer < Minitest::Test
1409
1421
  refute_lex "0d42__24"
1410
1422
  end
1411
1423
 
1424
+ def test_yylex_integer_if_modifier
1425
+ assert_lex3("123if",
1426
+ nil,
1427
+ :tINTEGER, 123, :expr_end,
1428
+ :kIF_MOD, "if", :expr_beg)
1429
+ end
1430
+
1412
1431
  def test_yylex_question_eh_a__18
1413
1432
  setup_lexer_class Ruby18Parser
1414
1433
 
@@ -2698,25 +2717,80 @@ class TestRubyLexer < Minitest::Test
2698
2717
  :tRCURLY, "}", :expr_endarg, 0, 0)
2699
2718
  end
2700
2719
 
2701
- def test_ruby21_new_numbers
2702
- skip "Don't have imaginary and rational literal lexing yet"
2720
+ def test_ruby21_rational_literal
2721
+ setup_lexer_class Ruby21Parser
2703
2722
 
2723
+ assert_lex3("10r", nil, :tRATIONAL, Rational(10), :expr_end)
2724
+ assert_lex3("0x10r", nil, :tRATIONAL, Rational(16), :expr_end)
2725
+ assert_lex3("0o10r", nil, :tRATIONAL, Rational(8), :expr_end)
2726
+ assert_lex3("0or", nil, :tRATIONAL, Rational(0), :expr_end)
2727
+ assert_lex3("0b10r", nil, :tRATIONAL, Rational(2), :expr_end)
2728
+ assert_lex3("1.5r", nil, :tRATIONAL, Rational(15, 10), :expr_end)
2729
+ assert_lex3("15e3r", nil, :tRATIONAL, Rational(15000), :expr_end)
2730
+ assert_lex3("15e-3r", nil, :tRATIONAL, Rational(15, 1000), :expr_end)
2731
+ assert_lex3("1.5e3r", nil, :tRATIONAL, Rational(1500), :expr_end)
2732
+ assert_lex3("1.5e-3r", nil, :tRATIONAL, Rational(15, 10000), :expr_end)
2733
+
2734
+ assert_lex3("-10r", nil,
2735
+ :tUMINUS_NUM, "-", :expr_beg,
2736
+ :tRATIONAL, Rational(10), :expr_end)
2737
+ end
2738
+
2739
+ def test_ruby21_imaginary_literal
2704
2740
  setup_lexer_class Ruby21Parser
2705
2741
 
2706
- assert_lex3("10r", nil, :tRATIONAL, "10r", :expr_end)
2707
- assert_lex3("1.5r", nil, :tRATIONAL, "1.5r", :expr_end)
2742
+ assert_lex3("1i", nil, :tIMAGINARY, Complex(0, 1), :expr_end)
2743
+ assert_lex3("0x10i", nil, :tIMAGINARY, Complex(0, 16), :expr_end)
2744
+ assert_lex3("0o10i", nil, :tIMAGINARY, Complex(0, 8), :expr_end)
2745
+ assert_lex3("0oi", nil, :tIMAGINARY, Complex(0, 0), :expr_end)
2746
+ assert_lex3("0b10i", nil, :tIMAGINARY, Complex(0, 2), :expr_end)
2747
+ assert_lex3("1.5i", nil, :tIMAGINARY, Complex(0, 1.5), :expr_end)
2748
+ assert_lex3("15e3i", nil, :tIMAGINARY, Complex(0, 15000), :expr_end)
2749
+ assert_lex3("15e-3i", nil, :tIMAGINARY, Complex(0, 0.015), :expr_end)
2750
+ assert_lex3("1.5e3i", nil, :tIMAGINARY, Complex(0, 1500), :expr_end)
2751
+ assert_lex3("1.5e-3i", nil, :tIMAGINARY, Complex(0, 0.0015), :expr_end)
2752
+
2753
+ assert_lex3("-10i", nil,
2754
+ :tUMINUS_NUM, "-", :expr_beg,
2755
+ :tIMAGINARY, Complex(0, 10), :expr_end)
2756
+ end
2708
2757
 
2709
- assert_lex3("1i", nil, :tIMAGINARY, "1i", :expr_end)
2710
- assert_lex3("1+2i", nil, :tIMAGINARY, "1+2i", :expr_end)
2711
- assert_lex3("1.2+3.4i", nil, :tIMAGINARY, "1.2+3.4i", :expr_end)
2712
- assert_lex3("4r+3i", nil, :tIMAGINARY, "4r+3i", :expr_end)
2713
- assert_lex3("4r+3ri", nil, :tIMAGINARY, "4r+3i", :expr_end)
2758
+ def test_ruby21_rational_imaginary_literal
2759
+ setup_lexer_class Ruby21Parser
2714
2760
 
2715
- assert_lex3("4i+3r", nil, :tIMAGINARY, "4r+3i", :expr_end) # HACK
2716
- assert_lex3("1i+2ri", nil, :tIMAGINARY, "4r+3i", :expr_end) # HACK
2761
+ assert_lex3("1ri", nil, :tIMAGINARY, Complex(0, Rational(1)), :expr_end)
2762
+ assert_lex3("0x10ri", nil, :tIMAGINARY, Complex(0, Rational(16)), :expr_end)
2763
+ assert_lex3("0o10ri", nil, :tIMAGINARY, Complex(0, Rational(8)), :expr_end)
2764
+ assert_lex3("0ori", nil, :tIMAGINARY, Complex(0, Rational(0)), :expr_end)
2765
+ assert_lex3("0b10ri", nil, :tIMAGINARY, Complex(0, Rational(2)), :expr_end)
2766
+ assert_lex3("1.5ri", nil, :tIMAGINARY, Complex(0, Rational("1.5")), :expr_end)
2767
+ assert_lex3("15e3ri", nil, :tIMAGINARY, Complex(0, Rational("15e3")), :expr_end)
2768
+ assert_lex3("15e-3ri", nil, :tIMAGINARY, Complex(0, Rational("15e-3")), :expr_end)
2769
+ assert_lex3("1.5e3ri", nil, :tIMAGINARY, Complex(0, Rational("1.5e3")), :expr_end)
2770
+ assert_lex3("1.5e-3ri", nil, :tIMAGINARY, Complex(0, Rational("1.5e-3")), :expr_end)
2771
+
2772
+ assert_lex3("-10ri", nil,
2773
+ :tUMINUS_NUM, "-", :expr_beg,
2774
+ :tIMAGINARY, Complex(0, Rational(10)), :expr_end)
2775
+ end
2776
+
2777
+ def test_ruby21_imaginary_literal_with_succeeding_keyword
2778
+ skip "Currently does not tokenize correctly"
2779
+
2780
+ setup_lexer_class Ruby21Parser
2717
2781
 
2718
- assert_lex3("1+2ri", nil, :tIMAGINARY, "1+3ri", :expr_end)
2719
- refute_lex("1+2ir", :tINTEGER, 1)
2782
+ assert_lex3("1if", nil,
2783
+ :tINTEGER, 1, :expr_end,
2784
+ :kIF_MOD, "if", :expr_beg)
2785
+ assert_lex3("1rif", nil,
2786
+ :tRATIONAL, Rational(1), :expr_end,
2787
+ :kIF_MOD, "if", :expr_beg)
2788
+ assert_lex3("1.0if", nil,
2789
+ :tFLOAT, 1.0, :expr_end,
2790
+ :kIF_MOD, "if", :expr_beg)
2791
+ assert_lex3("1.0rif", nil,
2792
+ :tRATIONAL, Rational("1.0"), :expr_end,
2793
+ :kIF_MOD, "if", :expr_beg)
2720
2794
 
2721
2795
  flunk
2722
2796
  end
@@ -45,6 +45,11 @@ class RubyParserTestCase < ParseTreeTestCase
45
45
  assert_equal pt, result
46
46
  end
47
47
 
48
+ def refute_parse rb
49
+ self.result = processor.parse rb
50
+ assert_nil result
51
+ end
52
+
48
53
  def assert_syntax_error rb, emsg
49
54
  e = nil
50
55
  assert_silent do
@@ -302,10 +307,9 @@ module TestRubyParserShared
302
307
 
303
308
  def test_bug_comment_eq_begin
304
309
  rb = "\n\n#\n=begin\nblah\n=end\n\n"
305
- pt = nil
306
310
  exp = rb.strip + "\n"
307
311
 
308
- assert_parse rb, pt
312
+ refute_parse rb
309
313
  assert_equal exp, processor.lexer.comments
310
314
  end
311
315
 
@@ -366,10 +370,7 @@ module TestRubyParserShared
366
370
  end
367
371
 
368
372
  def test_empty
369
- rb = ""
370
- pt = nil
371
-
372
- assert_parse rb, pt
373
+ refute_parse ""
373
374
  end
374
375
 
375
376
  def test_evstr_evstr
@@ -1401,8 +1402,29 @@ module TestRubyParserShared
1401
1402
  assert_parse rb, pt
1402
1403
  end
1403
1404
 
1404
- def test_qwords_line_breaks
1405
- skip "not yet"
1405
+ def test_array_line_breaks
1406
+ # It seems like arrays are roughly created when a certain element is created
1407
+ # In ruby > 1.9 it seems like that is after the last element, so the array
1408
+ # itself is assigned line 3 (since the last element is on line 3) and for
1409
+ # ruby <= 1.9 it seems to get created after the first element, so the array
1410
+ # itself is assigned line 2 (since the first element is on line 2).
1411
+ # This seems to happen since arrays like this are created with a line in
1412
+ # ruby_parser.yy like `result = s(:array, val[0])`. So, the array is not
1413
+ # created by itself. The creation of the array itself is deferred until there
1414
+ # is an element to create it with. That seems to mess up line numbers
1415
+ # for the array. Luckily, the arary elements all seemt to get the correct
1416
+ # line number.
1417
+ start_line = self.class.to_s =~ /1[89]/ ? 2 : 3
1418
+ rb = "[\n'a',\n'b']\n1"
1419
+ pt = s(:block,
1420
+ s(:array,
1421
+ s(:str, "a").line(2),
1422
+ s(:str, "b").line(3)).line(start_line),
1423
+ s(:lit, 1).line(4))
1424
+ assert_parse rb, pt
1425
+ end
1426
+
1427
+ def test_non_interpolated_word_array_line_breaks
1406
1428
 
1407
1429
  rb = "%w(\na\nb\n)\n1"
1408
1430
  pt = s(:block,
@@ -1410,7 +1432,17 @@ module TestRubyParserShared
1410
1432
  s(:str, "a").line(2),
1411
1433
  s(:str, "b").line(3)).line(1),
1412
1434
  s(:lit, 1).line(5))
1435
+ assert_parse rb, pt
1436
+ end
1437
+
1438
+ def test_interpolated_word_array_line_breaks
1413
1439
 
1440
+ rb = "%W(\na\nb\n)\n1"
1441
+ pt = s(:block,
1442
+ s(:array,
1443
+ s(:str, "a").line(2),
1444
+ s(:str, "b").line(3)).line(1),
1445
+ s(:lit, 1).line(5))
1414
1446
  assert_parse rb, pt
1415
1447
  end
1416
1448
 
@@ -2187,6 +2219,28 @@ module TestRubyParserShared19to22
2187
2219
  end
2188
2220
 
2189
2221
  module TestRubyParserShared20to22
2222
+ def test_non_interpolated_symbol_array_line_breaks
2223
+
2224
+ rb = "%i(\na\nb\n)\n1"
2225
+ pt = s(:block,
2226
+ s(:array,
2227
+ s(:lit, :a).line(2),
2228
+ s(:lit, :b).line(3)).line(1),
2229
+ s(:lit, 1).line(5))
2230
+ assert_parse rb, pt
2231
+ end
2232
+
2233
+ def test_interpolated_symbol_array_line_breaks
2234
+
2235
+ rb = "%I(\na\nb\n)\n1"
2236
+ pt = s(:block,
2237
+ s(:array,
2238
+ s(:lit, :a).line(2),
2239
+ s(:lit, :b).line(3)).line(1),
2240
+ s(:lit, 1).line(5))
2241
+ assert_parse rb, pt
2242
+ end
2243
+
2190
2244
  def test_defs_kwarg
2191
2245
  rb = "def self.a b: 1\nend"
2192
2246
  pt = s(:defs, s(:self), :a, s(:args, s(:kwarg, :b, s(:lit, 1))), s(:nil))
@@ -3504,8 +3558,47 @@ class TestRuby23Parser < RubyParserTestCase
3504
3558
 
3505
3559
  assert_parse rb, pt
3506
3560
  end
3507
- end
3508
3561
 
3562
+ def test_ruby21_numbers
3563
+ rb = "[1i, 2r, 3ri]"
3564
+ pt = s(:array, s(:lit, Complex(0, 1)), s(:lit, Rational(2)), s(:lit, Complex(0, Rational(3))))
3565
+
3566
+ assert_parse rb, pt
3567
+ end
3568
+
3569
+ def test_float_with_if_modifier
3570
+ rb = "1.0if true"
3571
+ pt = s(:if, s(:true), s(:lit, 1.0), nil)
3572
+
3573
+ assert_parse rb, pt
3574
+ end
3575
+
3576
+ def test_integer_with_if_modifier
3577
+ rb = "1_234if true"
3578
+ pt = s(:if, s(:true), s(:lit, 1234), nil)
3579
+
3580
+ assert_parse rb, pt
3581
+ end
3582
+
3583
+ def test_slashy_newlines_within_string
3584
+ rb = %(puts "hello\\
3585
+ my\\
3586
+ dear\\
3587
+ friend"
3588
+
3589
+ a + b
3590
+ )
3591
+
3592
+ pt = s(:block,
3593
+ s(:call, nil, :puts, s(:str, "hello my dear friend").line(1)).line(1),
3594
+ s(:call, s(:call, nil, :a).line(6),
3595
+ :+,
3596
+ s(:call, nil, :b).line(6)).line(6)
3597
+ ).line(1)
3598
+
3599
+ assert_parse rb, pt
3600
+ end
3601
+ end
3509
3602
 
3510
3603
  [18, 19, 20, 21, 22, 23].each do |v|
3511
3604
  describe "block args arity #{v}" do
@@ -182,7 +182,7 @@ class TestEnvironment < Minitest::Test
182
182
 
183
183
  def test_var_scope_static
184
184
  @env.extend
185
- assert_equal nil, @env[:blah]
185
+ assert_nil @env[:blah]
186
186
  @env.unextend
187
187
  assert_equal 42, @env[:blah]
188
188
  end
@@ -2,3 +2,5 @@ source 'https://rubygems.org'
2
2
 
3
3
  # Specify your gem's dependencies in test-gem.gemspec
4
4
  gemspec
5
+
6
+ gem 'tins', '~> 1.0.0' # Ruby 1.9 compat
@@ -1,3 +1,13 @@
1
+ 1.7.3 / 2016-09-21
2
+ ==================
3
+
4
+ * Fixed compatibility issues for Ruby 1.9, 2.0, 2.1. (@vivekbisen, #80)
5
+
6
+ 1.7.2 / 2016-09-09
7
+ ==================
8
+
9
+ * Fix packing table to a minimal width (@vizv, #76)
10
+
1
11
  1.7.1 / 2016-08-29
2
12
  ==================
3
13
 
@@ -0,0 +1,15 @@
1
+ require 'bundler'
2
+ Bundler.setup
3
+ Bundler::GemHelper.install_tasks
4
+
5
+ require 'rake'
6
+ require 'rspec/core/rake_task'
7
+
8
+ desc "Run all examples"
9
+ RSpec::Core::RakeTask.new(:spec) do |t|
10
+ t.ruby_opts = %w[-w]
11
+ t.rspec_opts = %w[--color]
12
+ end
13
+
14
+ desc "Default: Run specs"
15
+ task :default => [:spec]
@@ -43,6 +43,10 @@ module Terminal
43
43
  end.join(y) + y
44
44
  end.join("\n")
45
45
  end
46
+
47
+ def number_of_columns
48
+ @cells.collect(&:colspan).inject(0, &:+)
49
+ end
46
50
  end
47
51
  end
48
52
  end