regexp_parser 1.8.0 → 1.8.1
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.md +10 -0
- data/lib/regexp_parser/scanner.rb +18 -12
- data/lib/regexp_parser/scanner/scanner.rl +3 -1
- data/lib/regexp_parser/version.rb +1 -1
- data/regexp_parser.gemspec +1 -1
- data/spec/parser/free_space_spec.rb +4 -25
- data/spec/scanner/free_space_spec.rb +32 -0
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 047ef5746234f1e25d914d669596a9811f6c5871e3f8c2516434470d561a7c92
|
4
|
+
data.tar.gz: b3ec51e10f4331a7c0563ad7ab6f78ead20482baa1eb3c32a0de0d1f769bdcc0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e06fee359a02e12a0c142ea1175b96de4d7bbc2af2d9ec83255fa2849e8922bfdf04ad3f26e2b10a1d2f57e87830e864feaa9b444c714de54799b97bda62ce4b
|
7
|
+
data.tar.gz: 8de81ed00adc5f760d3770ddf40c200b20d3671b4ee3832d43dcdd0956d7cfe4557bf30a8f7e994bbe82436ab3f8c62038c3088214ddf0907af0c301e2ffd58c
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,15 @@
|
|
1
1
|
## [Unreleased]
|
2
2
|
|
3
|
+
### [1.8.1] - 2020-09-28 - [Janosch Müller](mailto:janosch84@gmail.com)
|
4
|
+
|
5
|
+
### Fixed
|
6
|
+
|
7
|
+
- fixed scanning of comment-like text in normal mode
|
8
|
+
* this was an old bug, but had become more prevalent in v1.8.0
|
9
|
+
* thanks to [Tietew](https://github.com/Tietew) for the report
|
10
|
+
- specified correct minimum Ruby version in gemspec
|
11
|
+
* it said 1.9 but really required 2.0 as of v1.8.0
|
12
|
+
|
3
13
|
### [1.8.0] - 2020-09-20 - [Janosch Müller](mailto:janosch84@gmail.com)
|
4
14
|
|
5
15
|
### Changed
|
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
# line 1 "/Users/jannoschmuller/code/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
|
4
4
|
|
5
|
-
# line
|
5
|
+
# line 678 "/Users/jannoschmuller/code/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
|
6
6
|
|
7
7
|
|
8
8
|
# THIS IS A GENERATED FILE, DO NOT EDIT DIRECTLY
|
@@ -1131,7 +1131,7 @@ end
|
|
1131
1131
|
self.re_scanner_en_main = 110;
|
1132
1132
|
|
1133
1133
|
|
1134
|
-
# line
|
1134
|
+
# line 765 "/Users/jannoschmuller/code/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
|
1135
1135
|
|
1136
1136
|
# line 1136 "/Users/jannoschmuller/code/regexp_parser/lib/regexp_parser/scanner.rb"
|
1137
1137
|
begin
|
@@ -1144,7 +1144,7 @@ begin
|
|
1144
1144
|
act = 0
|
1145
1145
|
end
|
1146
1146
|
|
1147
|
-
# line
|
1147
|
+
# line 766 "/Users/jannoschmuller/code/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
|
1148
1148
|
|
1149
1149
|
# line 1149 "/Users/jannoschmuller/code/regexp_parser/lib/regexp_parser/scanner.rb"
|
1150
1150
|
begin
|
@@ -2035,7 +2035,10 @@ te = p+1
|
|
2035
2035
|
if free_spacing
|
2036
2036
|
emit(:free_space, :comment, *text(data, ts, te))
|
2037
2037
|
else
|
2038
|
-
|
2038
|
+
# consume only the pound sign (#) and backtrack to do regular scanning
|
2039
|
+
append_literal(data, ts, ts + 1)
|
2040
|
+
begin p = (( ts + 1))-1; end
|
2041
|
+
|
2039
2042
|
end
|
2040
2043
|
end
|
2041
2044
|
end
|
@@ -2135,12 +2138,15 @@ p = p - 1; begin
|
|
2135
2138
|
if free_spacing
|
2136
2139
|
emit(:free_space, :comment, *text(data, ts, te))
|
2137
2140
|
else
|
2138
|
-
|
2141
|
+
# consume only the pound sign (#) and backtrack to do regular scanning
|
2142
|
+
append_literal(data, ts, ts + 1)
|
2143
|
+
begin p = (( ts + 1))-1; end
|
2144
|
+
|
2139
2145
|
end
|
2140
2146
|
end
|
2141
2147
|
end
|
2142
2148
|
when 43 then
|
2143
|
-
# line
|
2149
|
+
# line 658 "/Users/jannoschmuller/code/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
|
2144
2150
|
begin
|
2145
2151
|
te = p
|
2146
2152
|
p = p - 1; begin
|
@@ -2152,7 +2158,7 @@ p = p - 1; begin
|
|
2152
2158
|
end
|
2153
2159
|
end
|
2154
2160
|
when 42 then
|
2155
|
-
# line
|
2161
|
+
# line 673 "/Users/jannoschmuller/code/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
|
2156
2162
|
begin
|
2157
2163
|
te = p
|
2158
2164
|
p = p - 1; begin
|
@@ -2559,7 +2565,7 @@ act = 19; end
|
|
2559
2565
|
begin
|
2560
2566
|
te = p+1
|
2561
2567
|
end
|
2562
|
-
# line
|
2568
|
+
# line 673 "/Users/jannoschmuller/code/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
|
2563
2569
|
begin
|
2564
2570
|
act = 56; end
|
2565
2571
|
when 47 then
|
@@ -2573,7 +2579,7 @@ te = p+1
|
|
2573
2579
|
# line 149 "/Users/jannoschmuller/code/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
|
2574
2580
|
begin
|
2575
2581
|
self.group_depth = group_depth + 1 end
|
2576
|
-
# line
|
2582
|
+
# line 2582 "/Users/jannoschmuller/code/regexp_parser/lib/regexp_parser/scanner.rb"
|
2577
2583
|
end
|
2578
2584
|
end
|
2579
2585
|
end
|
@@ -2591,7 +2597,7 @@ ts = nil; end
|
|
2591
2597
|
begin
|
2592
2598
|
act = 0
|
2593
2599
|
end
|
2594
|
-
# line
|
2600
|
+
# line 2600 "/Users/jannoschmuller/code/regexp_parser/lib/regexp_parser/scanner.rb"
|
2595
2601
|
end
|
2596
2602
|
|
2597
2603
|
if cs == 0
|
@@ -2625,7 +2631,7 @@ act = 0
|
|
2625
2631
|
text = ts ? copy(data, ts-1..-1) : data.pack('c*')
|
2626
2632
|
raise PrematureEndError.new( text )
|
2627
2633
|
end
|
2628
|
-
# line
|
2634
|
+
# line 2634 "/Users/jannoschmuller/code/regexp_parser/lib/regexp_parser/scanner.rb"
|
2629
2635
|
end
|
2630
2636
|
end
|
2631
2637
|
|
@@ -2636,7 +2642,7 @@ act = 0
|
|
2636
2642
|
end
|
2637
2643
|
end
|
2638
2644
|
|
2639
|
-
# line
|
2645
|
+
# line 767 "/Users/jannoschmuller/code/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
|
2640
2646
|
|
2641
2647
|
# to avoid "warning: assigned but unused variable - testEof"
|
2642
2648
|
testEof = testEof
|
@@ -649,7 +649,9 @@
|
|
649
649
|
if free_spacing
|
650
650
|
emit(:free_space, :comment, *text(data, ts, te))
|
651
651
|
else
|
652
|
-
|
652
|
+
# consume only the pound sign (#) and backtrack to do regular scanning
|
653
|
+
append_literal(data, ts, ts + 1)
|
654
|
+
fexec ts + 1;
|
653
655
|
end
|
654
656
|
};
|
655
657
|
|
data/regexp_parser.gemspec
CHANGED
@@ -24,34 +24,13 @@ RSpec.describe('FreeSpace parsing') do
|
|
24
24
|
expect(root.first.text).to eq 'a b c d'
|
25
25
|
end
|
26
26
|
|
27
|
-
specify('parse single-line free space comments without spaces') do
|
28
|
-
regexp = /a#b/x
|
29
|
-
|
30
|
-
root = RP.parse(regexp)
|
31
|
-
expect(root.length).to eq 2
|
32
|
-
|
33
|
-
expect(root[0]).to be_instance_of(Literal)
|
34
|
-
expect(root[1]).to be_instance_of(Comment)
|
35
|
-
end
|
36
|
-
|
37
|
-
specify('parse single-line free space comments with spaces') do
|
38
|
-
regexp = /a # b/x
|
39
|
-
|
40
|
-
root = RP.parse(regexp)
|
41
|
-
expect(root.length).to eq 3
|
42
|
-
|
43
|
-
expect(root[0]).to be_instance_of(Literal)
|
44
|
-
expect(root[1]).to be_instance_of(WhiteSpace)
|
45
|
-
expect(root[2]).to be_instance_of(Comment)
|
46
|
-
end
|
47
|
-
|
48
27
|
specify('parse free space comments') do
|
49
28
|
regexp = /
|
50
29
|
a ? # One letter
|
51
30
|
b {2,5} # Another one
|
52
31
|
[c-g] + # A set
|
53
32
|
(h|i|j) | # A group
|
54
|
-
klm
|
33
|
+
klm *
|
55
34
|
nop +
|
56
35
|
/x
|
57
36
|
|
@@ -72,11 +51,11 @@ RSpec.describe('FreeSpace parsing') do
|
|
72
51
|
|
73
52
|
alt_2 = alt.alternatives.last
|
74
53
|
expect(alt_2).to be_instance_of(Alternative)
|
75
|
-
expect(alt_2.length).to eq
|
54
|
+
expect(alt_2.length).to eq 7
|
76
55
|
|
77
|
-
[0, 2,
|
56
|
+
[0, 2, 4, 6].each { |i| expect(alt_2[i].class).to eq WhiteSpace }
|
78
57
|
|
79
|
-
|
58
|
+
expect(alt_2[1]).to be_instance_of(Comment)
|
80
59
|
end
|
81
60
|
|
82
61
|
specify('parse free space nested comments') do
|
@@ -39,6 +39,17 @@ RSpec.describe('FreeSpace scanning') do
|
|
39
39
|
11 => [:free_space, :comment, "# B ? comment\n", 37, 51],
|
40
40
|
17 => [:free_space, :comment, "# C {2,3} comment\n", 66, 84],
|
41
41
|
29 => [:free_space, :comment, "# D|E comment\n", 100, 114]
|
42
|
+
|
43
|
+
# single line / no trailing newline (c.f. issue #66)
|
44
|
+
include_examples 'scan', /a # b/x,
|
45
|
+
0 => [:literal, :literal, 'a', 0, 1],
|
46
|
+
1 => [:free_space, :whitespace, ' ', 1, 2],
|
47
|
+
2 => [:free_space, :comment, "# b", 2, 5]
|
48
|
+
|
49
|
+
# without spaces (c.f. issue #66)
|
50
|
+
include_examples 'scan', /a#b/x,
|
51
|
+
0 => [:literal, :literal, 'a', 0, 1],
|
52
|
+
1 => [:free_space, :comment, "#b", 1, 3]
|
42
53
|
end
|
43
54
|
|
44
55
|
describe('scan free space inlined') do
|
@@ -130,4 +141,25 @@ RSpec.describe('FreeSpace scanning') do
|
|
130
141
|
26 => [:literal, :literal, 'i j', 35, 38],
|
131
142
|
27 => [:group, :close, ')', 38, 39]
|
132
143
|
end
|
144
|
+
|
145
|
+
describe('scanning `#` in regular (non-x mode)') do # c.f. issue 70
|
146
|
+
include_examples 'scan', /a#bcd/,
|
147
|
+
0 => [:literal, :literal, 'a#bcd', 0, 5]
|
148
|
+
include_examples 'scan', /a # bcd/,
|
149
|
+
0 => [:literal, :literal, 'a # bcd', 0, 7]
|
150
|
+
|
151
|
+
include_examples 'scan', /a#\d/,
|
152
|
+
0 => [:literal, :literal, 'a#', 0, 2],
|
153
|
+
1 => [:type, :digit, '\d', 2, 4]
|
154
|
+
include_examples 'scan', /a # \d/,
|
155
|
+
0 => [:literal, :literal, 'a # ', 0, 4],
|
156
|
+
1 => [:type, :digit, '\d', 4, 6]
|
157
|
+
|
158
|
+
include_examples 'scan', /a#()/,
|
159
|
+
0 => [:literal, :literal, 'a#', 0, 2],
|
160
|
+
1 => [:group, :capture, '(', 2, 3]
|
161
|
+
include_examples 'scan', /a # ()/,
|
162
|
+
0 => [:literal, :literal, 'a # ', 0, 4],
|
163
|
+
1 => [:group, :capture, '(', 4, 5]
|
164
|
+
end
|
133
165
|
end
|
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: 1.8.
|
4
|
+
version: 1.8.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ammar Ali
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-09-
|
11
|
+
date: 2020-09-28 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: A library for tokenizing, lexing, and parsing Ruby regular expressions.
|
14
14
|
email:
|
@@ -178,7 +178,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
178
178
|
requirements:
|
179
179
|
- - ">="
|
180
180
|
- !ruby/object:Gem::Version
|
181
|
-
version:
|
181
|
+
version: 2.0.0
|
182
182
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
183
183
|
requirements:
|
184
184
|
- - ">="
|