Giant blob of minor changes
[dotfiles/.git] / .config / coc / extensions / coc-go-data / tools / pkg / mod / golang.org / x / tools@v0.0.0-20201028153306-37f0764111ff / cmd / present / play.go
diff --git a/.config/coc/extensions/coc-go-data/tools/pkg/mod/golang.org/x/tools@v0.0.0-20201028153306-37f0764111ff/cmd/present/play.go b/.config/coc/extensions/coc-go-data/tools/pkg/mod/golang.org/x/tools@v0.0.0-20201028153306-37f0764111ff/cmd/present/play.go
new file mode 100644 (file)
index 0000000..6650b94
--- /dev/null
@@ -0,0 +1,89 @@
+// Copyright 2012 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.
+
+package main
+
+import (
+       "bytes"
+       "fmt"
+       "io/ioutil"
+       "net/http"
+       "net/url"
+       "path/filepath"
+       "runtime"
+       "time"
+
+       "golang.org/x/tools/godoc/static"
+       "golang.org/x/tools/playground/socket"
+       "golang.org/x/tools/present"
+
+       // This will register handlers at /compile and /share that will proxy to the
+       // respective endpoints at play.golang.org. This allows the frontend to call
+       // these endpoints without needing cross-origin request sharing (CORS).
+       // Note that this is imported regardless of whether the endpoints are used or
+       // not (in the case of a local socket connection, they are not called).
+       _ "golang.org/x/tools/playground"
+)
+
+var scripts = []string{"jquery.js", "jquery-ui.js", "playground.js", "play.js"}
+
+// playScript registers an HTTP handler at /play.js that serves all the
+// scripts specified by the variable above, and appends a line that
+// initializes the playground with the specified transport.
+func playScript(root, transport string) {
+       modTime := time.Now()
+       var buf bytes.Buffer
+       for _, p := range scripts {
+               if s, ok := static.Files[p]; ok {
+                       buf.WriteString(s)
+                       continue
+               }
+               b, err := ioutil.ReadFile(filepath.Join(root, "static", p))
+               if err != nil {
+                       panic(err)
+               }
+               buf.Write(b)
+       }
+       fmt.Fprintf(&buf, "\ninitPlayground(new %v());\n", transport)
+       b := buf.Bytes()
+       http.HandleFunc("/play.js", func(w http.ResponseWriter, r *http.Request) {
+               w.Header().Set("Content-type", "application/javascript")
+               http.ServeContent(w, r, "", modTime, bytes.NewReader(b))
+       })
+}
+
+func initPlayground(basepath string, origin *url.URL) {
+       if !present.PlayEnabled {
+               return
+       }
+       if *usePlayground {
+               playScript(basepath, "HTTPTransport")
+               return
+       }
+
+       if *nativeClient {
+               // When specifying nativeClient, non-Go code cannot be executed
+               // because the NaCl setup doesn't support doing so.
+               socket.RunScripts = false
+               socket.Environ = func() []string {
+                       if runtime.GOARCH == "amd64" {
+                               return environ("GOOS=nacl", "GOARCH=amd64p32")
+                       }
+                       return environ("GOOS=nacl")
+               }
+       }
+       playScript(basepath, "SocketTransport")
+       http.Handle("/socket", socket.NewHandler(origin))
+}
+
+func playable(c present.Code) bool {
+       play := present.PlayEnabled && c.Play
+
+       // Restrict playable files to only Go source files when using play.golang.org,
+       // since there is no method to execute shell scripts there.
+       if *usePlayground {
+               return play && c.Ext == ".go"
+       }
+       return play
+}