regexp_parser 1.6.0 → 1.8.2

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.
@@ -10,7 +10,6 @@ RSpec.describe(Regexp::Scanner) do
10
10
  include_examples 'scan error', RS::PrematureEndError, 'unbalanced set', '[a'
11
11
  include_examples 'scan error', RS::PrematureEndError, 'unbalanced set', '[[:alpha:]'
12
12
  include_examples 'scan error', RS::PrematureEndError, 'unbalanced group', '(abc'
13
- include_examples 'scan error', RS::PrematureEndError, 'unbalanced interval', 'a{1,2'
14
13
  include_examples 'scan error', RS::PrematureEndError, 'eof in property', '\p{asci'
15
14
  include_examples 'scan error', RS::PrematureEndError, 'incomplete property', '\p{ascii abc'
16
15
  include_examples 'scan error', RS::PrematureEndError, 'eof options', '(?mix'
@@ -13,6 +13,10 @@ RSpec.describe('Escape scanning') do
13
13
 
14
14
  include_examples 'scan', 'c\qt', 1 => [:escape, :literal, '\q', 1, 3]
15
15
 
16
+ # these incomplete ref/call sequences are treated as literal escapes by Ruby
17
+ include_examples 'scan', 'c\gt', 1 => [:escape, :literal, '\g', 1, 3]
18
+ include_examples 'scan', 'c\kt', 1 => [:escape, :literal, '\k', 1, 3]
19
+
16
20
  include_examples 'scan', 'a\012c', 1 => [:escape, :octal, '\012', 1, 5]
17
21
  include_examples 'scan', 'a\0124', 1 => [:escape, :octal, '\012', 1, 5]
18
22
  include_examples 'scan', '\712+7', 0 => [:escape, :octal, '\712', 0, 4]
@@ -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
@@ -0,0 +1,36 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe('passing options to scan') do
4
+ def expect_type_tokens(tokens, type_tokens)
5
+ expect(tokens.map { |type, token, *| [type, token] }).to eq(type_tokens)
6
+ end
7
+
8
+ it 'raises if if scanning from a Regexp and options are passed' do
9
+ expect { RS.scan(/a+/, options: ::Regexp::EXTENDED) }.to raise_error(
10
+ ArgumentError,
11
+ 'options cannot be supplied unless scanning a String'
12
+ )
13
+ end
14
+
15
+ it 'sets free_spacing based on options if scanning from a String' do
16
+ expect_type_tokens(
17
+ RS.scan('a+#c', options: ::Regexp::MULTILINE | ::Regexp::EXTENDED),
18
+ [
19
+ %i[literal literal],
20
+ %i[quantifier one_or_more],
21
+ %i[free_space comment]
22
+ ]
23
+ )
24
+ end
25
+
26
+ it 'does not set free_spacing if scanning from a String and passing no options' do
27
+ expect_type_tokens(
28
+ RS.scan('a+#c'),
29
+ [
30
+ %i[literal literal],
31
+ %i[quantifier one_or_more],
32
+ %i[literal literal]
33
+ ]
34
+ )
35
+ end
36
+ 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.6.0
4
+ version: 1.8.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ammar Ali
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-07-16 00:00:00.000000000 Z
11
+ date: 2020-10-11 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: A library for tokenizing, lexing, and parsing Ruby regular expressions.
14
14
  email:
@@ -109,6 +109,7 @@ files:
109
109
  - spec/expression/to_s_spec.rb
110
110
  - spec/lexer/all_spec.rb
111
111
  - spec/lexer/conditionals_spec.rb
112
+ - spec/lexer/delimiters_spec.rb
112
113
  - spec/lexer/escapes_spec.rb
113
114
  - spec/lexer/keep_spec.rb
114
115
  - spec/lexer/literals_spec.rb
@@ -123,6 +124,7 @@ files:
123
124
  - spec/parser/free_space_spec.rb
124
125
  - spec/parser/groups_spec.rb
125
126
  - spec/parser/keep_spec.rb
127
+ - spec/parser/options_spec.rb
126
128
  - spec/parser/posix_classes_spec.rb
127
129
  - spec/parser/properties_spec.rb
128
130
  - spec/parser/quantifiers_spec.rb
@@ -134,6 +136,7 @@ files:
134
136
  - spec/scanner/all_spec.rb
