regexp_parser 0.3.5 → 0.3.6
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.
- 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
|