]> Cypherpunks repositories - gostls13.git/commitdiff
regexp/syntax: cleanup code generation in perl_groups.go
authorOlivier Mengué <olivier.mengue@gmail.com>
Mon, 15 Jan 2024 23:16:25 +0000 (00:16 +0100)
committerGopher Robot <gobot@golang.org>
Tue, 2 Apr 2024 13:59:01 +0000 (13:59 +0000)
Cleanup code generation of perl_groups.go:
* Fix the generated code header to follow the standard https://go.dev/s/generatedcode
* Apply gofmt as last step of code generation
* Add //go:generate lines in parse.go to trigger code generation
* Adapt make_perl_groups.pl to handle writing directly to the output
  file (as we can't use shell redirection in go:generate lines)
* use strict; use warnings;

Change-Id: I675241da03dd3f6facc9eb9de00999bd9203ad70
Reviewed-on: https://go-review.googlesource.com/c/go/+/555995
Reviewed-by: Bryan Mills <bcmills@google.com>
Reviewed-by: Dmitri Shuralyov <dmitshur@google.com>
Reviewed-by: Ian Lance Taylor <iant@google.com>
Auto-Submit: Ian Lance Taylor <iant@google.com>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>

src/regexp/syntax/make_perl_groups.pl
src/regexp/syntax/parse.go
src/regexp/syntax/perl_groups.go

index 80a2c9ae6b9af5c57d8872dbe5448af1c13ce2dc..fafa41cf2cfa016630a275ced5f3eb95a0b26c11 100755 (executable)
 # Perl about each letter from 0-128 and write down
 # its answer.
 
-@posixclasses = (
+use strict;
+use warnings;
+
+my @posixclasses = (
        "[:alnum:]",
        "[:alpha:]",
        "[:ascii:]",
        "[:xdigit:]",
 );
 
-@perlclasses = (
+my @perlclasses = (
        "\\d",
        "\\s",
        "\\w",
 );
 
-%overrides = (
+my %overrides = (
        # Prior to Perl 5.18, \s did not match vertical tab.
        # RE2 preserves that original behaviour.
        "\\s:11" => 0,
@@ -70,7 +73,7 @@ sub PrintClass($$@) {
   }
   print "}\n\n";
   my $n = @ranges;
-  $negname = $name;
+  my $negname = $name;
   if ($negname =~ /:/) {
     $negname =~ s/:/:^/;
   } else {
@@ -97,13 +100,25 @@ sub PrintClasses($@) {
   my $count = @entries;
 }
 
+# Prepare gofmt command
+my $gofmt;
+
+if (@ARGV > 0 && $ARGV[0] =~ /\.go$/) {
+  # Send the output of gofmt to the given file
+  open($gofmt, '|-', 'gofmt >'.$ARGV[0]) or die;
+} else {
+  open($gofmt, '|-', 'gofmt') or die;
+}
+
+# Redirect STDOUT to gofmt input
+select $gofmt;
+
 print <<EOF;
 // Copyright 2013 The Go Authors. All rights reserved.
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// GENERATED BY make_perl_groups.pl; DO NOT EDIT.
-// make_perl_groups.pl >perl_groups.go
+// Code generated by make_perl_groups.pl; DO NOT EDIT.
 
 package syntax
 
index 8f16f6308f2d013207134135a80cabdf4dfbc677..26242902f1eb26e92224df8b1d8fc250367eb143 100644 (file)
@@ -1576,6 +1576,8 @@ type charGroup struct {
        class []rune
 }
 
+//go:generate perl make_perl_groups.pl perl_groups.go
+
 // parsePerlClassEscape parses a leading Perl character class escape like \d
 // from the beginning of s. If one is present, it appends the characters to r
 // and returns the new slice r and the remainder of the string.
index effe4e6862754899ebeeabe5bedf97b46b06f120..675466e5a0c3c0ef8068b00f17b657c8f47de3de 100644 (file)
@@ -2,8 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// GENERATED BY make_perl_groups.pl; DO NOT EDIT.
-// make_perl_groups.pl >perl_groups.go
+// Code generated by make_perl_groups.pl; DO NOT EDIT.
 
 package syntax