re2 1.6.0 → 1.7.0

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 2151621115d04b197403c0f67276347c205928136405c05aac1fc70bf3a00dec
4
- data.tar.gz: 8ba805a95c535ab7d30296a830448dea51da4f5f699a6aa3f858296b2590d188
3
+ metadata.gz: ddba6fe8bb8c7e51bcb0b8f4346b39ca903978ff6697a4c14d06702baae10598
4
+ data.tar.gz: f8905eeeeff7e4bebc532d23fa19b29f1c3e2a88ea303a5aa879bafb4af4e1ed
5
5
  SHA512:
6
- metadata.gz: 010e20dae629df302c35c6d5cc412c5a0add1cc3f0b6357114ce64c5d77e6c3bbca7401e57c0b86be5fe87acae17162cd7c860c079dc2c57898761f9fd8d4ce4
7
- data.tar.gz: 6bfa2db432e91b87ab5d6fa21babd07a675df3b22904e20f1491322b1d34c8fe1c5814783049c33f84ab8f22e0b3c2ef9c2308161f8694dd6bcbd8ec4da278a4
6
+ metadata.gz: 44184ad41a55746903fcd350fbf473d26266c710e324eaac879b46ff45e3b77120d5100a25f5188e2d938cafbc48caf909506d79cf07c31522ccfb9e789c2ce0
7
+ data.tar.gz: eb282abd472e00ebcbb10e38f84c62bbac785bd139c69140647a29a157475600b6845472edb41ed42234caf5729188052cc1459b1ac2775c544ed0e905c6039d
data/README.md CHANGED
@@ -4,9 +4,9 @@ re2 [![Build Status](https://github.com/mudge/re2/actions/workflows/tests.yml/ba
4
4
  A Ruby binding to [re2][], an "efficient, principled regular expression
5
5
  library".
6
6
 
7
- **Current version:** 1.6.0
8
- **Supported Ruby versions:** 1.8.7, 1.9.3, 2.0, 2.1, 2.2, 2.3, 2.4, 2.5, 2.6, 2.7, 3.0, 3.1
9
- **Supported re2 versions:** libre2.0 (< 2020-03-02), libre2.1 (2020-03-02), libre2.6 (2020-03-03), libre2.7 (2020-05-01), libre2.8 (2020-07-06), libre2.9 (2020-11-01)
7
+ **Current version:** 1.7.0
8
+ **Supported Ruby versions:** 1.8.7, 1.9.3, 2.0, 2.1, 2.2, 2.3, 2.4, 2.5, 2.6, 2.7, 3.0, 3.1, 3.2
9
+ **Supported re2 versions:** libre2.0 (< 2020-03-02), libre2.1 (2020-03-02), libre2.6 (2020-03-03), libre2.7 (2020-05-01), libre2.8 (2020-07-06), libre2.9 (2020-11-01), libre2.10 (2022-12-01), libre2.11 (2023-07-01)
10
10
 
11
11
  Installation
12
12
  ------------
@@ -22,7 +22,7 @@ If you are using Debian, you can install the [libre2-dev][] package like so:
22
22
 
23
23
  $ sudo apt-get install libre2-dev
24
24
 
25
- Recent versions of re2 require a compiler with C++11 support such as [clang](http://clang.llvm.org/) 3.4 or [gcc](https://gcc.gnu.org/) 4.8.
25
+ Recent versions of re2 require a compiler with C++14 support such as [clang](http://clang.llvm.org/) 3.4 or [gcc](https://gcc.gnu.org/) 5.
26
26
 
27
27
  If you are using a packaged Ruby distribution, make sure you also have the
28
28
  Ruby header files installed such as those provided by the [ruby-dev][] package
@@ -214,7 +214,7 @@ Contributions
214
214
  * Thanks to [Jason Woods](https://github.com/driskell) who contributed the
215
215
  original implementations of `RE2::MatchData#begin` and `RE2::MatchData#end`;
216
216
  * Thanks to [Stefano Rivera](https://github.com/stefanor) who first contributed C++11 support;
217
- * Thanks to [Stan Hu](https://github.com/stanhu) for reporting a bug with empty patterns and `RE2::Regexp#scan`;
217
+ * Thanks to [Stan Hu](https://github.com/stanhu) for reporting a bug with empty patterns and `RE2::Regexp#scan` and for contributing support for libre2.11 (2023-07-01);
218
218
  * Thanks to [Sebastian Reitenbach](https://github.com/buzzdeee) for reporting
219
219
  the deprecation and removal of the `utf8` encoding option in re2;
220
220
  * Thanks to [Sergio Medina](https://github.com/serch) for reporting a bug when
data/ext/re2/extconf.rb CHANGED
@@ -44,22 +44,30 @@ unless have_library("re2")
44
44
  abort "You must have re2 installed and specified with --with-re2-dir, please see https://github.com/google/re2/wiki/Install"
45
45
  end
46
46
 
47
- # Recent versions of re2 now require a compiler with C++11 support
48
- checking_for("re2 requires C++11 compiler") do
49
- minimal_program = <<SRC
47
+ minimal_program = <<SRC
50
48
  #include <re2/re2.h>
51
49
  int main() { return 0; }
52
50
  SRC
53
51
 
54
- unless try_compile(minimal_program, compile_options)
55
- if try_compile(minimal_program, compile_options + " -std=c++11")
56
- compile_options << " -std=c++11"
57
- $CPPFLAGS << " -std=c++11"
58
- elsif try_compile(minimal_program, compile_options + " -std=c++0x")
59
- compile_options << " -std=c++0x"
60
- $CPPFLAGS << " -std=c++0x"
61
- else
62
- abort "Cannot compile re2 with your compiler: recent versions require C++11 support."
52
+ re2_requires_version_flag = checking_for("re2 that requires explicit C++ version flag") do
53
+ !try_compile(minimal_program, compile_options)
54
+ end
55
+
56
+ if re2_requires_version_flag
57
+ # Recent versions of re2 depend directly on abseil, which requires a
58
+ # compiler with C++14 support (see
59
+ # https://github.com/abseil/abseil-cpp/issues/1127 and
60
+ # https://github.com/abseil/abseil-cpp/issues/1431). However, the
61
+ # `std=c++14` flag doesn't appear to suffice; we need at least
62
+ # `std=c++17`.
63
+ abort "Cannot compile re2 with your compiler: recent versions require C++14 support." unless %w[c++20 c++17 c++11 c++0x].any? do |std|
64
+ checking_for("re2 that compiles with #{std} standard") do
65
+ if try_compile(minimal_program, compile_options + " -std=#{std}")
66
+ compile_options << " -std=#{std}"
67
+ $CPPFLAGS << " -std=#{std}"
68
+
69
+ true
70
+ end
63
71
  end
64
72
  end
65
73
  end
data/ext/re2/re2.cc CHANGED
@@ -393,7 +393,7 @@ re2::StringPiece *re2_matchdata_find_match(VALUE idx, VALUE self) {
393
393
  /*
394
394
  * Returns the number of elements in the match array (including nils).
395
395
  *
396
- * @return [Fixnum] the number of elements
396
+ * @return [Integer] the number of elements
397
397
  * @example
398
398
  * m = RE2::Regexp.new('(\d+)').match("bob 123")
399
399
  * m.size #=> 2
@@ -409,8 +409,8 @@ static VALUE re2_matchdata_size(VALUE self) {
409
409
  /*
410
410
  * Returns the offset of the start of the nth element of the matchdata.
411
411
  *
412
- * @param [Fixnum, String, Symbol] n the name or number of the match
413
- * @return [Fixnum] the offset of the start of the match
412
+ * @param [Integer, String, Symbol] n the name or number of the match
413
+ * @return [Integer] the offset of the start of the match
414
414
  * @example
415
415
  * m = RE2::Regexp.new('ob (\d+)').match("bob 123")
416
416
  * m.begin(0) #=> 1
@@ -439,8 +439,8 @@ static VALUE re2_matchdata_begin(VALUE self, VALUE n) {
439
439
  /*
440
440
  * Returns the offset of the character following the end of the nth element of the matchdata.
441
441
  *
442
- * @param [Fixnum, String, Symbol] n the name or number of the match
443
- * @return [Fixnum] the offset of the character following the end of the match
442
+ * @param [Integer, String, Symbol] n the name or number of the match
443
+ * @return [Integer] the offset of the character following the end of the match
444
444
  * @example
445
445
  * m = RE2::Regexp.new('ob (\d+) b').match("bob 123 bob")
446
446
  * m.end(0) #=> 9
@@ -584,7 +584,7 @@ static VALUE re2_matchdata_named_match(const char* name, VALUE self) {
584
584
  * @overload [](index)
585
585
  * Access a particular match by index.
586
586
  *
587
- * @param [Fixnum] index the index of the match to fetch
587
+ * @param [Integer] index the index of the match to fetch
588
588
  * @return [String, nil] the specified match
589
589
  * @example
590
590
  * m = RE2::Regexp.new('(\d+)').match("bob 123")
@@ -593,8 +593,8 @@ static VALUE re2_matchdata_named_match(const char* name, VALUE self) {
593
593
  * @overload [](start, length)
594
594
  * Access a range of matches by starting index and length.
595
595
  *
596
- * @param [Fixnum] start the index from which to start
597
- * @param [Fixnum] length the number of elements to fetch
596
+ * @param [Integer] start the index from which to start
597
+ * @param [Integer] length the number of elements to fetch
598
598
  * @return [Array<String, nil>] the specified matches
599
599
  * @example
600
600
  * m = RE2::Regexp.new('(\d+)').match("bob 123")
@@ -795,12 +795,9 @@ static VALUE re2_matchdata_deconstruct_keys(VALUE self, VALUE keys) {
795
795
 
796
796
  /*
797
797
  * Returns a new RE2 object with a compiled version of
798
- * +pattern+ stored inside. Equivalent to +RE2.new+.
798
+ * +pattern+ stored inside. Equivalent to +RE2::Regexp.new+.
799
799
  *
800
- * @return [RE2::Regexp] an RE2::Regexp with the specified pattern and options
801
- * @param [String] pattern the pattern to compile
802
- * @param [Hash] options the options to compile a regexp with
803
- * @see RE2::Regexp.new
800
+ * @see RE2::Regexp#initialize
804
801
  *
805
802
  */
806
803
  static VALUE re2_re2(int argc, VALUE *argv, VALUE self) {
@@ -833,7 +830,7 @@ static VALUE re2_re2(int argc, VALUE *argv, VALUE self) {
833
830
  * @option options [Boolean] :posix_syntax (false) restrict regexps to POSIX egrep syntax
834
831
  * @option options [Boolean] :longest_match (false) search for longest match, not first match
835
832
  * @option options [Boolean] :log_errors (true) log syntax and execution errors to ERROR
836
- * @option options [Fixnum] :max_mem approx. max memory footprint of RE2
833
+ * @option options [Integer] :max_mem approx. max memory footprint of RE2
837
834
  * @option options [Boolean] :literal (false) interpret string as literal, not regexp
838
835
  * @option options [Boolean] :never_nl (false) never match \n, even if it is in regexp
839
836
  * @option options [Boolean] :case_sensitive (true) match is case-sensitive (regexp can override with (?i) unless in posix_syntax mode)
@@ -984,7 +981,7 @@ static VALUE re2_regexp_log_errors(VALUE self) {
984
981
  * Returns the max_mem setting for the regular expression
985
982
  * +re2+.
986
983
  *
987
- * @return [Fixnum] the max_mem option
984
+ * @return [Integer] the max_mem option
988
985
  * @example
989
986
  * re2 = RE2::Regexp.new("woo?", :max_mem => 1024)
990
987
  * re2.max_mem #=> 1024
@@ -1138,7 +1135,7 @@ static VALUE re2_regexp_error_arg(VALUE self) {
1138
1135
  * of a regexp's "cost". Larger numbers are more expensive
1139
1136
  * than smaller numbers.
1140
1137
  *
1141
- * @return [Fixnum] the regexp "cost"
1138
+ * @return [Integer] the regexp "cost"
1142
1139
  */
1143
1140
  static VALUE re2_regexp_program_size(VALUE self) {
1144
1141
  re2_pattern *p;
@@ -1203,7 +1200,7 @@ static VALUE re2_regexp_options(VALUE self) {
1203
1200
  * wasn't valid on construction. The overall match ($0) does not
1204
1201
  * count: if the regexp is "(a)(b)", returns 2.
1205
1202
  *
1206
- * @return [Fixnum] the number of capturing subpatterns
1203
+ * @return [Integer] the number of capturing subpatterns
1207
1204
  */
1208
1205
  static VALUE re2_regexp_number_of_capturing_groups(VALUE self) {
1209
1206
  re2_pattern *p;
@@ -1273,7 +1270,7 @@ static VALUE re2_regexp_named_capturing_groups(VALUE self) {
1273
1270
  * matches returned (padded with nils if necessary).
1274
1271
  *
1275
1272
  * @param [String] text the text to search
1276
- * @param [Fixnum] number_of_matches the number of matches to return
1273
+ * @param [Integer] number_of_matches the number of matches to return
1277
1274
  * @return [RE2::MatchData] the matches
1278
1275
  * @raise [ArgumentError] if given a negative number of matches
1279
1276
  * @raise [NoMemoryError] if there was not enough memory to allocate the matches
@@ -1399,7 +1396,7 @@ static VALUE re2_regexp_scan(VALUE self, VALUE text) {
1399
1396
  * @return [String] the resulting string
1400
1397
  * @example
1401
1398
  * RE2.Replace("hello there", "hello", "howdy") #=> "howdy there"
1402
- * re2 = RE2.new("hel+o")
1399
+ * re2 = RE2::Regexp.new("hel+o")
1403
1400
  * RE2.Replace("hello there", re2, "yo") #=> "yo there"
1404
1401
  */
1405
1402
  static VALUE re2_Replace(VALUE self, VALUE str, VALUE pattern,
@@ -1435,7 +1432,7 @@ static VALUE re2_Replace(VALUE self, VALUE str, VALUE pattern,
1435
1432
  * @param [String] rewrite the string to replace with
1436
1433
  * @return [String] the resulting string
1437
1434
  * @example
1438
- * re2 = RE2.new("oo?")
1435
+ * re2 = RE2::Regexp.new("oo?")
1439
1436
  * RE2.GlobalReplace("whoops-doops", re2, "e") #=> "wheps-deps"
1440
1437
  * RE2.GlobalReplace("hello there", "e", "i") #=> "hillo thiri"
1441
1438
  */
@@ -1522,7 +1519,7 @@ static VALUE re2_set_allocate(VALUE klass) {
1522
1519
  * @option options [Boolean] :posix_syntax (false) restrict regexps to POSIX egrep syntax
1523
1520
  * @option options [Boolean] :longest_match (false) search for longest match, not first match
1524
1521
  * @option options [Boolean] :log_errors (true) log syntax and execution errors to ERROR
1525
- * @option options [Fixnum] :max_mem approx. max memory footprint of RE2
1522
+ * @option options [Integer] :max_mem approx. max memory footprint of RE2
1526
1523
  * @option options [Boolean] :literal (false) interpret string as literal, not regexp
1527
1524
  * @option options [Boolean] :never_nl (false) never match \n, even if it is in regexp
1528
1525
  * @option options [Boolean] :case_sensitive (true) match is case-sensitive (regexp can override with (?i) unless in posix_syntax mode)
@@ -1889,9 +1886,4 @@ void Init_re2(void) {
1889
1886
  id_anchor_start = rb_intern("anchor_start");
1890
1887
  id_anchor_both = rb_intern("anchor_both");
1891
1888
  id_exception = rb_intern("exception");
1892
-
1893
- #if 0
1894
- /* Fake so YARD generates the file. */
1895
- rb_mKernel = rb_define_module("Kernel");
1896
- #endif
1897
1889
  }
data/lib/re2/string.rb CHANGED
@@ -12,30 +12,14 @@ module RE2
12
12
  # Replaces the first occurrence +pattern+ with +rewrite+ and returns a new
13
13
  # string.
14
14
  #
15
- # @param [String, RE2::Regexp] pattern a regexp matching text to be replaced
16
- # @param [String] rewrite the string to replace with
17
- # @example
18
- # "hello there".re2_sub("hello", "howdy") #=> "howdy there"
19
- # re2 = RE2.new("hel+o")
20
- # "hello there".re2_sub(re2, "yo") #=> "yo there"
21
- # text = "Good morning"
22
- # text.re2_sub("morn", "even") #=> "Good evening"
23
- # text #=> "Good morning"
15
+ # @see RE2.Replace
24
16
  def re2_sub(*args)
25
17
  RE2.Replace(self, *args)
26
18
  end
27
19
 
28
20
  # Replaces every occurrence of +pattern+ with +rewrite+ and return a new string.
29
21
  #
30
- # @param [String, RE2::Regexp] pattern a regexp matching text to be replaced
31
- # @param [String] rewrite the string to replace with
32
- # @example
33
- # "hello there".re2_gsub("e", "i") #=> "hillo thiri"
34
- # re2 = RE2.new("oo?")
35
- # "whoops-doops".re2_gsub(re2, "e") #=> "wheps-deps"
36
- # text = "Good morning"
37
- # text.re2_gsub("o", "ee") #=> "Geeeed meerning"
38
- # text #=> "Good morning"
22
+ # @see RE2.GlobalReplace
39
23
  def re2_gsub(*args)
40
24
  RE2.GlobalReplace(self, *args)
41
25
  end
@@ -74,7 +58,7 @@ module RE2
74
58
  # matches returned (padded with nils if necessary).
75
59
  #
76
60
  # @param [String, RE2::Regexp] pattern the regular expression to match
77
- # @param [Fixnum] number_of_matches the number of matches to return
61
+ # @param [Integer] number_of_matches the number of matches to return
78
62
  # @return [RE2::MatchData] the matches
79
63
  # @raise [NoMemoryError] if there was not enough memory to allocate the matches
80
64
  # @example
@@ -91,7 +91,8 @@ RSpec.describe RE2::Regexp do
91
91
  describe "#program_size" do
92
92
  it "returns a numeric value" do
93
93
  program_size = RE2::Regexp.new('w(o)(o)').program_size
94
- expect(program_size).to be_a(Fixnum)
94
+
95
+ expect(program_size).to be_an(Integer)
95
96
  end
96
97
 
97
98
  it "returns -1 for an invalid pattern" do
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: re2
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.6.0
4
+ version: 1.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Paul Mucur
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-10-22 00:00:00.000000000 Z
11
+ date: 2023-07-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake-compiler
@@ -80,7 +80,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
80
80
  - !ruby/object:Gem::Version
81
81
  version: '0'
82
82
  requirements: []
83
- rubygems_version: 3.3.7
83
+ rubygems_version: 3.4.10
84
84
  signing_key:
85
85
  specification_version: 4
86
86
  summary: Ruby bindings to re2.