135
137
  - spec/scanner/anchors_spec.rb
136
138
  - spec/scanner/conditionals_spec.rb
139
+ - spec/scanner/delimiters_spec.rb
137
140
  - spec/scanner/errors_spec.rb
138
141
  - spec/scanner/escapes_spec.rb
139
142
  - spec/scanner/free_space_spec.rb
@@ -141,6 +144,7 @@ files:
141
144
  - spec/scanner/keep_spec.rb
142
145
  - spec/scanner/literals_spec.rb
143
146
  - spec/scanner/meta_spec.rb
147
+ - spec/scanner/options_spec.rb
144
148
  - spec/scanner/properties_spec.rb
145
149
  - spec/scanner/quantifiers_spec.rb
146
150
  - spec/scanner/refcalls_spec.rb
@@ -164,7 +168,7 @@ licenses:
164
168
  - MIT
165
169
  metadata:
166
170
  issue_tracker: https://github.com/ammar/regexp_parser/issues
167
- post_install_message:
171
+ post_install_message:
168
172
  rdoc_options:
169
173
  - "--inline-source"
170
174
  - "--charset=UTF-8"
@@ -174,82 +178,86 @@ required_ruby_version: !ruby/object:Gem::Requirement
174
178
  requirements:
175
179
  - - ">="
176
180
  - !ruby/object:Gem::Version
177
- version: 1.9.1
181
+ version: 2.0.0
178
182
  required_rubygems_version: !ruby/object:Gem::Requirement
179
183
  requirements:
180
184
  - - ">="
181
185
  - !ruby/object:Gem::Version
182
186
  version: '0'
183
187
  requirements: []
184
- rubygems_version: 3.0.3
185
- signing_key:
188
+ rubygems_version: 3.2.0.rc.1
189
+ signing_key:
186
190
  specification_version: 4
187
191
  summary: Scanner, lexer, parser for ruby's regular expressions
188
192
  test_files:
189
- - spec/token/token_spec.rb
190
- - spec/spec_helper.rb
191
- - spec/lexer/escapes_spec.rb
192
- - spec/lexer/keep_spec.rb
193
+ - spec/expression/base_spec.rb
194
+ - spec/expression/clone_spec.rb
195
+ - spec/expression/conditional_spec.rb
196
+ - spec/expression/free_space_spec.rb
197
+ - spec/expression/methods/match_length_spec.rb
198
+ - spec/expression/methods/match_spec.rb
199
+ - spec/expression/methods/strfregexp_spec.rb
200
+ - spec/expression/methods/tests_spec.rb
201
+ - spec/expression/methods/traverse_spec.rb
202
+ - spec/expression/options_spec.rb
203
+ - spec/expression/root_spec.rb
204
+ - spec/expression/sequence_spec.rb
205
+ - spec/expression/subexpression_spec.rb
206
+ - spec/expression/to_h_spec.rb
207
+ - spec/expression/to_s_spec.rb
193
208
  - spec/lexer/all_spec.rb
194
209
  - spec/lexer/conditionals_spec.rb
210
+ - spec/lexer/delimiters_spec.rb
211
+ - spec/lexer/escapes_spec.rb
212
+ - spec/lexer/keep_spec.rb
213
+ - spec/lexer/literals_spec.rb
195
214
  - spec/lexer/nesting_spec.rb
196
215
  - spec/lexer/refcalls_spec.rb
197
- - spec/lexer/literals_spec.rb
198
- - spec/parser/escapes_spec.rb
199
- - spec/parser/properties_spec.rb
200
- - spec/parser/sets_spec.rb
201
- - spec/parser/free_space_spec.rb
202
- - spec/parser/keep_spec.rb
203
216
  - spec/parser/all_spec.rb
204
- - spec/parser/conditionals_spec.rb
205
- - spec/parser/types_spec.rb
206
- - spec/parser/anchors_spec.rb
207
217
  - spec/parser/alternation_spec.rb
208
- - spec/parser/posix_classes_spec.rb
209
- - spec/parser/set/ranges_spec.rb
210
- - spec/parser/set/intersections_spec.rb
218
+ - spec/parser/anchors_spec.rb
219
+ - spec/parser/conditionals_spec.rb
211
220
  - spec/parser/errors_spec.rb
