pkg/tool: generate package documentation

Fixes #39

Change-Id: I3acc6bd67a8012dd8a33819d153ee5c97342faa5
Reviewed-on: https://cue-review.googlesource.com/c/cue/+/1926
Reviewed-by: Marcel van Lohuizen <mpvl@google.com>
diff --git a/pkg/tool/exec/doc.go b/pkg/tool/exec/doc.go
new file mode 100644
index 0000000..67632e0
--- /dev/null
+++ b/pkg/tool/exec/doc.go
@@ -0,0 +1,38 @@
+// Code generated by cue get go. DO NOT EDIT.
+
+// Package exec defines tasks for running commands.
+//
+// These are the supported tasks:
+//
+//     // Run executes the given shell command.
+//     Run: {
+//     	kind: "tool/exec.Run"
+//
+//     	// cmd is the command to run.
+//     	cmd: string | [string, ...string]
+//
+//     	// install is an optional command to install the binaries needed
+//     	// to run the command.
+//     	install?: string | [string, ...string]
+//
+//     	// env defines the environment variables to use for this system.
+//     	env <Key>: string
+//
+//     	// stdout captures the output from stdout if it is of type bytes or string.
+//     	// The default value of null indicates it is redirected to the stdout of the
+//     	// current process.
+//     	stdout: *null | string | bytes
+//
+//     	// stderr is like stdout, but for errors.
+//     	stderr: *null | string | bytes
+//
+//     	// stdin specifies the input for the process.
+//     	stdin?: string | bytes
+//
+//     	// success is set to true when the process terminates with with a zero exit
+//     	// code or false otherwise. The user can explicitly specify the value
+//     	// force a fatal error if the desired success code is not reached.
+//     	success: bool
+//     }
+//
+package exec
diff --git a/pkg/tool/exec/exec.cue b/pkg/tool/exec/exec.cue
index 585bf4f..78efc4e 100644
--- a/pkg/tool/exec/exec.cue
+++ b/pkg/tool/exec/exec.cue
@@ -44,12 +44,3 @@
 	// force a fatal error if the desired success code is not reached.
 	success: bool
 }
-
-/* TODO
-// Env collects the environment variables of the current process.
-Env: {
-	kind: "tool/exec.Env"
-
-	env <Name>: string | number
-}
-*/
diff --git a/pkg/tool/exec/exec.go b/pkg/tool/exec/exec.go
index 169508e..9b68797 100644
--- a/pkg/tool/exec/exec.go
+++ b/pkg/tool/exec/exec.go
@@ -12,9 +12,10 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-// Package exec defines tasks for running commands.
 package exec
 
+//go:generate go run gen.go
+
 import (
 	"errors"
 	"fmt"
diff --git a/pkg/tool/exec/gen.go b/pkg/tool/exec/gen.go
new file mode 100644
index 0000000..c8bc071
--- /dev/null
+++ b/pkg/tool/exec/gen.go
@@ -0,0 +1,46 @@
+// Copyright 2019 CUE Authors
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+// +build ignore
+
+package main
+
+// TODO: remove when we have a cuedoc server. Until then,
+// piggyback on godoc.org.
+
+import (
+	"bytes"
+	"fmt"
+	"io/ioutil"
+	"os"
+)
+
+const msg = `// Code generated by cue get go. DO NOT EDIT.
+
+// Package exec defines tasks for running commands.
+//
+// These are the supported tasks:
+//     %s
+package exec
+`
+
+func main() {
+	f, _ := os.Create("doc.go")
+	defer f.Close()
+	b, _ := ioutil.ReadFile("exec.cue")
+	i := bytes.Index(b, []byte("package exec"))
+	b = b[i+len("package exec")+1:]
+	b = bytes.ReplaceAll(b, []byte("\n"), []byte("\n//     "))
+	fmt.Fprintf(f, msg, string(b))
+}