regexp_parser 0.3.5 → 0.3.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/ChangeLog +6 -0
- data/README.md +5 -5
- data/Rakefile +3 -29
- data/lib/regexp_parser/scanner.rb +71 -86
- data/lib/regexp_parser/scanner/property.rl +0 -2
- data/lib/regexp_parser/scanner/scanner.rl +2 -3
- data/lib/regexp_parser/token.rb +6 -0
- data/lib/regexp_parser/version.rb +1 -1
- data/test/expression/test_base.rb +1 -1
- data/test/expression/test_conditionals.rb +0 -1
- data/test/lexer/test_conditionals.rb +2 -2
- data/test/parser/test_quantifiers.rb +9 -9
- data/test/parser/test_sets.rb +1 -1
- data/test/scanner/test_escapes.rb +1 -1
- data/test/support/disable_autotest.rb +8 -0
- data/test/support/runner.rb +41 -0
- data/test/support/warning_extractor.rb +59 -0
- data/test/syntax/ruby/test_1.9.3.rb +0 -2
- metadata +8 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8da248406d9077139763f419cc18d846dc9f9f62
|
4
|
+
data.tar.gz: 24a0dd00c5a9e4bddfc9188d1c70ccaf4ec599b5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4feff69d68352e80320d745b9e0162682c15646f7747236b65a7d5cc2f8a82678083449cbb053a8e28f4df57f9bd0974c7c2715d0d7fb6c280acbe49945b9c4c
|
7
|
+
data.tar.gz: 5f52cbf231bbf43241526579310a20f2c394b7090f07ffbb5181114f3c2179dce9bb1857743d231dee12d90cb7e699a48c1d0e6df56987b34683e72de7b8bce9
|
data/ChangeLog
CHANGED
@@ -1,3 +1,9 @@
|
|
1
|
+
Wed Jun 8 2016 Ammar Ali <ammarabuali@gmail.com>
|
2
|
+
|
3
|
+
* Thanks to John Backus (https://github.com/backus):
|
4
|
+
- Remove warnings (PR #26)
|
5
|
+
* Bumped version to 0.3.6
|
6
|
+
|
1
7
|
Mon May 30 2016 Ammar Ali <ammarabuali@gmail.com>
|
2
8
|
|
3
9
|
* Thanks to John Backus (https://github.com/backus):
|
data/README.md
CHANGED
@@ -399,22 +399,22 @@ _A special task 'test:full' generates the scanner's code from the ragel source f
|
|
399
399
|
runs all the tests. This task requires ragel to be installed._
|
400
400
|
|
401
401
|
|
402
|
-
The tests use ruby's test/unit
|
402
|
+
The tests use ruby's test/unit. They can also be run with:
|
403
403
|
|
404
404
|
```
|
405
|
-
|
405
|
+
bin/test
|
406
406
|
```
|
407
407
|
|
408
|
-
|
408
|
+
The test runner accepts all arguments accepted by test/unit. You can run a specific test like so:
|
409
409
|
|
410
410
|
```
|
411
|
-
|
411
|
+
bin/test test/scanner/test_properties.rb
|
412
412
|
```
|
413
413
|
|
414
414
|
It is sometimes helpful during development to focus on a specific test case, for example:
|
415
415
|
|
416
416
|
```
|
417
|
-
|
417
|
+
bin/test test/expression/test_base.rb -n test_expression_to_re
|
418
418
|
```
|
419
419
|
|
420
420
|
|
data/Rakefile
CHANGED
@@ -15,40 +15,14 @@ RAGEL_SOURCE_FILES = %w{scanner} # scanner.rl includes property.rl
|
|
15
15
|
Bundler::GemHelper.install_tasks
|
16
16
|
|
17
17
|
|
18
|
-
task :default => [:test]
|
19
|
-
|
20
|
-
Rake::TestTask.new('test') do |t|
|
21
|
-
if t.respond_to?(:description)
|
22
|
-
t.description = "Run all unit tests under the test directory"
|
23
|
-
end
|
24
|
-
|
25
|
-
t.libs << "test"
|
26
|
-
t.test_files = FileList['test/test_all.rb']
|
27
|
-
end
|
18
|
+
task :default => [:'test:full']
|
28
19
|
|
29
20
|
namespace :test do
|
30
|
-
|
31
|
-
|
32
|
-
if t.respond_to?(:description)
|
33
|
-
t.description = "Run all #{component} unit tests under the test/#{component} directory"
|
34
|
-
end
|
35
|
-
|
36
|
-
t.libs << "test"
|
37
|
-
t.test_files = ["test/#{component}/test_all.rb"]
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
|
-
Rake::TestTask.new('full' => 'ragel:rb') do |t|
|
42
|
-
if t.respond_to?(:description)
|
43
|
-
t.description = "Regenerate the scanner and run all unit tests under the test directory"
|
44
|
-
end
|
45
|
-
|
46
|
-
t.libs << "test"
|
47
|
-
t.test_files = FileList['test/test_all.rb']
|
21
|
+
task full: :'ragel:rb' do
|
22
|
+
sh 'bin/test'
|
48
23
|
end
|
49
24
|
end
|
50
25
|
|
51
|
-
|
52
26
|
namespace :ragel do
|
53
27
|
desc "Process the ragel source files and output ruby code"
|
54
28
|
task :rb do |t|
|
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
# line 1 "/Users/ammar/src/code/ruby/projects/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
|
4
4
|
|
5
|
-
# line
|
5
|
+
# line 768 "/Users/ammar/src/code/ruby/projects/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
|
6
6
|
|
7
7
|
|
8
8
|
# THIS IS A GENERATED FILE, DO NOT EDIT DIRECTLY
|
@@ -1543,7 +1543,7 @@ end
|
|
1543
1543
|
self.re_scanner_en_main = 138;
|
1544
1544
|
|
1545
1545
|
|
1546
|
-
# line
|
1546
|
+
# line 775 "/Users/ammar/src/code/ruby/projects/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
|
1547
1547
|
|
1548
1548
|
# General scanner error (catch all)
|
1549
1549
|
class ScannerError < StandardError; end
|
@@ -1604,7 +1604,7 @@ self.re_scanner_en_main = 138;
|
|
1604
1604
|
# This method may raise errors if a syntax error is encountered.
|
1605
1605
|
# --------------------------------------------------------------------------
|
1606
1606
|
def self.scan(input_object, &block)
|
1607
|
-
top, stack = 0, []
|
1607
|
+
@literal, top, stack = nil, 0, []
|
1608
1608
|
|
1609
1609
|
if input_object.is_a?(Regexp)
|
1610
1610
|
input = input_object.source
|
@@ -1639,7 +1639,7 @@ begin
|
|
1639
1639
|
act = 0
|
1640
1640
|
end
|
1641
1641
|
|
1642
|
-
# line
|
1642
|
+
# line 859 "/Users/ammar/src/code/ruby/projects/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
|
1643
1643
|
|
1644
1644
|
# line 1644 "/Users/ammar/src/code/ruby/projects/regexp_parser/lib/regexp_parser/scanner.rb"
|
1645
1645
|
begin
|
@@ -2229,8 +2229,6 @@ te = p+1
|
|
2229
2229
|
self.emit(type, :script_unknown, text, ts-1, te)
|
2230
2230
|
|
2231
2231
|
# Unicode blocks
|
2232
|
-
when 'inalphabeticpresentationforms'
|
2233
|
-
self.emit(type, :block_inalphabetic_presentation_forms, text, ts-1, te)
|
2234
2232
|
when 'inalphabeticpresentationforms'
|
2235
2233
|
self.emit(type, :block_inalphabetic_presentation_forms, text, ts-1, te)
|
2236
2234
|
when 'inarabicpresentationforms-a'
|
@@ -2747,13 +2745,6 @@ te = p+1
|
|
2747
2745
|
next
|
2748
2746
|
end
|
2749
2747
|
|
2750
|
-
begin
|
2751
|
-
top -= 1
|
2752
|
-
cs = stack[top]
|
2753
|
-
_goto_level = _again
|
2754
|
-
next
|
2755
|
-
end
|
2756
|
-
|
2757
2748
|
end
|
2758
2749
|
end
|
2759
2750
|
when 81 then
|
@@ -2787,7 +2778,7 @@ p = p - 1; begin
|
|
2787
2778
|
end
|
2788
2779
|
end
|
2789
2780
|
when 79 then
|
2790
|
-
# line
|
2781
|
+
# line 291 "/Users/ammar/src/code/ruby/projects/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
|
2791
2782
|
begin
|
2792
2783
|
te = p
|
2793
2784
|
p = p - 1; begin
|
@@ -2854,7 +2845,7 @@ end
|
|
2854
2845
|
end
|
2855
2846
|
end
|
2856
2847
|
when 87 then
|
2857
|
-
# line
|
2848
|
+
# line 301 "/Users/ammar/src/code/ruby/projects/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
|
2858
2849
|
begin
|
2859
2850
|
te = p+1
|
2860
2851
|
begin
|
@@ -2870,7 +2861,7 @@ te = p+1
|
|
2870
2861
|
end
|
2871
2862
|
end
|
2872
2863
|
when 92 then
|
2873
|
-
# line
|
2864
|
+
# line 307 "/Users/ammar/src/code/ruby/projects/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
|
2874
2865
|
begin
|
2875
2866
|
te = p+1
|
2876
2867
|
begin
|
@@ -2885,7 +2876,7 @@ te = p+1
|
|
2885
2876
|
end
|
2886
2877
|
end
|
2887
2878
|
when 84 then
|
2888
|
-
# line
|
2879
|
+
# line 312 "/Users/ammar/src/code/ruby/projects/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
|
2889
2880
|
begin
|
2890
2881
|
te = p+1
|
2891
2882
|
begin
|
@@ -2916,7 +2907,7 @@ te = p+1
|
|
2916
2907
|
end
|
2917
2908
|
end
|
2918
2909
|
when 89 then
|
2919
|
-
# line
|
2910
|
+
# line 333 "/Users/ammar/src/code/ruby/projects/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
|
2920
2911
|
begin
|
2921
2912
|
te = p+1
|
2922
2913
|
begin
|
@@ -2942,7 +2933,7 @@ te = p+1
|
|
2942
2933
|
end
|
2943
2934
|
end
|
2944
2935
|
when 32 then
|
2945
|
-
# line
|
2936
|
+
# line 349 "/Users/ammar/src/code/ruby/projects/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
|
2946
2937
|
begin
|
2947
2938
|
te = p+1
|
2948
2939
|
begin
|
@@ -2962,7 +2953,7 @@ te = p+1
|
|
2962
2953
|
end
|
2963
2954
|
end
|
2964
2955
|
when 97 then
|
2965
|
-
# line
|
2956
|
+
# line 359 "/Users/ammar/src/code/ruby/projects/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
|
2966
2957
|
begin
|
2967
2958
|
te = p+1
|
2968
2959
|
begin
|
@@ -2977,7 +2968,7 @@ te = p+1
|
|
2977
2968
|
end
|
2978
2969
|
end
|
2979
2970
|
when 100 then
|
2980
|
-
# line
|
2971
|
+
# line 364 "/Users/ammar/src/code/ruby/projects/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
|
2981
2972
|
begin
|
2982
2973
|
te = p+1
|
2983
2974
|
begin
|
@@ -2992,7 +2983,7 @@ te = p+1
|
|
2992
2983
|
end
|
2993
2984
|
end
|
2994
2985
|
when 34 then
|
2995
|
-
# line
|
2986
|
+
# line 373 "/Users/ammar/src/code/ruby/projects/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
|
2996
2987
|
begin
|
2997
2988
|
te = p+1
|
2998
2989
|
begin
|
@@ -3007,7 +2998,7 @@ te = p+1
|
|
3007
2998
|
end
|
3008
2999
|
end
|
3009
3000
|
when 28 then
|
3010
|
-
# line
|
3001
|
+
# line 378 "/Users/ammar/src/code/ruby/projects/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
|
3011
3002
|
begin
|
3012
3003
|
te = p+1
|
3013
3004
|
begin
|
@@ -3032,7 +3023,7 @@ te = p+1
|
|
3032
3023
|
end
|
3033
3024
|
end
|
3034
3025
|
when 31 then
|
3035
|
-
# line
|
3026
|
+
# line 393 "/Users/ammar/src/code/ruby/projects/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
|
3036
3027
|
begin
|
3037
3028
|
te = p+1
|
3038
3029
|
begin
|
@@ -3057,7 +3048,7 @@ te = p+1
|
|
3057
3048
|
end
|
3058
3049
|
end
|
3059
3050
|
when 88 then
|
3060
|
-
# line
|
3051
|
+
# line 408 "/Users/ammar/src/code/ruby/projects/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
|
3061
3052
|
begin
|
3062
3053
|
te = p+1
|
3063
3054
|
begin
|
@@ -3070,17 +3061,11 @@ te = p+1
|
|
3070
3061
|
_goto_level = _again
|
3071
3062
|
next
|
3072
3063
|
end
|
3073
|
-
begin
|
3074
|
-
top -= 1
|
3075
|
-
cs = stack[top]
|
3076
|
-
_goto_level = _again
|
3077
|
-
next
|
3078
|
-
end
|
3079
3064
|
|
3080
3065
|
end
|
3081
3066
|
end
|
3082
3067
|
when 83 then
|
3083
|
-
# line
|
3068
|
+
# line 414 "/Users/ammar/src/code/ruby/projects/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
|
3084
3069
|
begin
|
3085
3070
|
te = p+1
|
3086
3071
|
begin
|
@@ -3095,7 +3080,7 @@ te = p+1
|
|
3095
3080
|
end
|
3096
3081
|
end
|
3097
3082
|
when 91 then
|
3098
|
-
# line
|
3083
|
+
# line 307 "/Users/ammar/src/code/ruby/projects/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
|
3099
3084
|
begin
|
3100
3085
|
te = p
|
3101
3086
|
p = p - 1; begin
|
@@ -3110,7 +3095,7 @@ p = p - 1; begin
|
|
3110
3095
|
end
|
3111
3096
|
end
|
3112
3097
|
when 96 then
|
3113
|
-
# line
|
3098
|
+
# line 359 "/Users/ammar/src/code/ruby/projects/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
|
3114
3099
|
begin
|
3115
3100
|
te = p
|
3116
3101
|
p = p - 1; begin
|
@@ -3125,7 +3110,7 @@ p = p - 1; begin
|
|
3125
3110
|
end
|
3126
3111
|
end
|
3127
3112
|
when 98 then
|
3128
|
-
# line
|
3113
|
+
# line 373 "/Users/ammar/src/code/ruby/projects/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
|
3129
3114
|
begin
|
3130
3115
|
te = p
|
3131
3116
|
p = p - 1; begin
|
@@ -3140,7 +3125,7 @@ p = p - 1; begin
|
|
3140
3125
|
end
|
3141
3126
|
end
|
3142
3127
|
when 94 then
|
3143
|
-
# line
|
3128
|
+
# line 393 "/Users/ammar/src/code/ruby/projects/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
|
3144
3129
|
begin
|
3145
3130
|
te = p
|
3146
3131
|
p = p - 1; begin
|
@@ -3165,7 +3150,7 @@ p = p - 1; begin
|
|
3165
3150
|
end
|
3166
3151
|
end
|
3167
3152
|
when 35 then
|
3168
|
-
# line
|
3153
|
+
# line 373 "/Users/ammar/src/code/ruby/projects/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
|
3169
3154
|
begin
|
3170
3155
|
begin p = ((te))-1; end
|
3171
3156
|
begin
|
@@ -3180,7 +3165,7 @@ p = p - 1; begin
|
|
3180
3165
|
end
|
3181
3166
|
end
|
3182
3167
|
when 30 then
|
3183
|
-
# line
|
3168
|
+
# line 393 "/Users/ammar/src/code/ruby/projects/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
|
3184
3169
|
begin
|
3185
3170
|
begin p = ((te))-1; end
|
3186
3171
|
begin
|
@@ -3236,7 +3221,7 @@ p = p - 1; begin
|
|
3236
3221
|
end
|
3237
3222
|
end
|
3238
3223
|
when 37 then
|
3239
|
-
# line
|
3224
|
+
# line 424 "/Users/ammar/src/code/ruby/projects/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
|
3240
3225
|
begin
|
3241
3226
|
te = p+1
|
3242
3227
|
begin
|
@@ -3246,7 +3231,7 @@ te = p+1
|
|
3246
3231
|
end
|
3247
3232
|
end
|
3248
3233
|
when 101 then
|
3249
|
-
# line
|
3234
|
+
# line 430 "/Users/ammar/src/code/ruby/projects/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
|
3250
3235
|
begin
|
3251
3236
|
te = p+1
|
3252
3237
|
begin
|
@@ -3262,7 +3247,7 @@ te = p+1
|
|
3262
3247
|
end
|
3263
3248
|
end
|
3264
3249
|
when 102 then
|
3265
|
-
# line
|
3250
|
+
# line 430 "/Users/ammar/src/code/ruby/projects/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
|
3266
3251
|
begin
|
3267
3252
|
te = p
|
3268
3253
|
p = p - 1; begin
|
@@ -3278,7 +3263,7 @@ p = p - 1; begin
|
|
3278
3263
|
end
|
3279
3264
|
end
|
3280
3265
|
when 36 then
|
3281
|
-
# line
|
3266
|
+
# line 430 "/Users/ammar/src/code/ruby/projects/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
|
3282
3267
|
begin
|
3283
3268
|
begin p = ((te))-1; end
|
3284
3269
|
begin
|
@@ -3294,7 +3279,7 @@ p = p - 1; begin
|
|
3294
3279
|
end
|
3295
3280
|
end
|
3296
3281
|
when 43 then
|
3297
|
-
# line
|
3282
|
+
# line 443 "/Users/ammar/src/code/ruby/projects/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
|
3298
3283
|
begin
|
3299
3284
|
te = p+1
|
3300
3285
|
begin
|
@@ -3302,7 +3287,7 @@ te = p+1
|
|
3302
3287
|
end
|
3303
3288
|
end
|
3304
3289
|
when 46 then
|
3305
|
-
# line
|
3290
|
+
# line 447 "/Users/ammar/src/code/ruby/projects/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
|
3306
3291
|
begin
|
3307
3292
|
te = p+1
|
3308
3293
|
begin
|
@@ -3315,7 +3300,7 @@ te = p+1
|
|
3315
3300
|
end
|
3316
3301
|
end
|
3317
3302
|
when 45 then
|
3318
|
-
# line
|
3303
|
+
# line 458 "/Users/ammar/src/code/ruby/projects/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
|
3319
3304
|
begin
|
3320
3305
|
te = p+1
|
3321
3306
|
begin
|
@@ -3323,7 +3308,7 @@ te = p+1
|
|
3323
3308
|
end
|
3324
3309
|
end
|
3325
3310
|
when 40 then
|
3326
|
-
# line
|
3311
|
+
# line 462 "/Users/ammar/src/code/ruby/projects/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
|
3327
3312
|
begin
|
3328
3313
|
te = p+1
|
3329
3314
|
begin
|
@@ -3331,7 +3316,7 @@ te = p+1
|
|
3331
3316
|
end
|
3332
3317
|
end
|
3333
3318
|
when 60 then
|
3334
|
-
# line
|
3319
|
+
# line 466 "/Users/ammar/src/code/ruby/projects/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
|
3335
3320
|
begin
|
3336
3321
|
te = p+1
|
3337
3322
|
begin
|
@@ -3339,7 +3324,7 @@ te = p+1
|
|
3339
3324
|
end
|
3340
3325
|
end
|
3341
3326
|
when 58 then
|
3342
|
-
# line
|
3327
|
+
# line 470 "/Users/ammar/src/code/ruby/projects/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
|
3343
3328
|
begin
|
3344
3329
|
te = p+1
|
3345
3330
|
begin
|
@@ -3357,7 +3342,7 @@ te = p+1
|
|
3357
3342
|
end
|
3358
3343
|
end
|
3359
3344
|
when 59 then
|
3360
|
-
# line
|
3345
|
+
# line 490 "/Users/ammar/src/code/ruby/projects/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
|
3361
3346
|
begin
|
3362
3347
|
te = p+1
|
3363
3348
|
begin
|
@@ -3377,7 +3362,7 @@ te = p+1
|
|
3377
3362
|
end
|
3378
3363
|
end
|
3379
3364
|
when 44 then
|
3380
|
-
# line
|
3365
|
+
# line 509 "/Users/ammar/src/code/ruby/projects/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
|
3381
3366
|
begin
|
3382
3367
|
te = p+1
|
3383
3368
|
begin
|
@@ -3396,7 +3381,7 @@ te = p+1
|
|
3396
3381
|
end
|
3397
3382
|
end
|
3398
3383
|
when 8 then
|
3399
|
-
# line
|
3384
|
+
# line 521 "/Users/ammar/src/code/ruby/projects/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
|
3400
3385
|
begin
|
3401
3386
|
te = p+1
|
3402
3387
|
begin
|
@@ -3419,7 +3404,7 @@ te = p+1
|
|
3419
3404
|
end
|
3420
3405
|
end
|
3421
3406
|
when 9 then
|
3422
|
-
# line
|
3407
|
+
# line 554 "/Users/ammar/src/code/ruby/projects/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
|
3423
3408
|
begin
|
3424
3409
|
te = p+1
|
3425
3410
|
begin
|
@@ -3427,7 +3412,7 @@ te = p+1
|
|
3427
3412
|
end
|
3428
3413
|
end
|
3429
3414
|
when 6 then
|
3430
|
-
# line
|
3415
|
+
# line 564 "/Users/ammar/src/code/ruby/projects/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
|
3431
3416
|
begin
|
3432
3417
|
te = p+1
|
3433
3418
|
begin
|
@@ -3440,7 +3425,7 @@ te = p+1
|
|
3440
3425
|
end
|
3441
3426
|
end
|
3442
3427
|
when 10 then
|
3443
|
-
# line
|
3428
|
+
# line 580 "/Users/ammar/src/code/ruby/projects/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
|
3444
3429
|
begin
|
3445
3430
|
te = p+1
|
3446
3431
|
begin
|
@@ -3465,7 +3450,7 @@ te = p+1
|
|
3465
3450
|
end
|
3466
3451
|
end
|
3467
3452
|
when 13 then
|
3468
|
-
# line
|
3453
|
+
# line 635 "/Users/ammar/src/code/ruby/projects/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
|
3469
3454
|
begin
|
3470
3455
|
te = p+1
|
3471
3456
|
begin
|
@@ -3537,7 +3522,7 @@ te = p+1
|
|
3537
3522
|
end
|
3538
3523
|
end
|
3539
3524
|
when 56 then
|
3540
|
-
# line
|
3525
|
+
# line 706 "/Users/ammar/src/code/ruby/projects/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
|
3541
3526
|
begin
|
3542
3527
|
te = p+1
|
3543
3528
|
begin
|
@@ -3549,7 +3534,7 @@ te = p+1
|
|
3549
3534
|
end
|
3550
3535
|
end
|
3551
3536
|
when 52 then
|
3552
|
-
# line
|
3537
|
+
# line 714 "/Users/ammar/src/code/ruby/projects/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
|
3553
3538
|
begin
|
3554
3539
|
te = p+1
|
3555
3540
|
begin
|
@@ -3561,7 +3546,7 @@ te = p+1
|
|
3561
3546
|
end
|
3562
3547
|
end
|
3563
3548
|
when 54 then
|
3564
|
-
# line
|
3549
|
+
# line 722 "/Users/ammar/src/code/ruby/projects/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
|
3565
3550
|
begin
|
3566
3551
|
te = p+1
|
3567
3552
|
begin
|
@@ -3573,7 +3558,7 @@ te = p+1
|
|
3573
3558
|
end
|
3574
3559
|
end
|
3575
3560
|
when 62 then
|
3576
|
-
# line
|
3561
|
+
# line 730 "/Users/ammar/src/code/ruby/projects/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
|
3577
3562
|
begin
|
3578
3563
|
te = p+1
|
3579
3564
|
begin
|
@@ -3581,7 +3566,7 @@ te = p+1
|
|
3581
3566
|
end
|
3582
3567
|
end
|
3583
3568
|
when 4 then
|
3584
|
-
# line
|
3569
|
+
# line 740 "/Users/ammar/src/code/ruby/projects/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
|
3585
3570
|
begin
|
3586
3571
|
te = p+1
|
3587
3572
|
begin
|
@@ -3593,7 +3578,7 @@ te = p+1
|
|
3593
3578
|
end
|
3594
3579
|
end
|
3595
3580
|
when 49 then
|
3596
|
-
# line
|
3581
|
+
# line 601 "/Users/ammar/src/code/ruby/projects/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
|
3597
3582
|
begin
|
3598
3583
|
te = p
|
3599
3584
|
p = p - 1; begin
|
@@ -3602,7 +3587,7 @@ p = p - 1; begin
|
|
3602
3587
|
end
|
3603
3588
|
end
|
3604
3589
|
when 55 then
|
3605
|
-
# line
|
3590
|
+
# line 706 "/Users/ammar/src/code/ruby/projects/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
|
3606
3591
|
begin
|
3607
3592
|
te = p
|
3608
3593
|
p = p - 1; begin
|
@@ -3614,7 +3599,7 @@ p = p - 1; begin
|
|
3614
3599
|
end
|
3615
3600
|
end
|
3616
3601
|
when 51 then
|
3617
|
-
# line
|
3602
|
+
# line 714 "/Users/ammar/src/code/ruby/projects/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
|
3618
3603
|
begin
|
3619
3604
|
te = p
|
3620
3605
|
p = p - 1; begin
|
@@ -3626,7 +3611,7 @@ p = p - 1; begin
|
|
3626
3611
|
end
|
3627
3612
|
end
|
3628
3613
|
when 53 then
|
3629
|
-
# line
|
3614
|
+
# line 722 "/Users/ammar/src/code/ruby/projects/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
|
3630
3615
|
begin
|
3631
3616
|
te = p
|
3632
3617
|
p = p - 1; begin
|
@@ -3638,7 +3623,7 @@ p = p - 1; begin
|
|
3638
3623
|
end
|
3639
3624
|
end
|
3640
3625
|
when 61 then
|
3641
|
-
# line
|
3626
|
+
# line 730 "/Users/ammar/src/code/ruby/projects/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
|
3642
3627
|
begin
|
3643
3628
|
te = p
|
3644
3629
|
p = p - 1; begin
|
@@ -3646,7 +3631,7 @@ p = p - 1; begin
|
|
3646
3631
|
end
|
3647
3632
|
end
|
3648
3633
|
when 57 then
|
3649
|
-
# line
|
3634
|
+
# line 736 "/Users/ammar/src/code/ruby/projects/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
|
3650
3635
|
begin
|
3651
3636
|
te = p
|
3652
3637
|
p = p - 1; begin
|
@@ -3661,7 +3646,7 @@ p = p - 1; begin
|
|
3661
3646
|
end
|
3662
3647
|
end
|
3663
3648
|
when 48 then
|
3664
|
-
# line
|
3649
|
+
# line 748 "/Users/ammar/src/code/ruby/projects/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
|
3665
3650
|
begin
|
3666
3651
|
te = p
|
3667
3652
|
p = p - 1; begin
|
@@ -3673,7 +3658,7 @@ p = p - 1; begin
|
|
3673
3658
|
end
|
3674
3659
|
end
|
3675
3660
|
when 47 then
|
3676
|
-
# line
|
3661
|
+
# line 763 "/Users/ammar/src/code/ruby/projects/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
|
3677
3662
|
begin
|
3678
3663
|
te = p
|
3679
3664
|
p = p - 1; begin
|
@@ -3681,7 +3666,7 @@ p = p - 1; begin
|
|
3681
3666
|
end
|
3682
3667
|
end
|
3683
3668
|
when 5 then
|
3684
|
-
# line
|
3669
|
+
# line 601 "/Users/ammar/src/code/ruby/projects/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
|
3685
3670
|
begin
|
3686
3671
|
begin p = ((te))-1; end
|
3687
3672
|
begin
|
@@ -3690,7 +3675,7 @@ p = p - 1; begin
|
|
3690
3675
|
end
|
3691
3676
|
end
|
3692
3677
|
when 12 then
|
3693
|
-
# line
|
3678
|
+
# line 736 "/Users/ammar/src/code/ruby/projects/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
|
3694
3679
|
begin
|
3695
3680
|
begin p = ((te))-1; end
|
3696
3681
|
begin
|
@@ -3705,7 +3690,7 @@ p = p - 1; begin
|
|
3705
3690
|
end
|
3706
3691
|
end
|
3707
3692
|
when 3 then
|
3708
|
-
# line
|
3693
|
+
# line 763 "/Users/ammar/src/code/ruby/projects/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
|
3709
3694
|
begin
|
3710
3695
|
begin p = ((te))-1; end
|
3711
3696
|
begin
|
@@ -3787,7 +3772,7 @@ p = p - 1; begin
|
|
3787
3772
|
text = ts ? copy(data, ts-1..-1) : data.pack('c*')
|
3788
3773
|
raise PrematureEndError.new( text )
|
3789
3774
|
end
|
3790
|
-
# line
|
3775
|
+
# line 359 "/Users/ammar/src/code/ruby/projects/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
|
3791
3776
|
begin
|
3792
3777
|
te = p
|
3793
3778
|
p = p - 1; begin
|
@@ -3808,7 +3793,7 @@ p = p - 1; begin
|
|
3808
3793
|
text = ts ? copy(data, ts-1..-1) : data.pack('c*')
|
3809
3794
|
raise PrematureEndError.new( text )
|
3810
3795
|
end
|
3811
|
-
# line
|
3796
|
+
# line 373 "/Users/ammar/src/code/ruby/projects/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
|
3812
3797
|
begin
|
3813
3798
|
te = p
|
3814
3799
|
p = p - 1; begin
|
@@ -3829,7 +3814,7 @@ p = p - 1; begin
|
|
3829
3814
|
text = ts ? copy(data, ts-1..-1) : data.pack('c*')
|
3830
3815
|
raise PrematureEndError.new( text )
|
3831
3816
|
end
|
3832
|
-
# line
|
3817
|
+
# line 393 "/Users/ammar/src/code/ruby/projects/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
|
3833
3818
|
begin
|
3834
3819
|
te = p
|
3835
3820
|
p = p - 1; begin
|
@@ -3860,7 +3845,7 @@ p = p - 1; begin
|
|
3860
3845
|
text = ts ? copy(data, ts-1..-1) : data.pack('c*')
|
3861
3846
|
raise PrematureEndError.new( text )
|
3862
3847
|
end
|
3863
|
-
# line
|
3848
|
+
# line 393 "/Users/ammar/src/code/ruby/projects/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
|
3864
3849
|
begin
|
3865
3850
|
begin p = ((te))-1; end
|
3866
3851
|
begin
|
@@ -3891,7 +3876,7 @@ p = p - 1; begin
|
|
3891
3876
|
text = ts ? copy(data, ts-1..-1) : data.pack('c*')
|
3892
3877
|
raise InvalidSequenceError.new('sequence', text)
|
3893
3878
|
end
|
3894
|
-
# line
|
3879
|
+
# line 369 "/Users/ammar/src/code/ruby/projects/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
|
3895
3880
|
begin
|
3896
3881
|
te = p+1
|
3897
3882
|
begin
|
@@ -3915,7 +3900,7 @@ te = p+1
|
|
3915
3900
|
# line 146 "/Users/ammar/src/code/ruby/projects/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
|
3916
3901
|
begin
|
3917
3902
|
@group_depth -= 1; @in_group = @group_depth > 0 ? true : false end
|
3918
|
-
# line
|
3903
|
+
# line 539 "/Users/ammar/src/code/ruby/projects/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
|
3919
3904
|
begin
|
3920
3905
|
te = p+1
|
3921
3906
|
begin
|
@@ -3926,7 +3911,7 @@ te = p+1
|
|
3926
3911
|
# line 146 "/Users/ammar/src/code/ruby/projects/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
|
3927
3912
|
begin
|
3928
3913
|
@group_depth -= 1; @in_group = @group_depth > 0 ? true : false end
|
3929
|
-
# line
|
3914
|
+
# line 606 "/Users/ammar/src/code/ruby/projects/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
|
3930
3915
|
begin
|
3931
3916
|
te = p+1
|
3932
3917
|
begin
|
@@ -3976,7 +3961,7 @@ act = 18; end
|
|
3976
3961
|
begin
|
3977
3962
|
te = p+1
|
3978
3963
|
end
|
3979
|
-
# line
|
3964
|
+
# line 291 "/Users/ammar/src/code/ruby/projects/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
|
3980
3965
|
begin
|
3981
3966
|
act = 20; end
|
3982
3967
|
when 86 then
|
@@ -3984,7 +3969,7 @@ act = 20; end
|
|
3984
3969
|
begin
|
3985
3970
|
te = p+1
|
3986
3971
|
end
|
3987
|
-
# line
|
3972
|
+
# line 301 "/Users/ammar/src/code/ruby/projects/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
|
3988
3973
|
begin
|
3989
3974
|
act = 21; end
|
3990
3975
|
when 85 then
|
@@ -3992,7 +3977,7 @@ act = 21; end
|
|
3992
3977
|
begin
|
3993
3978
|
te = p+1
|
3994
3979
|
end
|
3995
|
-
# line
|
3980
|
+
# line 307 "/Users/ammar/src/code/ruby/projects/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
|
3996
3981
|
begin
|
3997
3982
|
act = 22; end
|
3998
3983
|
when 2 then
|
@@ -4000,10 +3985,10 @@ act = 22; end
|
|
4000
3985
|
begin
|
4001
3986
|
te = p+1
|
4002
3987
|
end
|
4003
|
-
# line
|
3988
|
+
# line 763 "/Users/ammar/src/code/ruby/projects/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
|
4004
3989
|
begin
|
4005
3990
|
act = 59; end
|
4006
|
-
# line
|
3991
|
+
# line 3991 "/Users/ammar/src/code/ruby/projects/regexp_parser/lib/regexp_parser/scanner.rb"
|
4007
3992
|
end
|
4008
3993
|
end
|
4009
3994
|
end
|
@@ -4021,7 +4006,7 @@ ts = nil; end
|
|
4021
4006
|
begin
|
4022
4007
|
act = 0
|
4023
4008
|
end
|
4024
|
-
# line
|
4009
|
+
# line 4009 "/Users/ammar/src/code/ruby/projects/regexp_parser/lib/regexp_parser/scanner.rb"
|
4025
4010
|
end
|
4026
4011
|
|
4027
4012
|
if cs == 0
|
@@ -4055,7 +4040,7 @@ act = 0
|
|
4055
4040
|
text = ts ? copy(data, ts-1..-1) : data.pack('c*')
|
4056
4041
|
raise PrematureEndError.new( text )
|
4057
4042
|
end
|
4058
|
-
# line
|
4043
|
+
# line 4043 "/Users/ammar/src/code/ruby/projects/regexp_parser/lib/regexp_parser/scanner.rb"
|
4059
4044
|
end
|
4060
4045
|
end
|
4061
4046
|
|
@@ -4066,7 +4051,7 @@ act = 0
|
|
4066
4051
|
end
|
4067
4052
|
end
|
4068
4053
|
|
4069
|
-
# line
|
4054
|
+
# line 860 "/Users/ammar/src/code/ruby/projects/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
|
4070
4055
|
|
4071
4056
|
if cs == re_scanner_error
|
4072
4057
|
text = ts ? copy(data, ts-1..-1) : data.pack('c*')
|
@@ -579,8 +579,6 @@
|
|
579
579
|
self.emit(type, :script_unknown, text, ts-1, te)
|
580
580
|
|
581
581
|
# Unicode blocks
|
582
|
-
when 'inalphabeticpresentationforms'
|
583
|
-
self.emit(type, :block_inalphabetic_presentation_forms, text, ts-1, te)
|
584
582
|
when 'inalphabeticpresentationforms'
|
585
583
|
self.emit(type, :block_inalphabetic_presentation_forms, text, ts-1, te)
|
586
584
|
when 'inarabicpresentationforms-a'
|
@@ -281,7 +281,6 @@
|
|
281
281
|
fhold;
|
282
282
|
fnext character_set;
|
283
283
|
fcall unicode_property;
|
284
|
-
fret;
|
285
284
|
};
|
286
285
|
|
287
286
|
# special case exclusion of escaped dash, could be cleaner.
|
@@ -409,7 +408,7 @@
|
|
409
408
|
property_char > (escaped_alpha, 2) {
|
410
409
|
fhold;
|
411
410
|
fnext main;
|
412
|
-
fcall unicode_property;
|
411
|
+
fcall unicode_property;
|
413
412
|
};
|
414
413
|
|
415
414
|
(any -- non_literal_escape) > (escaped_alpha, 1) {
|
@@ -833,7 +832,7 @@ module Regexp::Scanner
|
|
833
832
|
# This method may raise errors if a syntax error is encountered.
|
834
833
|
# --------------------------------------------------------------------------
|
835
834
|
def self.scan(input_object, &block)
|
836
|
-
top, stack = 0, []
|
835
|
+
@literal, top, stack = nil, 0, []
|
837
836
|
|
838
837
|
if input_object.is_a?(Regexp)
|
839
838
|
input = input_object.source
|
data/lib/regexp_parser/token.rb
CHANGED
@@ -32,7 +32,6 @@ class ExpressionConditionals < Test::Unit::TestCase
|
|
32
32
|
def test_expression_conditional_level_one
|
33
33
|
condition = @cond_1.condition
|
34
34
|
branch_1 = @cond_1.branches.first
|
35
|
-
branch_2 = @cond_1.branches.last
|
36
35
|
|
37
36
|
# Condition
|
38
37
|
assert_equal true, is_conditional_condition?(condition)
|
@@ -31,7 +31,7 @@ class LexerConditionals < Test::Unit::TestCase
|
|
31
31
|
regexp = /((?<A>a)(?<B>(?(<A>)b|((?(<B>)[e-g]|[h-j])))))/
|
32
32
|
tokens = RL.lex(regexp)
|
33
33
|
|
34
|
-
|
34
|
+
[
|
35
35
|
[ 0, :group, :capture, '(', 0, 1, 0, 0, 0],
|
36
36
|
[ 1, :group, :named, '(?<A>', 1, 6, 1, 0, 0],
|
37
37
|
|
@@ -70,7 +70,7 @@ class LexerConditionals < Test::Unit::TestCase
|
|
70
70
|
regexp = /(a(b(c)))(?(1)(?(2)(?(3)d|e))|(?(3)(?(2)f|g)|(?(1)f|g)))/
|
71
71
|
tokens = RL.lex(regexp)
|
72
72
|
|
73
|
-
|
73
|
+
[
|
74
74
|
[ 9, :conditional, :open, '(?', 9, 11, 0, 0, 0],
|
75
75
|
[10, :conditional, :condition, '(1)', 11, 14, 0, 0, 1],
|
76
76
|
|
@@ -46,7 +46,7 @@ class TestRegexpParserQuantifiers < Test::Unit::TestCase
|
|
46
46
|
assert_equal true, exp.quantified?
|
47
47
|
assert_equal :zero_or_more, exp.quantifier.token
|
48
48
|
assert_equal 0, exp.quantifier.min
|
49
|
-
assert_equal
|
49
|
+
assert_equal(-1, exp.quantifier.max)
|
50
50
|
assert_equal :greedy, exp.quantifier.mode
|
51
51
|
end
|
52
52
|
|
@@ -57,7 +57,7 @@ class TestRegexpParserQuantifiers < Test::Unit::TestCase
|
|
57
57
|
assert_equal true, exp.quantified?
|
58
58
|
assert_equal :zero_or_more, exp.quantifier.token
|
59
59
|
assert_equal 0, exp.quantifier.min
|
60
|
-
assert_equal
|
60
|
+
assert_equal(-1, exp.quantifier.max)
|
61
61
|
assert_equal :reluctant, exp.quantifier.mode
|
62
62
|
assert_equal true, exp.reluctant?
|
63
63
|
end
|
@@ -69,7 +69,7 @@ class TestRegexpParserQuantifiers < Test::Unit::TestCase
|
|
69
69
|
assert_equal true, exp.quantified?
|
70
70
|
assert_equal :zero_or_more, exp.quantifier.token
|
71
71
|
assert_equal 0, exp.quantifier.min
|
72
|
-
assert_equal
|
72
|
+
assert_equal(-1, exp.quantifier.max)
|
73
73
|
assert_equal :possessive, exp.quantifier.mode
|
74
74
|
assert_equal true, exp.possessive?
|
75
75
|
end
|
@@ -82,7 +82,7 @@ class TestRegexpParserQuantifiers < Test::Unit::TestCase
|
|
82
82
|
assert_equal true, exp.quantified?
|
83
83
|
assert_equal :one_or_more, exp.quantifier.token
|
84
84
|
assert_equal 1, exp.quantifier.min
|
85
|
-
assert_equal
|
85
|
+
assert_equal(-1, exp.quantifier.max)
|
86
86
|
assert_equal :greedy, exp.quantifier.mode
|
87
87
|
end
|
88
88
|
|
@@ -93,7 +93,7 @@ class TestRegexpParserQuantifiers < Test::Unit::TestCase
|
|
93
93
|
assert_equal true, exp.quantified?
|
94
94
|
assert_equal :one_or_more, exp.quantifier.token
|
95
95
|
assert_equal 1, exp.quantifier.min
|
96
|
-
assert_equal
|
96
|
+
assert_equal(-1, exp.quantifier.max)
|
97
97
|
assert_equal :reluctant, exp.quantifier.mode
|
98
98
|
assert_equal true, exp.reluctant?
|
99
99
|
end
|
@@ -105,7 +105,7 @@ class TestRegexpParserQuantifiers < Test::Unit::TestCase
|
|
105
105
|
assert_equal true, exp.quantified?
|
106
106
|
assert_equal :one_or_more, exp.quantifier.token
|
107
107
|
assert_equal 1, exp.quantifier.min
|
108
|
-
assert_equal
|
108
|
+
assert_equal(-1, exp.quantifier.max)
|
109
109
|
assert_equal :possessive, exp.quantifier.mode
|
110
110
|
assert_equal true, exp.possessive?
|
111
111
|
end
|
@@ -154,7 +154,7 @@ class TestRegexpParserQuantifiers < Test::Unit::TestCase
|
|
154
154
|
assert_equal true, exp.quantified?
|
155
155
|
assert_equal :interval, exp.quantifier.token
|
156
156
|
assert_equal 2, exp.quantifier.min
|
157
|
-
assert_equal
|
157
|
+
assert_equal(-1, exp.quantifier.max)
|
158
158
|
assert_equal :greedy, exp.quantifier.mode
|
159
159
|
end
|
160
160
|
|
@@ -166,7 +166,7 @@ class TestRegexpParserQuantifiers < Test::Unit::TestCase
|
|
166
166
|
assert_equal :interval, exp.quantifier.token
|
167
167
|
assert_equal '{2,}?', exp.quantifier.text
|
168
168
|
assert_equal 2, exp.quantifier.min
|
169
|
-
assert_equal
|
169
|
+
assert_equal(-1, exp.quantifier.max)
|
170
170
|
assert_equal :reluctant, exp.quantifier.mode
|
171
171
|
assert_equal true, exp.reluctant?
|
172
172
|
end
|
@@ -179,7 +179,7 @@ class TestRegexpParserQuantifiers < Test::Unit::TestCase
|
|
179
179
|
assert_equal :interval, exp.quantifier.token
|
180
180
|
assert_equal '{3,}+', exp.quantifier.text
|
181
181
|
assert_equal 3, exp.quantifier.min
|
182
|
-
assert_equal
|
182
|
+
assert_equal(-1, exp.quantifier.max)
|
183
183
|
assert_equal :possessive, exp.quantifier.mode
|
184
184
|
assert_equal true, exp.possessive?
|
185
185
|
end
|
data/test/parser/test_sets.rb
CHANGED
@@ -13,7 +13,7 @@ class ScannerEscapes < Test::Unit::TestCase
|
|
13
13
|
/c\tt/ => [1, :escape, :tab, '\t', 1, 3],
|
14
14
|
/c\vt/ => [1, :escape, :vertical_tab, '\v', 1, 3],
|
15
15
|
|
16
|
-
|
16
|
+
'c\qt' => [1, :escape, :literal, '\q', 1, 3],
|
17
17
|
|
18
18
|
'a\012c' => [1, :escape, :octal, '\012', 1, 5],
|
19
19
|
'a\0124' => [1, :escape, :octal, '\012', 1, 5],
|
@@ -0,0 +1,41 @@
|
|
1
|
+
require 'pathname'
|
2
|
+
|
3
|
+
module RegexpParserTest
|
4
|
+
class Runner
|
5
|
+
def initialize(arguments, warning_whitelist)
|
6
|
+
@arguments = arguments
|
7
|
+
@warning_whitelist = warning_whitelist
|
8
|
+
end
|
9
|
+
|
10
|
+
def run
|
11
|
+
test_status = nil
|
12
|
+
|
13
|
+
Warning::Filter.new(warning_whitelist).assert_expected_warnings_only do
|
14
|
+
setup
|
15
|
+
test_status = run_test_unit
|
16
|
+
end
|
17
|
+
|
18
|
+
test_status
|
19
|
+
end
|
20
|
+
|
21
|
+
private
|
22
|
+
|
23
|
+
def setup
|
24
|
+
$VERBOSE = true
|
25
|
+
|
26
|
+
test_files.each(&method(:require))
|
27
|
+
end
|
28
|
+
|
29
|
+
def run_test_unit
|
30
|
+
Test::Unit::AutoRunner.run
|
31
|
+
end
|
32
|
+
|
33
|
+
def test_files
|
34
|
+
arguments
|
35
|
+
.map { |path| Pathname.new(path).expand_path.freeze }
|
36
|
+
.select(&:file?)
|
37
|
+
end
|
38
|
+
|
39
|
+
attr_reader :arguments, :warning_whitelist
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,59 @@
|
|
1
|
+
require 'set'
|
2
|
+
|
3
|
+
module RegexpParserTest
|
4
|
+
class Warning
|
5
|
+
class UnexpectedWarnings < StandardError
|
6
|
+
MSG = 'Unexpected warnings: %s'.freeze
|
7
|
+
|
8
|
+
def initialize(warnings)
|
9
|
+
super(MSG % warnings.join("\n"))
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
class Filter
|
14
|
+
def initialize(whitelist)
|
15
|
+
@whitelist = whitelist
|
16
|
+
end
|
17
|
+
|
18
|
+
def assert_expected_warnings_only
|
19
|
+
original = $stderr
|
20
|
+
$stderr = Extractor.new(original, @whitelist)
|
21
|
+
|
22
|
+
yield
|
23
|
+
|
24
|
+
assert_no_warnings($stderr.warnings)
|
25
|
+
ensure
|
26
|
+
$stderr = original
|
27
|
+
end
|
28
|
+
|
29
|
+
private
|
30
|
+
|
31
|
+
def assert_no_warnings(warnings)
|
32
|
+
fail UnexpectedWarnings, warnings.to_a if warnings.any?
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
class Extractor < DelegateClass(IO)
|
37
|
+
PATTERN = /\A(?:.+):(?:\d+): warning: (?:.+)\n\z/.freeze
|
38
|
+
|
39
|
+
def initialize(io, whitelist)
|
40
|
+
@whitelist = whitelist
|
41
|
+
@warnings = Set.new
|
42
|
+
super(io)
|
43
|
+
end
|
44
|
+
|
45
|
+
def write(message)
|
46
|
+
return super if PATTERN !~ message
|
47
|
+
|
48
|
+
warning = message.chomp
|
49
|
+
@warnings << warning if @whitelist.none?(&warning.method(:end_with?))
|
50
|
+
|
51
|
+
self
|
52
|
+
end
|
53
|
+
|
54
|
+
def warnings
|
55
|
+
@warnings.dup.freeze
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
@@ -20,8 +20,6 @@ class TestSyntaxRuby_V193 < Test::Unit::TestCase
|
|
20
20
|
}
|
21
21
|
|
22
22
|
tests.each do |method, types|
|
23
|
-
expected = method == :excludes ? false : true
|
24
|
-
|
25
23
|
types.each do |type, tokens|
|
26
24
|
tokens.each do |token|
|
27
25
|
define_method "test_syntax_ruby_v193_#{method}_#{type}_#{token}" do
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: regexp_parser
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ammar Ali
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-06-08 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: A library for tokenizing, lexing, and parsing Ruby regular expressions.
|
14
14
|
email:
|
@@ -144,6 +144,9 @@ files:
|
|
144
144
|
- test/scanner/test_sets.rb
|
145
145
|
- test/scanner/test_types.rb
|
146
146
|
- test/scanner/test_unicode_blocks.rb
|
147
|
+
- test/support/disable_autotest.rb
|
148
|
+
- test/support/runner.rb
|
149
|
+
- test/support/warning_extractor.rb
|
147
150
|
- test/syntax/ruby/test_1.8.rb
|
148
151
|
- test/syntax/ruby/test_1.9.1.rb
|
149
152
|
- test/syntax/ruby/test_1.9.3.rb
|
@@ -233,6 +236,9 @@ test_files:
|
|
233
236
|
- test/scanner/test_sets.rb
|
234
237
|
- test/scanner/test_types.rb
|
235
238
|
- test/scanner/test_unicode_blocks.rb
|
239
|
+
- test/support/disable_autotest.rb
|
240
|
+
- test/support/runner.rb
|
241
|
+
- test/support/warning_extractor.rb
|
236
242
|
- test/syntax/ruby/test_1.8.rb
|
237
243
|
- test/syntax/ruby/test_1.9.1.rb
|
238
244
|
- test/syntax/ruby/test_1.9.3.rb
|