212
- - spec/parser/refcalls_spec.rb
221
+ - spec/parser/escapes_spec.rb
222
+ - spec/parser/free_space_spec.rb
213
223
  - spec/parser/groups_spec.rb
224
+ - spec/parser/keep_spec.rb
225
+ - spec/parser/options_spec.rb
226
+ - spec/parser/posix_classes_spec.rb
227
+ - spec/parser/properties_spec.rb
214
228
  - spec/parser/quantifiers_spec.rb
215
- - spec/support/warning_extractor.rb
216
- - spec/support/shared_examples.rb
217
- - spec/support/runner.rb
218
- - spec/expression/subexpression_spec.rb
219
- - spec/expression/methods/match_spec.rb
220
- - spec/expression/methods/match_length_spec.rb
221
- - spec/expression/methods/traverse_spec.rb
222
- - spec/expression/methods/strfregexp_spec.rb
223
- - spec/expression/methods/tests_spec.rb
224
- - spec/expression/free_space_spec.rb
225
- - spec/expression/options_spec.rb
226
- - spec/expression/to_s_spec.rb
227
- - spec/expression/root_spec.rb
228
- - spec/expression/sequence_spec.rb
229
- - spec/expression/clone_spec.rb
230
- - spec/expression/to_h_spec.rb
231
- - spec/expression/conditional_spec.rb
232
- - spec/expression/base_spec.rb
233
- - spec/syntax/syntax_spec.rb
234
- - spec/syntax/syntax_token_map_spec.rb
235
- - spec/syntax/versions/1.9.3_spec.rb
236
- - spec/syntax/versions/2.2.0_spec.rb
237
- - spec/syntax/versions/1.9.1_spec.rb
238
- - spec/syntax/versions/2.0.0_spec.rb
239
- - spec/syntax/versions/1.8.6_spec.rb
240
- - spec/syntax/versions/aliases_spec.rb
241
- - spec/scanner/escapes_spec.rb
242
- - spec/scanner/properties_spec.rb
243
- - spec/scanner/sets_spec.rb
244
- - spec/scanner/free_space_spec.rb
245
- - spec/scanner/keep_spec.rb
229
+ - spec/parser/refcalls_spec.rb
230
+ - spec/parser/set/intersections_spec.rb
231
+ - spec/parser/set/ranges_spec.rb
232
+ - spec/parser/sets_spec.rb
233
+ - spec/parser/types_spec.rb
246
234
  - spec/scanner/all_spec.rb
247
- - spec/scanner/conditionals_spec.rb
248
- - spec/scanner/types_spec.rb
249
235
  - spec/scanner/anchors_spec.rb
250
- - spec/scanner/meta_spec.rb
236
+ - spec/scanner/conditionals_spec.rb
237
+ - spec/scanner/delimiters_spec.rb
251
238
  - spec/scanner/errors_spec.rb
252
- - spec/scanner/refcalls_spec.rb
239
+ - spec/scanner/escapes_spec.rb
240
+ - spec/scanner/free_space_spec.rb
253
241
  - spec/scanner/groups_spec.rb
242
+ - spec/scanner/keep_spec.rb
254
243
  - spec/scanner/literals_spec.rb
244
+ - spec/scanner/meta_spec.rb
245
+ - spec/scanner/options_spec.rb
246
+ - spec/scanner/properties_spec.rb
255
247
  - spec/scanner/quantifiers_spec.rb
248
+ - spec/scanner/refcalls_spec.rb
249
+ - spec/scanner/sets_spec.rb
250
+ - spec/scanner/types_spec.rb
251
+ - spec/spec_helper.rb
252
+ - spec/support/runner.rb
253
+ - spec/support/shared_examples.rb
254
+ - spec/support/warning_extractor.rb
255
+ - spec/syntax/syntax_spec.rb
256
+ - spec/syntax/syntax_token_map_spec.rb
257
+ - spec/syntax/versions/1.8.6_spec.rb
258
+ - spec/syntax/versions/1.9.1_spec.rb
259
+ - spec/syntax/versions/1.9.3_spec.rb
260
+ - spec/syntax/versions/2.0.0_spec.rb
261
+ - spec/syntax/versions/2.2.0_spec.rb
262
+ - spec/syntax/versions/aliases_spec.rb
263
+ - spec/token/token_spec.rb