From: Rob Pike Date: Wed, 25 Mar 2015 20:17:54 +0000 (-0700) Subject: cmd/go: add $DOLLAR to the predefined variables for go generate X-Git-Tag: go1.5beta1~1428 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=f338d942857333917af7220cd53910e3a2ad16b9;p=gostls13.git cmd/go: add $DOLLAR to the predefined variables for go generate 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 Reviewed-by: Ian Lance Taylor --- diff --git a/src/cmd/go/generate.go b/src/cmd/go/generate.go index 3c0af8760b..8e9ad384ae 100644 --- a/src/cmd/go/generate.go +++ b/src/cmd/go/generate.go @@ -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) } diff --git a/src/cmd/go/generate_test.go b/src/cmd/go/generate_test.go index 2ec548630a..169d71ca81 100644 --- a/src/cmd/go/generate_test.go +++ b/src/cmd/go/generate_test.go @@ -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"}}, }