]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/go: add $DOLLAR to the predefined variables for go generate
authorRob Pike <r@golang.org>
Wed, 25 Mar 2015 20:17:54 +0000 (13:17 -0700)
committerRob Pike <r@golang.org>
Thu, 26 Mar 2015 00:18:51 +0000 (00:18 +0000)
Without some hook like this, it's impossible to get a $ into the generate
command, which is necessary if you're trying to do some shell scripting
or regular expressions.

We could use backslash escaping but that's already tricky enough
because the strings are processed as Go strings. Using $ like this
means we need no more mechanism, just a predefined variable.

We may need to revisit this but I hope we can avoid new quoting rules.

Change-Id: Ieb478c8cc767a866765282472239ed3c1e5669a8
Reviewed-on: https://go-review.googlesource.com/8091
Reviewed-by: Dave Cheney <dave@cheney.net>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
src/cmd/go/generate.go
src/cmd/go/generate_test.go

index 3c0af8760b5eeeb00b17c7dedfea877303ce2eac..8e9ad384ae4444e15d6ba952ec4931f563074ba9 100644 (file)
@@ -64,6 +64,8 @@ Go generate sets several variables when it runs the generator:
                The base name of the file.
        $GOPACKAGE
                The name of the package of the file containing the directive.
+       $DOLLAR
+               A dollar sign.
 
 Other than variable substitution and quoted-string evaluation, no
 special processing such as "globbing" is performed on the command
@@ -348,6 +350,8 @@ func (g *Generator) expandEnv(word string) string {
                        sub = g.file
                case "GOPACKAGE":
                        sub = g.pkg
+               case "DOLLAR":
+                       sub = "$"
                default:
                        sub = os.Getenv(envVar)
                }
index 2ec548630acc095d3847de3723d48a70d35a8a38..169d71ca812b7515e12a3c5909f21dce38b9cf02 100644 (file)
@@ -26,6 +26,7 @@ var splitTests = []splitTest{
        {"$GOPACKAGE", []string{"sys"}},
        {"a $XXNOTDEFINEDXX b", []string{"a", "", "b"}},
        {"/$XXNOTDEFINED/", []string{"//"}},
+       {"/$DOLLAR/", []string{"/$/"}},
        {"yacc -o $GOARCH/yacc_$GOFILE", []string{"go", "tool", "yacc", "-o", runtime.GOARCH + "/yacc_proc.go"}},
 }