diff --git a/.github/workflows/test-long-all.yml b/.github/workflows/test-long-all.yml index 4b43f3001e..182fcededb 100644 --- a/.github/workflows/test-long-all.yml +++ b/.github/workflows/test-long-all.yml @@ -17,7 +17,7 @@ jobs: matrix: os: [ubuntu-latest, windows-latest, macos-latest] version: ['stable', 'insiders'] - go: ['1.15', '1.16', '1.17'] + go: ['1.15', '1.16', '1.17', '1.18.0-beta1'] steps: - name: Clone repository diff --git a/.github/workflows/test-long.yml b/.github/workflows/test-long.yml index 91f1a761a9..79784f57d9 100644 --- a/.github/workflows/test-long.yml +++ b/.github/workflows/test-long.yml @@ -16,7 +16,7 @@ jobs: matrix: os: [ubuntu-latest, windows-latest] # TODO: reenable macos-latest version: ['stable'] - go: ['1.15', '1.16', '1.17'] + go: ['1.15', '1.16', '1.17', '1.18.0-beta1'] steps: - name: Clone repository diff --git a/CHANGELOG.md b/CHANGELOG.md index 24a8e7721a..19510a58ce 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,36 @@ +## v0.31.0 - 20 Jan, 2022 + +### Fixes + +- src/goStatus: assign id/name to each status bar item ([Issue 1571](https://github.com/golang/vscode-go/issues/1571)) +- Change go template file language id to `gotmpl` ([Issue 1957](https://github.com/golang/vscode-go/issues/1957)) + +### Debugging + +- Use 'dlv' instead of 'dlv-dap' binary ([Issue 1977](https://github.com/golang/vscode-go/issues/1977)) +- Experimental support of 'console' mode debugging ([Issue 124](https://github.com/golang/vscode-go/issues/124)) +- Support debugging with root privileges ([Issue 558](https://github.com/golang/vscode-go/issues/558)) +- Updated [debugging documentation]() ([Issue 1861](https://github.com/golang/vscode-go/issues/1861),[1719](https://github.com/golang/vscode-go/issues/1719),([1676](https://github.com/golang/vscode-go/issues/1676), [123](https://github.com/golang/vscode-go/issues/123), [855](https://github.com/golang/vscode-go/issues/855), [1840](https://github.com/golang/vscode-go/issues/1840))) +- Enabled remaining tests for dlv dap and fixed flaky tests ([Issue 1958](https://github.com/golang/vscode-go/issues/1958),[Issue 1993](https://github.com/golang/vscode-go/issues/1993)) +- Improvement of debug session start-up and session fail messages ([Issue 1861](https://github.com/golang/vscode-go/issues/1861)) + +### Test Explorer + +- src/goTest: don't resolve tests in virtual files +- src/goTest: fix output for subtests ([Issue 1837](https://github.com/golang/vscode-go/issues/1837)) + +### Development Process Updates + +- Recommend that contributers use npm ci instead of npm install when developing vscode-go ([Issue 2010](https://github.com/golang/vscode-go/issues/2010)) +- test: use @vscode/test-electron instead of vscode-test +- go.mod: update imports to latest versions +- package.json: pin direct dependencies ([Issue 2010](https://github.com/golang/vscode-go/issues/2010)) +- Enable tests with go1.18beta1 ([Issue 1950](https://github.com/golang/vscode-go/issues/1950)) + +### Thanks + +Thank you for your contribution, @firelizzard18, @hyangah, @jamalc, @polinasok, @TheNagaPraneeth, @suzmue! + ## v0.30.0 - 16 Dec, 2021 A list of all issues and changes can be found in the [v0.30.0 milestone](https://github.com/golang/vscode-go/milestone/40) and [commit history](https://github.com/golang/vscode-go/compare/v0.29.0...v0.30.0). diff --git a/README.md b/README.md index 692756b3d7..906e4f5fe2 100644 --- a/README.md +++ b/README.md @@ -16,6 +16,8 @@ We recommend switching your remote attach configurations in `launch.json` to use `"debugAdapter":"dlv-dap"` now to verify that this works for you. Please [file a new issue](https://github.com/golang/vscode-go/issues/new/choose) if you encounter any problems. +📣📣 Watch [Debugging Treasure Hunt](https://youtu.be/ZPIPPRjwg7Q) from [GopherCon 2021](https://www.gophercon.com/) for a fun take on a debugging demo with VS Code Go and Delve DAP. + ## Quick Start Welcome! 👋🏻
diff --git a/build/all.bash b/build/all.bash index 120da2b930..4483c8f46c 100755 --- a/build/all.bash +++ b/build/all.bash @@ -11,7 +11,6 @@ Available subcommands: help - display this help message. test - build and test locally. Some tests may fail if vscode is already in use. testlocal - build and test in a locally built container. - setup_env - setup environment for test. This installs tools under GOPATH/bin. ci - build and test with headless vscode. Requires Xvfb. EOUSAGE } @@ -81,7 +80,7 @@ prepare_nightly() { .displayName="Go Nightly" | .publisher="golang" | .description="Rich Go language support for Visual Studio Code (Nightly)" | -.contributes.configuration.properties."go.delveConfig.hideSystemGoroutines".default=true +.contributes.configuration.properties."go.delveConfig".properties.hideSystemGoroutines.default=true ') > /tmp/package.json && mv /tmp/package.json package.json # Replace CHANGELOG.md with CHANGELOG.md + Release commit info. diff --git a/docs/contributing.md b/docs/contributing.md index a7d37b7bf6..f05f617a9f 100644 --- a/docs/contributing.md +++ b/docs/contributing.md @@ -35,12 +35,12 @@ Please note that extra configuration is required to build and run the [Debug Ada ### Setup 1) Install [node](https://nodejs.org/en/). Note: make sure that you are using `npm v7` or higher. The file format for `package-lock.json` (changed significantly)[https://docs.npmjs.com/cli/v7/configuring-npm/package-lock-json#file-format] in `npm v7`. -2) Clone the repository, run `npm install`, and open VS Code: +2) Clone the repository, run `npm ci`, and open VS Code: ```bash git clone https://go.googlesource.com/vscode-go cd vscode-go - npm install + npm ci code . ``` @@ -64,11 +64,11 @@ If you make subsequent edits in the codebase, you can reload (`Ctrl+R`) the `[Ex Simple unit tests that do not require interaction with VS Code are located in `test/unit`. Tests in `test/integration` and `test/gopls` directories are integration tests. They involve invocation of the VS Code API and -require external Go tools installed in `GOPATH`. The command `setup_env` in [`build/all.bash`](https://github.com/golang/vscode-go/blob/master/build/all.bash) +require external Go tools installed in `GOPATH`. The command `installtools` in [`tools/installtools/main.go`](https://github.com/golang/vscode-go/blob/master/tools/installtools/main.go) installs all the tool dependencies in `GOPATH`. 1. `export GOPATH=/path/to/gopath/for/test` -1. `build/all.bash setup_env` +1. `go run tools/installtools/main.go` 1. Unfortunately, VS Code test framework inherits your user settings when running tests [Issue 43](https://github.com/golang/vscode-go/issues/43). Make sure VS Code user settings do not contain any go related configuration, except `go.gopath` or `go.toolsGopath` in case you installed the tools for testing in a different `GOPATH`. There are currently three test launch configurations: (1) `Launch Extension Tests`, (2) `Launch Extension Tests with Gopls`, and (3) `Launch Unit Tests`. To run the tests locally, open the Run view (`Ctrl+Shift+D`), select the relevant launch configuration, and hit the Play button (`F5`). @@ -79,13 +79,13 @@ After making changes to the extension, you may want to test it end-to-end instea 1. Install the [vsce](https://code.visualstudio.com/api/working-with-extensions/publishing-extension#vsce) tool for packaging extensions (`npm install -g vsce`). 2. `cd` into your `vscode-go` directory. -3. Install all dependencies by running `npm install`. +3. Install all dependencies by running `npm ci`. 4. Run `vsce package`. This will generate a file with a `.vsix` extension in your current directory. ```bash npm install -g vsce cd vscode-go - npm install + npm ci vsce package ``` diff --git a/docs/debugging.md b/docs/debugging.md index 4019f80f7c..dc7ba45995 100644 --- a/docs/debugging.md +++ b/docs/debugging.md @@ -4,7 +4,7 @@ The Go extension allows you to launch or attach to Go programs for debugging. Yo These debugging features are possible by using [Delve](https://github.com/go-delve/delve), the Go debugger. The Go extension has been communicating with Delve through a custom debug adapter program (`legacy` mode). -As the new [`Delve`'s native debug adapter implementation](https://github.com/go-delve/delve/tree/master/service/dap) has become available, the Go extension is transitioning to deprecate the legacy debug adapter in favor of direct communication with Delve via [DAP](https://microsoft.github.io/debug-adapter-protocol/overview). +As the new [`Delve`'s native debug adapter implementation](https://github.com/go-delve/delve/tree/master/service/dap) has become available (since Delve v1.6.1), the Go extension is transitioning to deprecate the legacy debug adapter in favor of direct communication with Delve via [DAP](https://microsoft.github.io/debug-adapter-protocol/overview). 📣 **We are happy to announce that now this new mode of Delve integration (_`dlv-dap`_ mode) is enabled for _local_ _debugging_ by default and is available for [_remote_ _debugging_](#remote-debugging) on demand!** @@ -20,9 +20,9 @@ When no configuration is configured yet (no `.vscode/launch.json` file), the ext If you already have launch configurations for the project (`.vscode/launch.json`), the Run view will display the configuration list to choose from.

-Delve DAP Install +Delve Install
-❗ When you start debugging in `dlv-dap` mode for the first time, the extension will ask to install Delve built from head (`dlv-dap`). Please follow the instructions to install, and then start the debugging session again (i.e. selecting the source file, pressing F5 or click the codelens). +❗ When you start debugging for the first time or if the `dlv` executable on your system is too old to support DAP, the extension may ask to install or update Delve. Please follow the instructions to install, and then start the debugging session again (i.e. selecting the source file, pressing F5 or click the codelens).

@@ -32,14 +32,16 @@ Watch ["Go: Writing and debugging fast, reliable, and efficient software"](https Please review [the Features section](#features) that provides an overview of the debug UI and available features. ### Staying Up-To-Date -[Delve’s native DAP implementation](https://github.com/go-delve/delve/tree/master/service/dap) is under active development, so take advantage of the most recent features and bug fixes by using Delve built from its master branch. The Go extension maintains this newest version of Delve separately from the officially released version of `dlv` and installs it with the name `dlv-dap`. +[Delve’s native DAP implementation](https://github.com/go-delve/delve/tree/master/service/dap) is under active development, so take advantage of the most recent features and bug fixes by installing the latest version of Delve. -The easiest way to update `dlv-dap` on demand is to use the `"Go: Install/Update Tools"` command from the Command Palette (Linux/Windows: Ctrl+Shift+P, Mac: ⇧+⌘+P). The command will show `dlv-dap` in the tool list. Select `dlv-dap`, and the extension will build the tool at master. +The easiest way to update `dlv` on demand is to use the `"Go: Install/Update Tools"` command from the Command Palette (Linux/Windows: Ctrl+Shift+P, Mac: ⇧+⌘+P). The command will show `dlv` in the tool list. -Once `dlv-dap` is installed on your system, the extension will prompt you for update whenever installing a newer version is necessary (usually after the Go extension upgrade). You can set the `go.toolsManagement.autoUpdate` setting so the extension can update `dlv-dap` automatically for you. +Once `dlv` is installed on your system, the extension will prompt you for update whenever installing a newer version is necessary (usually after the Go extension upgrade). You can set the `go.toolsManagement.autoUpdate` setting so the extension can update `dlv` automatically for you. -If you need to install `dlv-dap` manually outside of VS Code (for example, you are building a dev container with necessary tools preinstalled), please see the [Manual Installation](#bookmark=id.xuaxofprncd5) section. +If you need to install `dlv` manually outside of VS Code (for example, you are building a dev container with necessary tools preinstalled, or install `dlv` built from the tree head), follow the instruction in [Manually installing `dlv`](https://github.com/golang/vscode-go/blob/master/docs/debugging.md#manually-installing-dlv). +💡 The extension used to install a dev version of `dlv` as a separate binary (known as `dlv-dap`). As Delve DAP is stable and the transition work is near completion, from v0.31.0 (to be released in Jan 2022), the extension will switch to use `dlv`, instead of the `dlv-dap` binary. It is safe to delete `dlv-dap` installed on the system after v0.31.0 release. + ### Switching to legacy debug adapter If you need to use the legacy debug adapter (`legacy` mode) by default, @@ -84,8 +86,9 @@ You can choose "Start Debugging (F5)" and "Run Without Debugging (^F5)" a.k.a th * Supported modes * `debug`: build and debug a main package * `test`: build and debug a test - * `exec`: debug a precompiled binary. The binary needs to be built with `-gcflags=all="-N -l"` flags to avoid stripping debugging information. - * `auto`: automatically choose between `debug` and `test` depending on the open file. + * `exec`: debug a precompiled binary + * The binary must be built with `go build -gcflags=all="-N -l"` to disable inlining and optimizations that can interfere with debugging. + * `auto`: automatically choose between `debug` and `test` depending on the open file ⚠️ If a `port` attribute is added to any of the launch configurations, it will signal VS Code that instead of launching the debug server internally, it should connect to an external user-specified `dlv dap` server at `host:port` and launch the target there. See ["Remote Debugging"](#remote-debugging) for more details). @@ -97,9 +100,10 @@ You can use this configuration to attach to a running process or a running debug * Supported modes * `local`: attaches to a local process + * The binary must be built with `go build -gcflags=all="-N -l"` to disable inlining and optimizations that can interfere with debugging. * `remote`: attaches to an in-progress debug session run by an external server -You can debug an already running program using the `local` mode type configuration. The Go extension will start `dlv-dap` and configure it to attach to the specified process. Users can select the process to debug with one of the following options: +You can debug an already running program using the `local` mode type configuration. The Go extension will start `dlv dap` and configure it to attach to the specified process. Users can select the process to debug with one of the following options: * Specifying the numeric process id (PID) with the `processId` attribute. * Specifying the target program name in the `processId` attribute. If there are multiple processes matching the specified program name, the extension will show the list of matching processes at the start of the debug session. @@ -256,8 +260,10 @@ Here is the list of attributes specific to Go debugging. | Property | Launch | Attach | | --- | --- | --- | | `args` | Command line arguments passed to the debugged program.
|
_n/a_
| +| `asRoot` | (Experimental) Debug with elevated permissions (on Unix). It requires `integrated` or `external` console modes and is ignored in remote debugging.
(Default: `false`)
| (Experimental) Debug with elevated permissions (on Unix). This requires `integrated` or `external` console modes and is ignored in remote debugging.
(Default: `false`)
| | `backend` | Backend used by delve. Maps to `dlv`'s `--backend` flag.

Allowed Values: `"default"`, `"native"`, `"lldb"`, `"rr"`
|

_same as Launch_
| | `buildFlags` | Build flags, to be passed to the Go compiler. Maps to dlv's `--build-flags` flag.
(Default: `""`)
|
_n/a_
| +| `console` | (Experimental) Where to launch the debugger and the debug target: internal console, integrated terminal, or external terminal. It is ignored in remote debugging.

Allowed Values: `"internalConsole"`, `"integratedTerminal"`, `"externalTerminal"`
(Default: `internalConsole`)
| (Experimental) Where to launch the debugger: internal console, integrated terminal, or external terminal. This does not affect tty of the running program. It is ignored in remote debugging.

Allowed Values: `"internalConsole"`, `"integratedTerminal"`, `"externalTerminal"`
(Default: `internalConsole`)
| | `coreFilePath` | Path to the core dump file to open. For use on 'core' mode only
(Default: `""`)
|

_n/a_
| | `cwd` | Workspace relative or absolute path to the working directory of the program being debugged if a non-empty value is specified. The `program` folder is used as the working directory if `cwd` is omitted or empty.
(Default: `""`)
| Workspace relative or absolute path to the working directory of the program being debugged. Default is the current workspace.
(Default: `"${workspaceFolder}"`)
| | `debugAdapter` | Select which debug adapter to use with this launch configuration.

Allowed Values: `"legacy"`, `"dlv-dap"`
(Default: `dlv-dap`)
|

_same as Launch_
| @@ -284,7 +290,7 @@ Here is the list of attributes specific to Go debugging. | `traceDirPath` | Directory in which the record trace is located or to be created for a new output trace. For use on 'replay' mode only
(Default: `""`)
|
_n/a_
| -⚠️ `dlv-dap` needs file or directory values in the launch configuration to be absolute paths. When configuring those values, use [the VS Code variables substitution](https://code.visualstudio.com/docs/editor/variables-reference) - VS Code will resolve the variables inside strings in `launch.json` before passing the configuration to the Go extension and `dlv-dap`. For example, `${workspaceFolder}` will be replaced with the absolute path to the workspace root folder. When appropriate, the Go extension will resolve relative paths or home directory (~) before sending the configuration to `dlv-dap`. +⚠️ Delve resolves relative paths from `dlv dap` process's working directory, but from which directory the extension spawns the `dlv dap` process is an implementation detail. Thus, use [the VS Code variables substitution](https://code.visualstudio.com/docs/editor/variables-reference) to ensure consistent expansion of paths. VS Code will resolve the variables inside strings in `launch.json` before passing the configuration to the Go extension and `dlv dap`. For example, `${workspaceFolder}` will be replaced with the absolute path to the workspace root folder. When appropriate, the Go extension will resolve relative paths or home directory (~) before sending the configuration to `dlv dap`. ### **Debugging symlink directories** @@ -336,33 +342,32 @@ VS Code implements a generic, language-agnostic debugger UI based on [Debug Adap For information on debugging using the legacy debug adapter, please see the old [Debugging Documentation](https://github.com/golang/vscode-go/blob/master/docs/debugging.md). Note that many new or enhanced features discussed in this document may not be available with the legacy debug adapter. -### Manually installing `dlv-dap` +### Manually installing `dlv` -On rare occasions, you may want to install `dlv-dap` by yourself instead of letting the extension handle its installation. +On rare occasions, you may want to install `dlv` by yourself instead of letting the extension handle its installation. -First, find where the Go extension finds tools. Like [other tools the extension uses](https://github.com/golang/vscode-go/blob/master/docs/tools.md#tools), the Go extension searches the `dlv-dap` executable from `${GOPATH}/bin`, `${GOBIN}` and `${PATH}` (or `Path` in Windows). So, install `dlv-dap` in the directory. The easiest way to check the tool installation location the Go extension uses is currently by running the `Go: Locate Configured Go Tools` command from the command palette (⇧+⌘+P or Ctrl+Shift+P). - -The following commands download the source of Delve from the master branch, build & store as `dlv-dap` in `~/go/bin/` directory assuming the directory is the place you found from the first step. +First, find where the Go extension finds tools. Like [other tools the extension uses](https://github.com/golang/vscode-go/blob/master/docs/tools.md#tools), the Go extension searches the `dlv` executable from `${GOPATH}/bin`, `${GOBIN}` and `${PATH}` (or `Path` in Windows). So, install `dlv` in the directory. The easiest way to check the tool installation location the Go extension uses is currently by running the `Go: Locate Configured Go Tools` command from the command palette (⇧+⌘+P or Ctrl+Shift+P). If your Go version is 1.16 or newer: ``` -$ GOBIN=/tmp/ go install github.com/go-delve/delve/cmd/dlv@master -$ mv /tmp/dlv $GOPATH/bin/dlv-dap +$ GOBIN= go install github.com/go-delve/delve/cmd/dlv@latest ``` If your Go version is older than 1.16: ``` $ cd $(mktemp -d) -$ GO111MODULE=on GOBIN=/tmp/ go get github.com/go-delve/delve/cmd/dlv@master -$ mv /tmp/dlv $GOPATH/bin/dlv-dap +$ GO111MODULE=on GOBIN= go get github.com/go-delve/delve/cmd/dlv@latest ``` +You can choose to install a different version of `dlv` by specifying a specific commit hash, a branch name (e.g. `master`), or a released version instead of `latest`. +For more details about manual installation, see [Delve's documentation](https://github.com/go-delve/delve/tree/master/Documentation/installation). + If you want to explicitly specify the location of the delve binary, use the `go.alternateTools` setting: ```json5 "go.alternateTools": { - "dlv-dap": "" + "dlv": "" } ``` @@ -379,13 +384,13 @@ With the introduction of `dlv dap` users now have two options for remote (i.e. e In this mode the user must first manually start a [`dlv --headless`](https://github.com/go-delve/delve/tree/master/Documentation/api) server listening at `host:port` while specifying the target program to debug/test/exec or a process to attach to on the command-line. A [remote attach](#attach) configuration is then used to connect to the debugger with a running target. -The [headless dlv server](https://github.com/go-delve/delve/tree/master/Documentation/api) can now be used with both `"debugAdapter": "legacy"` (default value) and `"debugAdapter": "dlv-dap"` (with Delve v1.7.3 or newer) as well as Delve's [command-line interface](https://github.com/go-delve/delve/tree/master/Documentation/cli) via `dlv connect`. The `--accept-multiclient` flag can be used to make this a multi-use server that persists on `Disconnect` from a client and allows repeated client connections. Please see `dlv --help` and `dlv [command] --help` for dlv's command-line options. +The [headless dlv server](https://github.com/go-delve/delve/tree/master/Documentation/api) can now be used with both `"debugAdapter": "legacy"` (default value) and `"debugAdapter": "dlv-dap"` (with Delve v1.7.3 or newer) as well as Delve's [command-line interface](https://github.com/go-delve/delve/tree/master/Documentation/cli) via `dlv connect`. The `--accept-multiclient` flag makes this a multi-use server that persists on `Disconnect` from a client and allows repeated connections from any of the aforementioned clients. A combination of `--accept-multiclient --continue` flags can be used to resume process execution on start-up. Please see `dlv --help` and `dlv [command] --help` for dlv's command-line options. We encourage you to give the newly added `"debugAdapter": "dlv-dap"` support a try and to [let us know of any issues](https://github.com/golang/vscode-go/issues/new). If you need to use the `legacy` mode, pleasse also see the [legacy remote debugging](https://github.com/golang/vscode-go/blob/master/docs/debugging-legacy.md#remote-debugging) documentation. For example, start external headless server: ``` -dlv debug /path/to/program/ --headless --listen=:12345 +dlv debug /path/to/program/ --headless --listen=:12345 # also add as needed: --accept-multiclient --continue ``` Connect to it with a remote attach configuration in your `launch.json`: @@ -415,12 +420,12 @@ When using `launch` mode, the `program` attribute must point to the absolute pat

Remote Debugging

--> -Start a dlv-dap server ready to accept a client request to launch or attach to a target process: +Start a `dlv dap` server ready to accept a client request to launch or attach to a target process: ``` -$ dlv-dap dap --listen=:12345 +$ dlv dap --listen=:12345 ``` -Use the following `launch` configuration to tell `dlv-dap` to execute a binary precompiled with `-gcflags='all=-N -l'`: +Use the following `launch` configuration to tell `dlv` to execute a binary precompiled with `go build -gcflags='all=-N -l'`: ```json5 { @@ -439,7 +444,7 @@ Use the following `launch` configuration to tell `dlv-dap` to execute a binary p } ``` -Or have the binary compiled by dlv-dap by modifying the above configuration to use: +Or have the binary compiled by `dlv dap` by modifying the above configuration to use: ```json5 "mode": "debug", @@ -447,8 +452,8 @@ Or have the binary compiled by dlv-dap by modifying the above configuration to u ``` ⚠️ Limitations -* Delve DAP does not support `--accept-multiclient` or `--continue` flags, which means after a debug session ends, the dlv-dap process will always exit. -* If you use `debug` or `test` mode `launch` requests, Delve builds the target binary. Delve tries to build the target from the directory where the `dlv` (or `dlv-dap`) process is running, so make sure to run the `dlv-dap` command from the directory you would run the `go build` or `go test` command. +* Unlike `dlv --headless` above, `dlv dap` does not support `--accept-multiclient` or `--continue` flags, which means after a debug session ends, the `dlv dap` process will always exit. +* If you use `debug` or `test` mode `launch` requests, Delve builds the target binary. Delve tries to build the target from the directory where the `dlv` process is running, so make sure to run the `dlv` command from the directory you would run the `go build` or `go test` command. ### Running Debugee Externally @@ -463,8 +468,8 @@ The suggestions below are intended to help you troubleshoot any problems you enc 1. Read documentation and [FAQs](#faqs). Also check the [Delve FAQ](https://github.com/go-delve/delve/blob/master/Documentation/faq.md) in case the problem is mentioned there. 1. Check your `launch.json` configuration. Often error messages appearing in the DEBUG CONSOLE panel reveal issues. -1. Update Delve (`dlv-dap`) to pick up most recent bug fixes. Follow [the instruction](https://github.com/golang/vscode-go/blob/master/docs/debugging.md#staying-up-to-date). -1. Check if you can reproduce the issue with `dlv`, the command line tool from the integrated terminal. If it's reproducible when using `dlv`, take a look at the [delve's issue tracker](https://github.com/go-delve/delve/issues). +1. Update Delve (`dlv`) to pick up most recent bug fixes. Follow [the instruction](https://github.com/golang/vscode-go/blob/master/docs/debugging.md#staying-up-to-date). +1. Check if you can reproduce the issue with `dlv`, the command line tool from the integrated terminal. If it's reproducible when using `dlv`, take a look at the [Delve project issue tracker](https://github.com/go-delve/delve/issues). 1. Capture [logs](https://github.com/golang/vscode-go/blob/master/docs/debugging.md#collecting-logs) and inspect them. 1. Look at the [existing debugging issues](https://github.com/golang/vscode-go/labels/Debug) if similar issues were reported. 1. If none of these solve your problem, please [open a new issue](#reporting-issues). @@ -504,14 +509,19 @@ This problem often occurs when the source location used in compiling the debugge ### Debug sessions started with the "debug test" CodeLens or the test UI does not use my `launch.json` configuration. The "debug test" CodeLens and the [test UI](https://github.com/golang/vscode-go/blob/master/docs/features.md#test-and-benchmark) do not use the `launch.json` configuration ([Issue 855](https://github.com/golang/vscode-go/issues/855)). As a workaround, use the `go.delveConfig` setting and the `go.testFlags` setting. Please note that these all apply to all debug sessions unless overwritten by a specific `launch.json` configuration. + +### Why can't I use local attach with a process started with `go run`? + +Unlike `go build`, `go run` passes `-s -w` to the linker to strip the debug info. If you try attach to such a binary with a debugger, it will fail an error like `decoding dwarf section info at offset 0x0: too short`. Use `go build -gcflags='all=-N -l'` to build your binary instead. See Go Issue [24833](https://github.com/golang/go/issues/24833) for more information. + ## Reporting Issues -When you are having issues in `dlv-dap` mode, first check if the problems are reproducible after updating `dlv-dap`. It's possible that the problems are already fixed. Follow the instruction for [updating dlv-dap](#updating-dlv-dap)) and [updating extension](https://code.visualstudio.com/docs/editor/extension-gallery#\_extension-autoupdate). +When you are having issues in `dlv-dap` mode, first check if the problems are reproducible after updating `dlv` and using the most recent version of `dlv`. It's possible that the problems are already fixed. You can also try to install `dlv` at tree head. Follow the instruction for [updating `dlv`](#staying-up-to-date) and [updating extension](https://code.visualstudio.com/docs/editor/extension-gallery#\_extension-autoupdate). Please report issues in [our issue tracker](https://github.com/golang/vscode-go/issues) with the following information. * `go version` -* `go version -m ` +* `go version -m ` * VS Code and VS Code Go version (e.g. `code --version`) * Instructions to reproduce the issue (code snippets, your `launch.json`, screenshot) * DAP trace (See [the instruction](#collecting-logs)) @@ -543,11 +553,11 @@ Code for integration with the Go extension is mostly in [`src/goDebugFactory.ts` ### Testing -For simple launch cases, build the delve binary, and configure `"go.alternateTools"` setting. +For simple launch cases, build the `dlv` binary, and configure `"go.alternateTools"` setting. ```json5 "go.alternateTools": { - "dlv-dap": + "dlv": } ``` @@ -555,7 +565,7 @@ For simple launch cases, build the delve binary, and configure `"go.alternateToo If you are having issues with seeing logs and/or suspect problems in the extension's integration, you can start the Delve DAP server from a separate terminal and configure the extension to directly connect to it. Please remember to [file an issue](https://github.com/golang/vscode-go/issues/new) if you encounter any logging-related problems. ``` -$ dlv-dap dap --listen=:12345 --log --log-output=dap +$ dlv dap --listen=:12345 --log --log-output=dap ``` ```json5 diff --git a/docs/settings.md b/docs/settings.md index 4bb998e8f8..04682b4734 100644 --- a/docs/settings.md +++ b/docs/settings.md @@ -248,7 +248,7 @@ Default: `false` Additional flags to pass to gocode. Not applicable when using the language server. -Default: `[-builtin -ignore-case -unimported-packages]` +Default: `["-builtin", "-ignore-case", "-unimported-packages"]` ### `go.gocodePackageLookupMode` Used to determine the Go package lookup rules for completions by gocode. Only applies when using nsf/gocode. Latest versions of the Go extension uses mdempsky/gocode by default. Not applicable when using the language server.
@@ -546,6 +546,8 @@ Include only project_a: `-` (exclude everything), `+project_a` Include only project_a, but not node_modules inside it: `-`, `+project_a`, `-project_a/node_modules` + +Default: `["-node_modules"]` ### `build.env` env adds environment variables to external commands run by `gopls`, most notably `go list`. diff --git a/go.mod b/go.mod index 8815e6832e..8e50f370ee 100644 --- a/go.mod +++ b/go.mod @@ -3,6 +3,6 @@ module github.com/golang/vscode-go go 1.16 require ( - github.com/stamblerre/work-stats v0.0.0-20210726215650-a14fc877fae7 - golang.org/x/build v0.0.0-20210722210716-65acb205e577 + github.com/stamblerre/work-stats v0.0.0-20211013195910-92098c96a21a + golang.org/x/build v0.0.0-20211222221018-ee978b38c739 ) diff --git a/go.sum b/go.sum index 46884aca33..bb7d945304 100644 --- a/go.sum +++ b/go.sum @@ -1,3 +1,4 @@ +cloud.google.com/go v0.0.0-20170206221025-ce650573d812/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= @@ -18,8 +19,12 @@ cloud.google.com/go v0.72.0/go.mod h1:M+5Vjvlc2wnp6tjzE102Dw08nGShTscUx2nZMufOKP cloud.google.com/go v0.74.0/go.mod h1:VV1xSbzvo+9QJOxLDaJfTjx5e+MePCpCWwvftOeQmWk= cloud.google.com/go v0.78.0/go.mod h1:QjdrLG0uq+YwhjoVOLsS1t7TW8fs36kLs4XO5R5ECHg= cloud.google.com/go v0.79.0/go.mod h1:3bzgcEeQlzbuEAYu4mrWhKqWjmpprinYgKJLgKHnbb8= -cloud.google.com/go v0.81.0 h1:at8Tk2zUz63cLPR0JPWm5vp77pEZmzxEQBEfRKn1VV8= cloud.google.com/go v0.81.0/go.mod h1:mk/AM35KwGk/Nm2YSeZbxXdrNK3KZOYHmLkOqC2V6E0= +cloud.google.com/go v0.83.0/go.mod h1:Z7MJUsANfY0pYPdw0lbnivPx4/vhy/e2FEkSkF7vAVY= +cloud.google.com/go v0.84.0/go.mod h1:RazrYuxIK6Kb7YrzzhPoLmCVzl7Sup4NrbKPg8KHSUM= +cloud.google.com/go v0.87.0/go.mod h1:TpDYlFy7vuLzZMMZ+B6iRiELaY7z/gJPaqbMx6mlWcY= +cloud.google.com/go v0.88.0 h1:MZ2cf9Elnv1wqccq8ooKO2MqHQLc+ChCp/+QWObCpxg= +cloud.google.com/go v0.88.0/go.mod h1:dnKwfYbP9hQhefiUvpbcAyoGSHUrOxR20JVElLiUvEY= cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= @@ -32,6 +37,7 @@ cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2k cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU= +cloud.google.com/go/spanner v1.24.0/go.mod h1:EZI0yH1D/PrXK0XH9Ba5LGXTXWeqZv0ClOD/19a0Z58= cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= @@ -40,13 +46,29 @@ cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9 contrib.go.opencensus.io/exporter/prometheus v0.3.0/go.mod h1:rpCPVQKhiyH8oomWgm34ZmgIdZa8OVYO5WAIygPbBBE= contrib.go.opencensus.io/exporter/stackdriver v0.13.5/go.mod h1:aXENhDJ1Y4lIg4EUaVTwzvYETVNZk10Pu26tevFKLUc= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= +github.com/Azure/azure-pipeline-go v0.2.3/go.mod h1:x841ezTBIMG6O3lAcl8ATHnsOPVl2bqk7S3ta6S6u4k= +github.com/Azure/azure-storage-blob-go v0.13.0/go.mod h1:pA9kNqtjUeQF2zOSu4s//nUdBD+e64lEuc4sVnuOfNs= +github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8= +github.com/Azure/go-autorest v14.2.0+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24= +github.com/Azure/go-autorest/autorest/adal v0.9.2/go.mod h1:/3SMAM86bP6wC9Ev35peQDUeqFZBMH07vvUOmg4z/fE= +github.com/Azure/go-autorest/autorest/adal v0.9.14/go.mod h1:W/MM4U6nLxnIskrw4UwWzlHfGjwUS50aOsc/I3yuU8M= +github.com/Azure/go-autorest/autorest/date v0.3.0/go.mod h1:BI0uouVdmngYNUzGWeSYnokU+TrmwEsOqdt8Y6sso74= +github.com/Azure/go-autorest/autorest/mocks v0.4.1/go.mod h1:LTp+uSrOhSkaKrUy935gNZuuIPPVsHlr9DSOxSayd+k= +github.com/Azure/go-autorest/logger v0.2.1/go.mod h1:T9E3cAhj2VqvPOtCYAvby9aBXkZmbF5NWuPV8+WeEW8= +github.com/Azure/go-autorest/tracing v0.6.0/go.mod h1:+vhtPC754Xsa23ID7GlGsrdKBpUA79WCAKPPZVC2DeU= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= +github.com/ClickHouse/clickhouse-go v1.4.3/go.mod h1:EaI/sW7Azgz9UATzd5ZdZHRUhHgv5+JMS9NSr2smCJI= +github.com/GoogleCloudPlatform/cloudsql-proxy v0.0.0-20190129172621-c8b1d7a94ddf/go.mod h1:aJ4qN3TfrelA6NZ6AXsXRfmEVaYin3EDbSPJrKS8OXo= github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0= +github.com/Masterminds/semver/v3 v3.1.1/go.mod h1:VPu/7SZ7ePZ3QOrcuXROw5FAcLl4a0cBrbBpGY/8hQs= +github.com/Microsoft/go-winio v0.4.16/go.mod h1:XB6nPKklQyQ7GC9LdcBEcBl8PF76WugXOPRXwdLnMv0= github.com/NYTimes/gziphandler v1.1.1/go.mod h1:n/CVRwUEOgIxrgPvAQhUUr9oeUtvrhMomdKFjzJNB0c= github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo= github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI= github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g= +github.com/aclements/go-gg v0.0.0-20170118225347-6dbb4e4fefb0/go.mod h1:55qNq4vcpkIuHowELi5C8e+1yUHtoLoOUR9QU5j7Tes= +github.com/aclements/go-moremath v0.0.0-20161014184102-0ff62e0875ff/go.mod h1:idZL3yvz4kzx1dsBOAC+oYv6L92P1oFEhUXUB1A/lwQ= github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5/go.mod h1:SkGFH1ia65gfNATL8TAiHDNxPzPdmEL5uirI2Uyuz6c= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= @@ -54,6 +76,10 @@ github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRF github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho= github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c= +github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be/go.mod h1:ySMOLuWl6zY27l47sB3qLNK6tF2fkHG55UZxx8oIVo4= +github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= +github.com/apache/arrow/go/arrow v0.0.0-20200601151325-b2287a20f230/go.mod h1:QNYViu/X0HXDHw7m3KXzWSVXIbfUvJqBFe6Gj8/pYA0= +github.com/apache/arrow/go/arrow v0.0.0-20210521153258-78c88a9f517b/go.mod h1:R4hW3Ug0s+n4CUsWHKOj00Pu01ZqU4x/hSF5kXUcXKQ= github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= github.com/apache/thrift v0.13.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= @@ -61,17 +87,47 @@ github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmV github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= github.com/aryann/difflib v0.0.0-20170710044230-e206f873d14a/go.mod h1:DAHtR1m6lCRdSC2Tm3DSWRPvIPr6xNKyeHdqDQSQT+A= github.com/aws/aws-lambda-go v1.13.3/go.mod h1:4UKl9IzQMoD+QF79YdCuzCwp8VbmG4VAQwij/eHl5CU= +github.com/aws/aws-sdk-go v1.17.7/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= github.com/aws/aws-sdk-go v1.23.20/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= github.com/aws/aws-sdk-go v1.27.0/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= github.com/aws/aws-sdk-go v1.30.15/go.mod h1:5zCpMtNQVjRREroY7sYe8lOMRSxkhG6MZveU8YkpAk0= github.com/aws/aws-sdk-go-v2 v0.18.0/go.mod h1:JWVYvqSMppoMJC0x5wdwiImzgXTI9FuZwxzkQq9wy+g= +github.com/aws/aws-sdk-go-v2 v1.3.2/go.mod h1:7OaACgj2SX3XGWnrIjGlJM22h6yD6MEWKvm7levnnM8= +github.com/aws/aws-sdk-go-v2 v1.6.0/go.mod h1:tI4KhsR5VkzlUa2DZAdwx7wCAYGwkZZ1H31PYrBFx1w= +github.com/aws/aws-sdk-go-v2/config v1.1.5/go.mod h1:P3F1hku7qzC81txjwXnwOM6Ex6ezkU6+/557Teyb64E= +github.com/aws/aws-sdk-go-v2/config v1.3.0/go.mod h1:lOxzHWDt/k7MMidA/K8DgXL4+ynnZYsDq65Qhs/l3dg= +github.com/aws/aws-sdk-go-v2/credentials v1.1.5/go.mod h1:Ir1R6tPiR1/2y1hes8yOijFMz54hzSmgcmCDo6F45Qc= +github.com/aws/aws-sdk-go-v2/credentials v1.2.1/go.mod h1:Rfvim1eZTC9W5s8YJyYYtl1KMk6e8fHv+wMRQGO4Ru0= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.0.6/go.mod h1:0+fWMitrmIpENiY8/1DyhdYPUCAPvd9UNz9mtCsEoLQ= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.1.1/go.mod h1:GTXAhrxHQOj9N+J5tYVjwt+rpRyy/42qLjlgw9pz1a0= +github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.1.2/go.mod h1:Azf567f5wBUfUbwpyJJnLM/geFFIzEulGR30L+nQZOE= +github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.2.1/go.mod h1:2JOqaBP3I6TEm27NLb11UiD9j4HZsJ+EW4N7vCf8WGQ= +github.com/aws/aws-sdk-go-v2/internal/ini v1.0.0/go.mod h1:g3XMXuxvqSMUjnsXXp/960152w0wFS4CXVYgQaSVOHE= +github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.0.4/go.mod h1:BCfU3Uo2fhKcMZFp9zU5QQGQxqWCOYmZ/27Dju3S/do= +github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.1.0/go.mod h1:zdjOOy0ojUn3iNELo6ycIHSMCp4xUbycSHfb8PnbbyM= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.0.6/go.mod h1:L0KWr0ASo83PRZu9NaZaDsw3koS6PspKv137DMDZjHo= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.1.1/go.mod h1:2+ehJPkdIdl46VCj67Emz/EH2hpebHZtaLdzqg+sWOI= +github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.2.2/go.mod h1:nnutjMLuna0s3GVY/MAkpLX03thyNER06gXvnMAPj5g= +github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.3.1/go.mod h1:IpjxfORBAFfkMM0VEx5gPPnEy6WV4Hk0F/+zb/SUWyw= +github.com/aws/aws-sdk-go-v2/service/s3 v1.5.0/go.mod h1:uwA7gs93Qcss43astPUb1eq4RyceNmYWAQjZFDOAMLo= +github.com/aws/aws-sdk-go-v2/service/s3 v1.8.0/go.mod h1:zHCjYoODbYRLz/iFicYswq1gRoxBnHvpY5h2Vg3/tJ4= +github.com/aws/aws-sdk-go-v2/service/sso v1.1.5/go.mod h1:bpGz0tidC4y39sZkQSkpO/J0tzWCMXHbw6FZ0j1GkWM= +github.com/aws/aws-sdk-go-v2/service/sso v1.2.1/go.mod h1:VimPFPltQ/920i1X0Sb0VJBROLIHkDg2MNP10D46OGs= +github.com/aws/aws-sdk-go-v2/service/sts v1.2.2/go.mod h1:ssRzzJ2RZOVuKj2Vx1YE7ypfil/BIlgmQnCSW4DistU= +github.com/aws/aws-sdk-go-v2/service/sts v1.4.1/go.mod h1:G9osDWA52WQ38BDcj65VY1cNmcAQXAXTsE8IWH8j81w= +github.com/aws/smithy-go v1.3.1/go.mod h1:SObp3lf9smib00L/v3U2eAKG8FyQ7iLrJnQiAmR5n+E= +github.com/aws/smithy-go v1.4.0/go.mod h1:SObp3lf9smib00L/v3U2eAKG8FyQ7iLrJnQiAmR5n+E= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= +github.com/bitly/go-hostpool v0.0.0-20171023180738-a3a6125de932/go.mod h1:NOuUCSz6Q9T7+igc/hlvDOUdtWKryOrtFyIVABv/p7k= +github.com/bkaradzic/go-lz4 v1.0.0/go.mod h1:0YdlkowM3VswSROI7qDxhRvJ3sLhlFrRRwjwegp5jy4= +github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869/go.mod h1:Ekp36dRnpXw/yCqJaO+ZrUyxD+3VXMFFr56k5XYrpB4= github.com/bradfitz/go-smtpd v0.0.0-20170404230938-deb6d6237625/go.mod h1:HYsPBTaaSFSlLx/70C2HPIMNZpVV8+vt/A+FMnYP11g= github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ= github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= +github.com/cenkalti/backoff/v4 v4.0.2/go.mod h1:eEew/i+1Q6OrCDZh3WiXYv3+nJwBASZ8Bog/87DQnVg= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= @@ -79,25 +135,43 @@ github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5P github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= github.com/clbanning/x2j v0.0.0-20191024224557-825249438eec/go.mod h1:jMjuTZXRI4dUb/I5gc9Hdhagfvm9+RyrPryS/auMzxE= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/cloudflare/golz4 v0.0.0-20150217214814-ef862a3cdc58/go.mod h1:EOBUe0h4xcZ5GoxqC5SDxFQ8gwyZPKQoEzownBlhI80= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= +github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cockroachdb/apd v1.1.0/go.mod h1:8Sl8LxpKi29FqWXR16WEFZRNSz3SoPzUzeMeY4+DwBQ= +github.com/cockroachdb/cockroach-go/v2 v2.1.1/go.mod h1:7NtUnP6eK+l6k483WSYNrq3Kb23bWV10IRV1TyeSpwM= github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI= +github.com/containerd/containerd v1.4.3/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= github.com/coreos/go-systemd v0.0.0-20181012123002-c6f51f82210d/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= +github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= +github.com/coreos/go-systemd v0.0.0-20190719114852-fd7a80b32e1f/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= +github.com/creack/pty v1.1.15/go.mod h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr4O4= +github.com/cznic/mathutil v0.0.0-20180504122225-ca4c9f2c1369/go.mod h1:e6NPNENfs9mPDVNRekM7lKScauxd5kXTr1Mfyig6TDM= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/denisenkom/go-mssqldb v0.10.0/go.mod h1:xbL0rPBG9cCiLr28tMa8zpbdarY27NDyej4t/EjAShU= +github.com/dghubble/oauth1 v0.7.0/go.mod h1:8pFdfPkv/jr8mkChVbNVuJ0suiHe278BtWI4Tk1ujxk= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= +github.com/dhui/dktest v0.3.4/go.mod h1:4m4n6lmXlmVfESth7mzdcv8nBI5mOb5UROPqjM02csU= +github.com/docker/distribution v2.7.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= +github.com/docker/docker v17.12.0-ce-rc1.0.20210128214336-420b1d36250f+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec= +github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= +github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= github.com/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs= github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU= github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I= +github.com/edsrzf/mmap-go v0.0.0-20170320065105-0bce6a688712/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M= github.com/edsrzf/mmap-go v1.0.0/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M= github.com/envoyproxy/go-control-plane v0.6.9/go.mod h1:SBwIajubJHhxtWwsL9s8ss4safvEdbitLhGGK48rN6g= github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= @@ -105,30 +179,70 @@ github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.m github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= github.com/envoyproxy/go-control-plane v0.9.7/go.mod h1:cwu0lG7PUMfa9snN8LXBig5ynNVH9qI8YYLbd1fK2po= github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= +github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= +github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/esimov/stackblur-go v1.0.1/go.mod h1:a3zzeKuJKUpCcReHmEsuPaEnq42D2b/bHoCI8UjIuMY= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= +github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k= +github.com/form3tech-oss/jwt-go v3.2.3+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k= github.com/franela/goblin v0.0.0-20200105215937-c9ffbefa60db/go.mod h1:7dvUGVsVBjqR7JHJk0brhHOZYGmfBYOrK0ZhYMEtBr4= github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8/go.mod h1:ZhphrRTfi2rbfLwlschooIH4+wKKDR4Pdxhh+TRoA20= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= +github.com/fsouza/fake-gcs-server v1.17.0/go.mod h1:D1rTE4YCyHFNa99oyJJ5HyclvN/0uQR+pM/VdlL83bw= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/gliderlabs/ssh v0.1.1/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0= +github.com/gliderlabs/ssh v0.3.3/go.mod h1:ZSS+CUoKHDrqVakTfTWUlKSr9MtMFkC4UvtQKD7O914= github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-kit/kit v0.10.0/go.mod h1:xUsJbQ/Fp4kEt7AFgCuvyX4a71u8h9jB8tj/ORgOZ7o= +github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY= github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= +github.com/go-sql-driver/mysql v1.4.1/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= +github.com/gobuffalo/attrs v0.0.0-20190224210810-a9411de4debd/go.mod h1:4duuawTqi2wkkpB4ePgWMaai6/Kc6WEz83bhFwpHzj0= +github.com/gobuffalo/depgen v0.0.0-20190329151759-d478694a28d3/go.mod h1:3STtPUQYuzV0gBVOY3vy6CfMm/ljR4pABfrTeHNLHUY= +github.com/gobuffalo/depgen v0.1.0/go.mod h1:+ifsuy7fhi15RWncXQQKjWS9JPkdah5sZvtHc2RXGlg= +github.com/gobuffalo/envy v1.6.15/go.mod h1:n7DRkBerg/aorDM8kbduw5dN3oXGswK5liaSCx4T5NI= +github.com/gobuffalo/envy v1.7.0/go.mod h1:n7DRkBerg/aorDM8kbduw5dN3oXGswK5liaSCx4T5NI= +github.com/gobuffalo/flect v0.1.0/go.mod h1:d2ehjJqGOH/Kjqcoz+F7jHTBbmDb38yXA598Hb50EGs= +github.com/gobuffalo/flect v0.1.1/go.mod h1:8JCgGVbRjJhVgD6399mQr4fx5rRfGKVzFjbj6RE/9UI= +github.com/gobuffalo/flect v0.1.3/go.mod h1:8JCgGVbRjJhVgD6399mQr4fx5rRfGKVzFjbj6RE/9UI= +github.com/gobuffalo/genny v0.0.0-20190329151137-27723ad26ef9/go.mod h1:rWs4Z12d1Zbf19rlsn0nurr75KqhYp52EAGGxTbBhNk= +github.com/gobuffalo/genny v0.0.0-20190403191548-3ca520ef0d9e/go.mod h1:80lIj3kVJWwOrXWWMRzzdhW3DsrdjILVil/SFKBzF28= +github.com/gobuffalo/genny v0.1.0/go.mod h1:XidbUqzak3lHdS//TPu2OgiFB+51Ur5f7CSnXZ/JDvo= +github.com/gobuffalo/genny v0.1.1/go.mod h1:5TExbEyY48pfunL4QSXxlDOmdsD44RRq4mVZ0Ex28Xk= +github.com/gobuffalo/gitgen v0.0.0-20190315122116-cc086187d211/go.mod h1:vEHJk/E9DmhejeLeNt7UVvlSGv3ziL+djtTr3yyzcOw= +github.com/gobuffalo/gogen v0.0.0-20190315121717-8f38393713f5/go.mod h1:V9QVDIxsgKNZs6L2IYiGR8datgMhB577vzTDqypH360= +github.com/gobuffalo/gogen v0.1.0/go.mod h1:8NTelM5qd8RZ15VjQTFkAW6qOMx5wBbW4dSCS3BY8gg= +github.com/gobuffalo/gogen v0.1.1/go.mod h1:y8iBtmHmGc4qa3urIyo1shvOD8JftTtfcKi+71xfDNE= +github.com/gobuffalo/here v0.6.0/go.mod h1:wAG085dHOYqUpf+Ap+WOdrPTp5IYcDAs/x7PLa8Y5fM= +github.com/gobuffalo/logger v0.0.0-20190315122211-86e12af44bc2/go.mod h1:QdxcLw541hSGtBnhUc4gaNIXRjiDppFGaDqzbrBd3v8= +github.com/gobuffalo/mapi v1.0.1/go.mod h1:4VAGh89y6rVOvm5A8fKFxYG+wIW6LO1FMTG9hnKStFc= +github.com/gobuffalo/mapi v1.0.2/go.mod h1:4VAGh89y6rVOvm5A8fKFxYG+wIW6LO1FMTG9hnKStFc= +github.com/gobuffalo/packd v0.0.0-20190315124812-a385830c7fc0/go.mod h1:M2Juc+hhDXf/PnmBANFCqx4DM3wRbgDvnVWeG2RIxq4= +github.com/gobuffalo/packd v0.1.0/go.mod h1:M2Juc+hhDXf/PnmBANFCqx4DM3wRbgDvnVWeG2RIxq4= +github.com/gobuffalo/packr/v2 v2.0.9/go.mod h1:emmyGweYTm6Kdper+iywB6YK5YzuKchGtJQZ0Odn4pQ= +github.com/gobuffalo/packr/v2 v2.2.0/go.mod h1:CaAwI0GPIAv+5wKLtv8Afwl+Cm78K/I/VCm/3ptBN+0= +github.com/gobuffalo/syncx v0.0.0-20190224160051-33c29581e754/go.mod h1:HhnNqWY95UYwwW3uSASeV7vtgYkT2t16hJgV3AEPUpw= +github.com/gocql/gocql v0.0.0-20190301043612-f6df8288f9b4/go.mod h1:4Fw1eo5iaEhDUs8XyuhSVCVy52Jq3L+/3GJgYkwc+/0= +github.com/gofrs/uuid v3.2.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= +github.com/gofrs/uuid v4.0.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= github.com/gogo/googleapis v1.1.0/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s= github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= github.com/gogo/protobuf v1.2.0/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= +github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= +github.com/golang-migrate/migrate/v4 v4.15.0-beta.3/go.mod h1:g9qbiDvB47WyrRnNu2t2gMZFNHKnatsYRxsGZbCi4EM= +github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe/go.mod h1:8vg3r2VgvsThLBIFL93Qb5yWzgyZWhEmBwUJWevAkK0= github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= @@ -144,6 +258,8 @@ github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= github.com/golang/mock v1.5.0/go.mod h1:CWnOUgYIOo4TcNZ0wHX3YZCqsaM1I1Jvs6v3mP3KVu8= +github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs= +github.com/golang/protobuf v1.0.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= @@ -159,11 +275,22 @@ github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QD github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= -github.com/golang/protobuf v1.5.1 h1:jAbXjIeW2ZSW2AwFxlGTDoc2CjI2XujLkV3ArsZFCvc= github.com/golang/protobuf v1.5.1/go.mod h1:DopwsBzvsk0Fs44TXzsVbJyPhcCPeIwnvohx4u74HPM= +github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= +github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/golang/snappy v0.0.0-20170215233205-553a64147049/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/gonum/blas v0.0.0-20181208220705-f22b278b28ac/go.mod h1:P32wAyui1PQ58Oce/KYkOqQv8cVw1zAapXOl+dRFGbc= +github.com/gonum/floats v0.0.0-20181209220543-c233463c7e82/go.mod h1:PxC8OnwL11+aosOB5+iEPoV3picfs8tUpkVd0pDo+Kg= +github.com/gonum/internal v0.0.0-20181124074243-f884aa714029/go.mod h1:Pu4dmpkhSyOzRwuXkOgAvijx4o+4YMUJJo9OvPYMkks= +github.com/gonum/lapack v0.0.0-20181123203213-e4cdc5a0bff9/go.mod h1:XA3DeT6rxh2EAE789SSiSJNqxPaC0aE9J8NTOI0Jo/A= +github.com/gonum/matrix v0.0.0-20181209220409-c518dec07be9/go.mod h1:0EXg4mc1CNP0HCqCz+K4ts155PXIlUywf0wqN+GfPZw= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +github.com/google/flatbuffers v1.11.0/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8= +github.com/google/flatbuffers v2.0.0+incompatible/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= @@ -174,17 +301,20 @@ github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.5 h1:Khx7svrCpmxxtHBq5j2mp/xVjsi8hQMfNLvJFAlrGgU= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.6 h1:BKbKCqvP6I+rmFHt06ZmyQtvB8xAkWdhFyr0ZUNZcxQ= +github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-github v17.0.0+incompatible h1:N0LgJ1j65A7kfXrZnUDaYCs/Sf4rEjNlfyDHW9dolSY= github.com/google/go-github v17.0.0+incompatible/go.mod h1:zLgOLi98H3fifZn+44m+umXrS52loVEgC2AApnigrVQ= github.com/google/go-github/v28 v28.1.1/go.mod h1:bsqJWQX05omyWVmc00nEUql9mhQyv38lDZ8kPZcQVoM= +github.com/google/go-github/v35 v35.2.0/go.mod h1:s0515YVTI+IMrDoy9Y4pHt9ShGpzHvHO8rZ7L7acgvs= github.com/google/go-querystring v1.0.0 h1:Xkwi/a1rcvNg1PPYe5vI8GbeBY/jrVuDX5ASuANWTrk= github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= +github.com/google/martian/v3 v3.2.1/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk= github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= @@ -196,23 +326,34 @@ github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLe github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210122040257-d980be63207e/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210226084205-cbba55b83ad5/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210601050228-01bbb1931b22/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210609004039-a478d1d731e9/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210715191844-86eeefc3e471/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.2.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/googleapis/gax-go v0.0.0-20161107002406-da06d194a00e h1:CYRpN206UTHUinz3VJoLaBdy1gEGeJNsqT0mvswDcMw= +github.com/googleapis/gax-go v0.0.0-20161107002406-da06d194a00e/go.mod h1:SFVmujtThgffbyetf+mdk2eWhX2bMyUtNHzFKcPA9HY= github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= github.com/googleapis/gax-go/v2 v2.0.5 h1:sjZBwGj9Jlw33ImPtvFviGYvseOtDM7hkSKB7+Tv3SM= github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg= +github.com/gorilla/handlers v1.4.2/go.mod h1:Qkdc/uu4tH4g6mTK6auzZ766c4CA0Ng8+o/OAirnOIQ= github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= +github.com/gorilla/mux v1.7.4/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7 h1:pdN6V1QBWetyv/0+wjACpqVH+eVULgEjkurDLq3goeM= github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= +github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= +github.com/hailocab/go-hostpool v0.0.0-20160125115350-e80d13ce29ed/go.mod h1:tMWxXQ9wFIaZeTI9F+hmhFiGpFmhOHzyShyFUhRm0H4= github.com/hashicorp/consul/api v1.3.0/go.mod h1:MmDNSzIMUjNpY/mQ398R4bk2FnqQLoPndWW5VkKPlCE= github.com/hashicorp/consul/sdk v0.3.0/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= @@ -220,6 +361,7 @@ github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtng github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= +github.com/hashicorp/go-multierror v1.1.0/go.mod h1:spPvp8C1qA32ftKqdAHm4hHTbPw+vmowP0z+KUhOZdA= github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU= github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU= github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4= @@ -240,9 +382,69 @@ github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1: github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= github.com/influxdata/influxdb1-client v0.0.0-20191209144304-8bf82d3c094d/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo= +github.com/jackc/chunkreader v1.0.0/go.mod h1:RT6O25fNZIuasFJRyZ4R/Y2BbhasbmZXF9QQ7T3kePo= +github.com/jackc/chunkreader/v2 v2.0.0/go.mod h1:odVSm741yZoC3dpHEUXIqA9tQRhFrgOHwnPIn9lDKlk= +github.com/jackc/chunkreader/v2 v2.0.1/go.mod h1:odVSm741yZoC3dpHEUXIqA9tQRhFrgOHwnPIn9lDKlk= +github.com/jackc/pgconn v0.0.0-20190420214824-7e0022ef6ba3/go.mod h1:jkELnwuX+w9qN5YIfX0fl88Ehu4XC3keFuOJJk9pcnA= +github.com/jackc/pgconn v0.0.0-20190824142844-760dd75542eb/go.mod h1:lLjNuW/+OfW9/pnVKPazfWOgNfH2aPem8YQ7ilXGvJE= +github.com/jackc/pgconn v0.0.0-20190831204454-2fabfa3c18b7/go.mod h1:ZJKsE/KZfsUgOEh9hBm+xYTstcNHg7UPMVJqRfQxq4s= +github.com/jackc/pgconn v1.4.0/go.mod h1:Y2O3ZDF0q4mMacyWV3AstPJpeHXWGEetiFttmq5lahk= +github.com/jackc/pgconn v1.5.0/go.mod h1:QeD3lBfpTFe8WUnPZWN5KY/mB8FGMIYRdd8P8Jr0fAI= +github.com/jackc/pgconn v1.5.1-0.20200601181101-fa742c524853/go.mod h1:QeD3lBfpTFe8WUnPZWN5KY/mB8FGMIYRdd8P8Jr0fAI= +github.com/jackc/pgconn v1.8.0/go.mod h1:1C2Pb36bGIP9QHGBYCjnyhqu7Rv3sGshaQUvmfGIB/o= +github.com/jackc/pgconn v1.9.0/go.mod h1:YctiPyvzfU11JFxoXokUOOKQXQmDMoJL9vJzHH8/2JY= +github.com/jackc/pgconn v1.9.1-0.20210724152538-d89c8390a530/go.mod h1:4z2w8XhRbP1hYxkpTuBjTS3ne3J48K83+u0zoyvg2pI= +github.com/jackc/pgconn v1.10.0/go.mod h1:4z2w8XhRbP1hYxkpTuBjTS3ne3J48K83+u0zoyvg2pI= +github.com/jackc/pgerrcode v0.0.0-20201024163028-a0d42d470451/go.mod h1:a/s9Lp5W7n/DD0VrVoyJ00FbP2ytTPDVOivvn2bMlds= +github.com/jackc/pgio v1.0.0/go.mod h1:oP+2QK2wFfUWgr+gxjoBH9KGBb31Eio69xUb0w5bYf8= +github.com/jackc/pgmock v0.0.0-20190831213851-13a1b77aafa2/go.mod h1:fGZlG77KXmcq05nJLRkk0+p82V8B8Dw8KN2/V9c/OAE= +github.com/jackc/pgmock v0.0.0-20201204152224-4fe30f7445fd/go.mod h1:hrBW0Enj2AZTNpt/7Y5rr2xe/9Mn757Wtb2xeBzPv2c= +github.com/jackc/pgmock v0.0.0-20210724152146-4ad1a8207f65/go.mod h1:5R2h2EEX+qri8jOWMbJCtaPWkrrNc7OHwsp2TCqp7ak= +github.com/jackc/pgpassfile v1.0.0/go.mod h1:CEx0iS5ambNFdcRtxPj5JhEz+xB6uRky5eyVu/W2HEg= +github.com/jackc/pgproto3 v1.1.0/go.mod h1:eR5FA3leWg7p9aeAqi37XOTgTIbkABlvcPB3E5rlc78= +github.com/jackc/pgproto3/v2 v2.0.0-alpha1.0.20190420180111-c116219b62db/go.mod h1:bhq50y+xrl9n5mRYyCBFKkpRVTLYJVWeCc+mEAI3yXA= +github.com/jackc/pgproto3/v2 v2.0.0-alpha1.0.20190609003834-432c2951c711/go.mod h1:uH0AWtUmuShn0bcesswc4aBTWGvw0cAxIJp+6OB//Wg= +github.com/jackc/pgproto3/v2 v2.0.0-rc3/go.mod h1:ryONWYqW6dqSg1Lw6vXNMXoBJhpzvWKnT95C46ckYeM= +github.com/jackc/pgproto3/v2 v2.0.0-rc3.0.20190831210041-4c03ce451f29/go.mod h1:ryONWYqW6dqSg1Lw6vXNMXoBJhpzvWKnT95C46ckYeM= +github.com/jackc/pgproto3/v2 v2.0.1/go.mod h1:WfJCnwN3HIg9Ish/j3sgWXnAfK8A9Y0bwXYU5xKaEdA= +github.com/jackc/pgproto3/v2 v2.0.6/go.mod h1:WfJCnwN3HIg9Ish/j3sgWXnAfK8A9Y0bwXYU5xKaEdA= +github.com/jackc/pgproto3/v2 v2.0.7/go.mod h1:WfJCnwN3HIg9Ish/j3sgWXnAfK8A9Y0bwXYU5xKaEdA= +github.com/jackc/pgproto3/v2 v2.1.1/go.mod h1:WfJCnwN3HIg9Ish/j3sgWXnAfK8A9Y0bwXYU5xKaEdA= +github.com/jackc/pgservicefile v0.0.0-20200307190119-3430c5407db8/go.mod h1:vsD4gTJCa9TptPL8sPkXrLZ+hDuNrZCnj29CQpr4X1E= +github.com/jackc/pgservicefile v0.0.0-20200714003250-2b9c44734f2b/go.mod h1:vsD4gTJCa9TptPL8sPkXrLZ+hDuNrZCnj29CQpr4X1E= +github.com/jackc/pgtype v0.0.0-20190421001408-4ed0de4755e0/go.mod h1:hdSHsc1V01CGwFsrv11mJRHWJ6aifDLfdV3aVjFF0zg= +github.com/jackc/pgtype v0.0.0-20190824184912-ab885b375b90/go.mod h1:KcahbBH1nCMSo2DXpzsoWOAfFkdEtEJpPbVLq8eE+mc= +github.com/jackc/pgtype v0.0.0-20190828014616-a8802b16cc59/go.mod h1:MWlu30kVJrUS8lot6TQqcg7mtthZ9T0EoIBFiJcmcyw= +github.com/jackc/pgtype v1.2.0/go.mod h1:5m2OfMh1wTK7x+Fk952IDmI4nw3nPrvtQdM0ZT4WpC0= +github.com/jackc/pgtype v1.3.1-0.20200510190516-8cd94a14c75a/go.mod h1:vaogEUkALtxZMCH411K+tKzNpwzCKU+AnPzBKZ+I+Po= +github.com/jackc/pgtype v1.3.1-0.20200606141011-f6355165a91c/go.mod h1:cvk9Bgu/VzJ9/lxTO5R5sf80p0DiucVtN7ZxvaC4GmQ= +github.com/jackc/pgtype v1.6.2/go.mod h1:JCULISAZBFGrHaOXIIFiyfzW5VY0GRitRr8NeJsrdig= +github.com/jackc/pgtype v1.8.1-0.20210724151600-32e20a603178/go.mod h1:C516IlIV9NKqfsMCXTdChteoXmwgUceqaLfjg2e3NlM= +github.com/jackc/pgtype v1.8.1/go.mod h1:LUMuVrfsFfdKGLw+AFFVv6KtHOFMwRgDDzBt76IqCA4= +github.com/jackc/pgx/v4 v4.0.0-20190420224344-cc3461e65d96/go.mod h1:mdxmSJJuR08CZQyj1PVQBHy9XOp5p8/SHH6a0psbY9Y= +github.com/jackc/pgx/v4 v4.0.0-20190421002000-1b8f0016e912/go.mod h1:no/Y67Jkk/9WuGR0JG/JseM9irFbnEPbuWV2EELPNuM= +github.com/jackc/pgx/v4 v4.0.0-pre1.0.20190824185557-6972a5742186/go.mod h1:X+GQnOEnf1dqHGpw7JmHqHc1NxDoalibchSk9/RWuDc= +github.com/jackc/pgx/v4 v4.5.0/go.mod h1:EpAKPLdnTorwmPUUsqrPxy5fphV18j9q3wrfRXgo+kA= +github.com/jackc/pgx/v4 v4.6.1-0.20200510190926-94ba730bb1e9/go.mod h1:t3/cdRQl6fOLDxqtlyhe9UWgfIi9R8+8v8GKV5TRA/o= +github.com/jackc/pgx/v4 v4.6.1-0.20200606145419-4e5062306904/go.mod h1:ZDaNWkt9sW1JMiNn0kdYBaLelIhw7Pg4qd+Vk6tw7Hg= +github.com/jackc/pgx/v4 v4.10.1/go.mod h1:QlrWebbs3kqEZPHCTGyxecvzG6tvIsYu+A5b1raylkA= +github.com/jackc/pgx/v4 v4.12.1-0.20210724153913-640aa07df17c/go.mod h1:1QD0+tgSXP7iUjYm9C1NxKhny7lq6ee99u/z+IHFcgs= +github.com/jackc/pgx/v4 v4.13.0/go.mod h1:9P4X524sErlaxj0XSGZk7s+LD0eOyu1ZDUrrpznYDF0= +github.com/jackc/puddle v0.0.0-20190413234325-e4ced69a3a2b/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= +github.com/jackc/puddle v0.0.0-20190608224051-11cab39313c9/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= +github.com/jackc/puddle v1.1.0/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= +github.com/jackc/puddle v1.1.1/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= +github.com/jackc/puddle v1.1.3/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= github.com/jellevandenhooff/dkim v0.0.0-20150330215556-f50fe3d243e1/go.mod h1:E0B/fFc00Y+Rasa88328GlI/XbtyysCtTHZS8h7IrBU= +github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc= +github.com/jinzhu/now v1.1.1/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8= github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= github.com/jmespath/go-jmespath v0.3.0/go.mod h1:9QtRXoHjLGCJ5IBSaohpXITPlowMeeYCZ7fLUTSywik= +github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= +github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= +github.com/jmoiron/sqlx v1.2.0/go.mod h1:1FEQNm3xlJgrMD+FBdI9+xvCksHtbpVBBw5dYhBSsks= +github.com/jmoiron/sqlx v1.3.1/go.mod h1:2BljVx/86SuTyjE+aPYlHCTNvZrnJXghYGpNiXLBMCQ= +github.com/joho/godotenv v1.3.0/go.mod h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqxOKXbg= github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= @@ -255,22 +457,57 @@ github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/X github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= +github.com/k0kubun/colorstring v0.0.0-20150214042306-9440f1994b88/go.mod h1:3w7q1U84EfirKl04SVQ/s7nPm1ZPhiXd34z40TNz36k= +github.com/k0kubun/pp v2.3.0+incompatible/go.mod h1:GWse8YhT0p8pT4ir3ZgBbfZild3tgzSScAn6HmfYukg= +github.com/kardianos/osext v0.0.0-20190222173326-2bc1f35cddc0/go.mod h1:1NbS8ALrpOvjt0rHPNLyCIeMtbizbir8U//inJ+zuB8= +github.com/karrick/godirwalk v1.8.0/go.mod h1:H5KPZjojv4lE+QYImBI8xVtrBRgYrIVsaRPx4tDPEn4= +github.com/karrick/godirwalk v1.10.3/go.mod h1:RoGL9dQei4vP9ilrpETWE8CLOZ1kiN0LhBygSwrAsHA= +github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51/go.mod h1:CzGEWj7cYgsdH8dAjBGEr58BoE7ScuLd+fwFZ44+/x8= github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= +github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= +github.com/klauspost/compress v1.9.5/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= +github.com/klauspost/compress v1.11.13/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= +github.com/klauspost/compress v1.12.2/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8eO+e+Dq5Gzg= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/pty v1.1.3/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/pty v1.1.8/go.mod h1:O1sed60cT9XZ5uDucP5qwvh+TE3NnUj51EiZO/lmSfw= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/ktrysmt/go-bitbucket v0.6.4/go.mod h1:9u0v3hsd2rqCHRIpbir1oP7F58uo5dq19sBYvuMoyQ4= +github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= +github.com/lib/pq v1.1.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= +github.com/lib/pq v1.2.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= +github.com/lib/pq v1.3.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= +github.com/lib/pq v1.8.0/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= +github.com/lib/pq v1.10.0/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= +github.com/lib/pq v1.10.2/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-bc2310a04743/go.mod h1:qklhhLq1aX+mtWk9cPHPzaBjWImj5ULL6C7HFJtXQMM= github.com/lightstep/lightstep-tracer-go v0.18.1/go.mod h1:jlF1pusYV4pidLvZ+XD0UBX0ZE6WURAspgAczcDHrL4= github.com/lyft/protoc-gen-validate v0.0.13/go.mod h1:XbGvPuh87YZc5TdIa2/I4pLk0QoUACkjt2znoq26NVQ= +github.com/markbates/oncer v0.0.0-20181203154359-bf2de49a0be2/go.mod h1:Ld9puTsIW75CHf65OeIOkyKbteujpZVXDpWK6YGZbxE= +github.com/markbates/pkger v0.15.1/go.mod h1:0JoVlrol20BSywW79rN3kdFFsE5xYM+rSCQDXbLhiuI= +github.com/markbates/safe v1.0.1/go.mod h1:nAqgmRi7cY2nqMc92/bSEeQA+R4OheNU2T1kNSCBdG0= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= +github.com/mattn/go-colorable v0.1.1/go.mod h1:FuOcm+DKB9mbwrcAfNl7/TZVBZ6rcnceauSikq3lYCQ= +github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= +github.com/mattn/go-colorable v0.1.6/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= +github.com/mattn/go-ieproxy v0.0.1/go.mod h1:pYabZ6IHcRpFh7vIaLfK7rdcWgFEb3SFJ6/gNWuh88E= github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= +github.com/mattn/go-isatty v0.0.5/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= +github.com/mattn/go-isatty v0.0.7/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= +github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= +github.com/mattn/go-isatty v0.0.9/go.mod h1:YNRxwqDuOph6SZLI9vUUz6OYw3QyUt7WiY2yME+cCiQ= +github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= +github.com/mattn/go-sqlite3 v1.9.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= +github.com/mattn/go-sqlite3 v1.14.5/go.mod h1:WVKg1VTActs4Qso6iwGbiFih2UIHo0ENGwNd0Lj+XmI= +github.com/mattn/go-sqlite3 v1.14.6/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= @@ -279,13 +516,18 @@ github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eI github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS42BGNg= github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY= github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= +github.com/mitchellh/mapstructure v0.0.0-20180220230111-00c29f56e238/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe/go.mod h1:wL8QJuTMNUDYhXwkmfOly8iTdp5TEcJFWZD2D7SIkUc= +github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc= +github.com/mutecomm/go-sqlcipher/v4 v4.4.0/go.mod h1:PyN04SaWalavxRGH9E8ZftG6Ju7rsPrGmQRjrEaVpiY= github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= +github.com/nakagami/firebirdsql v0.0.0-20190310045651-3c02a58cfed8/go.mod h1:86wM1zFnC6/uDBfZGNwB65O+pR2OFi5q/YQaEUid1qA= github.com/nats-io/jwt v0.3.0/go.mod h1:fRYCDE99xlTsqUzISS1Bi75UBJ6ljOJQOAAu5VglpSg= github.com/nats-io/jwt v0.3.2/go.mod h1:/euKqTS1ZD+zzjYrY7pseZrTtWQSjujC7xjPc8wL6eU= github.com/nats-io/nats-server/v2 v2.1.2/go.mod h1:Afk+wRZqkMQs/p45uXdrVLuab3gwv3Z8C4HTBu8GD/k= @@ -293,13 +535,20 @@ github.com/nats-io/nats.go v1.9.1/go.mod h1:ZjDU1L/7fJ09jvUSRVBR2e7+RnLiiIQyqyzE github.com/nats-io/nkeys v0.1.0/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= github.com/nats-io/nkeys v0.1.3/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c= +github.com/neo4j/neo4j-go-driver v1.8.1-0.20200803113522-b626aa943eba/go.mod h1:ncO5VaFWh0Nrt+4KT4mOZboaczBZcLuHrG+/sUeP8gI= +github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= github.com/oklog/oklog v0.3.2/go.mod h1:FCV+B7mhrz4o+ueLpx+KqkyXRGMWOYEvfiXtdGtbWGs= github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA= github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.12.0/go.mod h1:oUhWkIvk5aDxtKvDDuw8gItl8pKl42LzjC9KZE0HfGg= github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= +github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= +github.com/onsi/gomega v1.9.0/go.mod h1:Ho0h+IUsWyvy1OpqCwxlQ/21gkhVunqlU8fDGcoTdcA= github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk= +github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= +github.com/opencontainers/image-spec v1.0.1/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0= github.com/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492/go.mod h1:Ngi6UdF0k5OKD5t5wlmGhe/EDKPoUM3BXZSSfIuJbis= github.com/opentracing/basictracer-go v1.0.0/go.mod h1:QfBfYuafItcjQuMwinw9GhYKwFXS9KnPs5lxoYwgW74= github.com/opentracing/opentracing-go v1.0.2/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= @@ -311,9 +560,14 @@ github.com/openzipkin/zipkin-go v0.2.2/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnh github.com/pact-foundation/pact-go v1.0.4/go.mod h1:uExwJY4kCzNPcHRj+hCR/HBbOOIwwtUjcrb0b5/5kLM= github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= +github.com/pelletier/go-toml v1.7.0/go.mod h1:vwGMzjaWMwyfHwgIBhI2YUM4fB6nL6lVAvS1LBMMhTE= github.com/performancecopilot/speed v3.0.0+incompatible/go.mod h1:/CLtqpZ5gBg1M9iaPbIdPPGyKcA8hKdoy6hAWba7Yac= github.com/pierrec/lz4 v1.0.2-0.20190131084431-473cd7ce01a1/go.mod h1:3/3N9NVKO0jef7pBehbT1qWhCMrIgbYNnFAZCqQ5LRc= github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= +github.com/pierrec/lz4/v4 v4.1.4/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= +github.com/pierrec/lz4/v4 v4.1.7/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= +github.com/pkg/browser v0.0.0-20180916011732-0a3d74bf9ce4/go.mod h1:4OwLy04Bl9Ef3GJJCoec+30X3LQs/0/m4HFRt/2LUSA= +github.com/pkg/browser v0.0.0-20210115035449-ce105d075bb4/go.mod h1:N6UoU20jOqggOuDwUaBQpluzLNDqif3kq9z2wpdYEfQ= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= @@ -348,52 +602,79 @@ github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4O github.com/prometheus/procfs v0.2.0/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= github.com/prometheus/statsd_exporter v0.20.0/go.mod h1:YL3FWCG8JBBtaUSxAg4Gz2ZYu22bS84XM89ZQXXTWmQ= github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= +github.com/remyoudompheng/bigfft v0.0.0-20190728182440-6a916e37a237/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= +github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= +github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= +github.com/rogpeppe/go-internal v1.1.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= +github.com/rogpeppe/go-internal v1.2.2/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= +github.com/rs/xid v1.2.1/go.mod h1:+uKXf+4Djp6Md1KODXJxgGQPKngRmWyn10oCKFzNHOQ= +github.com/rs/zerolog v1.13.0/go.mod h1:YbFCdg8HfsridGWAh22vktObvhZbQsZXe4/zB0OKkWU= +github.com/rs/zerolog v1.15.0/go.mod h1:xYTKnLHcpfU2225ny5qZjxnj9NvkumZYjJHlAThCjNc= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E= +github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= +github.com/shopspring/decimal v0.0.0-20180709203117-cd690d0c9e24/go.mod h1:M+9NzErvs504Cn4c5DxATwIqPbtswREoFCre64PpcG4= +github.com/shopspring/decimal v0.0.0-20200227202807-02e2044944cc/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o= +github.com/shopspring/decimal v1.2.0/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o= github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= +github.com/sirupsen/logrus v1.4.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= +github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= +github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= +github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= +github.com/snowflakedb/gosnowflake v1.4.3/go.mod h1:1kyg2XEduwti88V11PKRHImhXLK5WpGiayY6lFNYb98= github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= github.com/sony/gobreaker v0.4.1/go.mod h1:ZKptC7FHNvhBz7dN2LGjPVBz2sZJmc0/PkyDJOjmxWY= github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= -github.com/stamblerre/work-stats v0.0.0-20210726214407-f4a53165c2e6 h1:qWRgd9VTMz1GfYUToKwy5DPy8z/LmZIqZs8FUIDRzzw= -github.com/stamblerre/work-stats v0.0.0-20210726214407-f4a53165c2e6/go.mod h1:dM4zJ9OuZuchdonBFCaFef0ZAnZuuCgX4WDLlUm6+RM= -github.com/stamblerre/work-stats v0.0.0-20210726215129-3ef3f7a4b3b2 h1:mNYSOU/NK1V7E1t1jp2WXurfEAjbPa4cLkrh+wtDHoo= -github.com/stamblerre/work-stats v0.0.0-20210726215129-3ef3f7a4b3b2/go.mod h1:dM4zJ9OuZuchdonBFCaFef0ZAnZuuCgX4WDLlUm6+RM= -github.com/stamblerre/work-stats v0.0.0-20210726215419-fe333f1f0fb6 h1:4qyV+RrjV5ETeSpMMJTEoDH8snrJnsTV/fcZMGfM3aA= -github.com/stamblerre/work-stats v0.0.0-20210726215419-fe333f1f0fb6/go.mod h1:dM4zJ9OuZuchdonBFCaFef0ZAnZuuCgX4WDLlUm6+RM= +github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/stamblerre/work-stats v0.0.0-20210726215650-a14fc877fae7 h1:yZLmB9oK2DoOIQ/62SSC4PVg0LtYTXvsak9cW+O2umw= github.com/stamblerre/work-stats v0.0.0-20210726215650-a14fc877fae7/go.mod h1:dM4zJ9OuZuchdonBFCaFef0ZAnZuuCgX4WDLlUm6+RM= +github.com/stamblerre/work-stats v0.0.0-20211013195910-92098c96a21a h1:p2dmgMcxN88UcGsvwD0GjDAEfjFZGjDdvpuT+O3YV70= +github.com/stamblerre/work-stats v0.0.0-20211013195910-92098c96a21a/go.mod h1:dM4zJ9OuZuchdonBFCaFef0ZAnZuuCgX4WDLlUm6+RM= github.com/streadway/amqp v0.0.0-20190404075320-75d898a42a94/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= github.com/streadway/amqp v0.0.0-20190827072141-edfb9018d271/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= github.com/streadway/handy v0.0.0-20190108123426-d5acb3125c2a/go.mod h1:qNTQ5P5JnDBl6z3cMAg/SywNDC5ABu5ApDIw6lUbRmI= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= +github.com/stretchr/testify v1.2.0/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/tarm/serial v0.0.0-20180830185346-98f6abe2eb07/go.mod h1:kDXzergiv9cbyO7IOYJZWg1U88JhDg3PB6klq9Hg2pA= +github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= github.com/wcharczuk/go-chart/v2 v2.1.0/go.mod h1:yx7MvAVNcP/kN9lKXM/NTce4au4DFN99j6i1OwDclNA= +github.com/xanzy/go-gitlab v0.15.0/go.mod h1:8zdQa/ri1dfn8eS3Ir1SyfvOKlw7WBJ8DVThkpGiXrs= +github.com/xdg-go/pbkdf2 v1.0.0/go.mod h1:jrpuAogTd400dnrH08LKmI/xc1MbPOebTwRqcT5RDeI= +github.com/xdg-go/scram v1.0.2/go.mod h1:1WAq6h33pAW+iRreB34OORO2Nf7qel3VV3fjBj+hCSs= +github.com/xdg-go/stringprep v1.0.2/go.mod h1:8F9zXuvzgwmyT5DUm4GUfZGDdT3W+LCvS6+da4O5kxM= github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= +github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d/go.mod h1:rHwXgn7JulP+udvsHwJoVG1YGAP6VLg4y9I5dyZdqmA= github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= +github.com/zenazn/goji v0.9.0/go.mod h1:7S9M489iMyHBNxwZnk9/EHS098H4/F6TATF2mIxtB1Q= +gitlab.com/nyarla/go-crypt v0.0.0-20160106005555-d9a5dc2b789b/go.mod h1:T3BPAOm2cqquPa0MKWeNkmOM5RQsRhkrwMWonFMN7fE= go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738/go.mod h1:dnLIgRNXwCJa5e+c6mIZCrds/GIG4ncV9HhK5PX7jPg= +go.mongodb.org/mongo-driver v1.7.0/go.mod h1:Q4oFMbo1+MSNqICAdYMlC/zSTrwCogR4R8NzkI+yfU8= go.opencensus.io v0.20.1/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= go.opencensus.io v0.20.2/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= @@ -404,26 +685,44 @@ go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= go.opencensus.io v0.23.0 h1:gqCw0LfLxScz8irSi8exQc7fyQ0fKQU/qnC/X8+V/1M= go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= +go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= +go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= +go.uber.org/atomic v1.6.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= go.uber.org/multierr v1.3.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= +go.uber.org/multierr v1.5.0/go.mod h1:FeouvMocqHpRaaGuG9EjoKcStLC43Zu/fmqdUMPcKYU= go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA= +go.uber.org/zap v1.9.1/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM= go4.org v0.0.0-20180809161055-417644f6feb5 h1:+hE86LblG4AyDgwMCLTE6FOlM9+qjHSYS+rKqxUVdsM= go4.org v0.0.0-20180809161055-417644f6feb5/go.mod h1:MkTOUMDaeVYJUOUsaDXIhWPZYa1yOyC1qaOBpL57BhE= golang.org/x/build v0.0.0-20210409220959-43d580498f79/go.mod h1:AWukj6xAY8m81WLZfhGiC/BdldwDqBCg5k8orN36R1U= -golang.org/x/build v0.0.0-20210722210716-65acb205e577 h1:JlKd+So4MyK4kPtiwi9N4BO68ZlA4Skh07NEHZvOrfk= -golang.org/x/build v0.0.0-20210722210716-65acb205e577/go.mod h1:AWukj6xAY8m81WLZfhGiC/BdldwDqBCg5k8orN36R1U= +golang.org/x/build v0.0.0-20211222221018-ee978b38c739 h1:DyUWwXL1UxbMm4FDXyxiEEdc8rAr4EuzW7oxYo1d4Ok= +golang.org/x/build v0.0.0-20211222221018-ee978b38c739/go.mod h1:xFW1bRIPGheuxiIvwC/YbkR7s6lp5RQbOO7+v3gDDnM= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20190325154230-a5d413f7728c/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20190411191339-88737f569e3a/go.mod h1:WFFai1msRO1wXaEeE5yQxYXgSfI8pQAWXbQop6sCtWE= +golang.org/x/crypto v0.0.0-20190422162423-af44ce270edf/go.mod h1:WFFai1msRO1wXaEeE5yQxYXgSfI8pQAWXbQop6sCtWE= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190911031432-227b76d455e7/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20200302210943-78000ba7a073/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20200323165209-0ec3e9974c59/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20201002170205-7f63de1d35b0/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20201203163018-be400aefbc4c/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= +golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= +golang.org/x/crypto v0.0.0-20210513164829-c07d793c2f9a/go.mod h1:P+XmwS30IXTQdn5tA2iutPOUgjI07+tq3H3K9MVA1s8= +golang.org/x/crypto v0.0.0-20210616213533-5ff15b29337e/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= @@ -437,6 +736,7 @@ golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMk golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/image v0.0.0-20200927104501-e162460cd6b5/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/image v0.0.0-20210628002857-a66eb6448b8d/go.mod h1:023OzeP/+EPmXeapQh35lcL3II3LrY8Ic+EFFKVhULM= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= @@ -448,6 +748,7 @@ golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRu golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/lint v0.0.0-20210508222113-6edffad5e616/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= @@ -458,16 +759,20 @@ golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/net v0.0.0-20180218175443-cbe0f9307d01/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181108082009-03003ca0c849/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181201002055-351d144fa1fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190125091013-d26f9f9a57f3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190225153610-fe579d43d832/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= @@ -479,6 +784,7 @@ golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLL golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190923162816-aa69164e4478/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20191112182307-2180aed22343/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= @@ -493,15 +799,23 @@ golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/ golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20200904194848-62affa334b73/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4 h1:b0LrWgu8+q7z4J+0Y3Umo5q1dL7NXBkKBWkaVkAq17E= golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc= +golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= +golang.org/x/net v0.0.0-20210503060351-7fd8e65b6420/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20210520170846-37e1c6afe023/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20210726213435-c6fcb2dbf985 h1:4CSI6oo7cOjJKajidEljs9h+uP0rRZBPPPhcCbj5mw8= +golang.org/x/net v0.0.0-20210726213435-c6fcb2dbf985/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/oauth2 v0.0.0-20170207211851-4464e7848382/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= +golang.org/x/oauth2 v0.0.0-20180227000427-d7d64896b5ff/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= +golang.org/x/oauth2 v0.0.0-20181106182150-f42d05182288/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -512,13 +826,17 @@ golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5/go.mod h1:KelEdhl1UZF7XfJ golang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20210220000619-9bb904979d93/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20210313182246-cd4f82c27b84/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210402161424-2e8d93401602 h1:0Ja1LBD+yisY6RWM/BH7TJVXWsSjs2VwBSmvSX4HdBc= golang.org/x/oauth2 v0.0.0-20210402161424-2e8d93401602/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210628180205-a41e5a781914 h1:3B43BWw0xEBsLZ/NO1VALz6fppU3481pik+2Ksv45z8= +golang.org/x/oauth2 v0.0.0-20210628180205-a41e5a781914/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/perf v0.0.0-20180704124530-6e6d33e29852/go.mod h1:JLpeXjPJfIyPr5TlbXLkXWLhP8nz10XfvxElABhCtcw= +golang.org/x/perf v0.0.0-20210220033136-40a54f11e909/go.mod h1:KRSrLY7jerMEa0Ih7gBheQ3FYDiSx6liMnniX1o3j2g= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190412183630-56d357773e84/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -527,6 +845,7 @@ golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c h1:5KslGYwFpkhGh+Q16bwMP3cOontH8FOep7tGV86Y7SQ= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sys v0.0.0-20180224232135-f6cff0780e54/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -536,21 +855,31 @@ golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5h golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181122145206-62eef0e2fa9b/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190403152447-81d4e9dc473e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190419153524-e8e3143a4f4a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190531175056-4c3a928424d2/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191112214154-59a1497f0cea/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191220142924-d4481acd189f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -566,19 +895,33 @@ golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200828194041-157a740278f4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200909081042-eff7692f9009/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201126233918-771906719818/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201214210602-f9fddec55a1e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210303074136-134d130e1a04/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210305230114-8fe3ee5dd75b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210403161142-5e06dd20ab57 h1:F5Gozwx4I1xtr/sr/8CFbb57iKi3297KFs0QDbGN60A= +golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210403161142-5e06dd20ab57/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210514084401-e8d321eab015/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210603125802-9665404d3644/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c h1:F1jZWGFhYfh0Ci55sIpILtKKK8p3i2/krTr0H1rg74I= +golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -586,13 +929,16 @@ golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3 golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.5 h1:i6eZZ+zk0SOf0xgBpEpPD18qWcJda6q1sxt3S0kzyUQ= golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.6 h1:aRYxNxv6iGQlyVaZmk6ZgYEDa+Jg18DxebPSrd6bg1M= +golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20191024005414-555d28b269f0 h1:/5xXl8Y5W96D+TtHSlonuFqGHIWVuyCkGJLwGh9JJFs= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20200630173020-3af7569d3a1e/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20210723032227-1f47c861a9ac h1:7zkz7BUtwNFFqcowJ+RIgu2MaV/MapERkDIy+mwPyjs= +golang.org/x/time v0.0.0-20210723032227-1f47c861a9ac/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -602,13 +948,19 @@ golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3 golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190329151228-23e29df326fe/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190416151739-9c9e1878f421/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190420181800-aa740d480789/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190425163242-31fd60d6bfdc/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190531172133-b3315ee88b7d/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20190823170909-c4a336ef6a2f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191010075000-0337d82405ff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= @@ -637,20 +989,31 @@ golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roY golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE= golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201124115921-2c860bdd6e78/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= +golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/xerrors v0.0.0-20190410155217-1f06c39b4373/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20190513163551-3ee3066db522/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +google.golang.org/api v0.0.0-20170206182103-3d017632ea10/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0= google.golang.org/api v0.3.1/go.mod h1:6wY9I6uQWHQ8EM57III9mq/AjF+i8G65rmVagqKMtkk= google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= @@ -674,10 +1037,16 @@ google.golang.org/api v0.36.0/go.mod h1:+z5ficQTmoYpPn8LCUNVpK5I7hwkpjbcgqA7I34q google.golang.org/api v0.40.0/go.mod h1:fYKFpnQN0DsDSKRVRcQSDQNtqWPfM9i+zNPxepjRCQ8= google.golang.org/api v0.41.0/go.mod h1:RkxM5lITDfTzmyKFPt+wGrCJbVfniCr2ool8kTBzRTU= google.golang.org/api v0.43.0/go.mod h1:nQsDGjRXMo4lvh5hP0TKqF244gqhGcr/YSIykhUk/94= -google.golang.org/api v0.44.0 h1:URs6qR1lAxDsqWITsQXI4ZkGiYJ5dHtRNiCpfs2OeKA= google.golang.org/api v0.44.0/go.mod h1:EBOGZqzyhtvMDoxwS97ctnh0zUmYY6CxqXsc1AvkYD8= +google.golang.org/api v0.47.0/go.mod h1:Wbvgpq1HddcWVtzsVLyfLp8lDg6AA241LmgIL59tHXo= +google.golang.org/api v0.48.0/go.mod h1:71Pr1vy+TAZRPkPs/xlCf5SsU8WjuAWv1Pfjbtukyy4= +google.golang.org/api v0.50.0/go.mod h1:4bNT5pAuq5ji4SRZm+5QIkjny9JAyVD/3gaSihNefaw= +google.golang.org/api v0.51.0 h1:SQaA2Cx57B+iPw2MBgyjEkoeMkRK2IenSGoia0U3lCk= +google.golang.org/api v0.51.0/go.mod h1:t4HdrdoNgyN5cbEfm7Lum0lcLDLiise1F8qDKX00sOU= +google.golang.org/appengine v1.0.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/appengine v1.3.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= @@ -710,6 +1079,7 @@ google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfG google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U= google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= @@ -717,16 +1087,28 @@ google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6D google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200904004341-0bd0a958aa1d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20200911024640-645f7a48b24f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20201109203340-2640f1f9cdfb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20201201144952-b05cb90ed32e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210207032614-bba0dbe2a9ea/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210222152913-aa3ee6e6a81c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210303154014-9728d6b83eeb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210310155132-4ce2db91004e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210319143718-93e7006c17a6/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210402141018-6c239bbf2bb1 h1:E7wSQBXkH3T3diucK+9Z1kjn4+/9tNG7lZLr75oOhh8= google.golang.org/genproto v0.0.0-20210402141018-6c239bbf2bb1/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= +google.golang.org/genproto v0.0.0-20210513213006-bf773b8c8384/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A= +google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= +google.golang.org/genproto v0.0.0-20210604141403-392c879c8b08/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= +google.golang.org/genproto v0.0.0-20210608205507-b6d2f5bf0d7d/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= +google.golang.org/genproto v0.0.0-20210624195500-8bfb893ecb84/go.mod h1:SzzZ/N+nwJDaO1kznhnlzqS8ocJICar6hYhVyhi++24= +google.golang.org/genproto v0.0.0-20210713002101-d411969a0d9a/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k= +google.golang.org/genproto v0.0.0-20210716133855-ce7ef5c701ea/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k= +google.golang.org/genproto v0.0.0-20210721163202-f1cecdd8b78a/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= +google.golang.org/genproto v0.0.0-20210726143408-b02e89920bf0 h1:tcs4DyF9LYv8cynRAbX8JeBpuezJLaK6RfiATAsGwnY= +google.golang.org/genproto v0.0.0-20210726143408-b02e89920bf0/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= +google.golang.org/grpc v0.0.0-20170208002647-2a6bf6142e96/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.0/go.mod h1:chYK+tFQF0nDUGJgXMSgLCQk3phJEuONr2DCgLDdAQM= @@ -745,12 +1127,19 @@ google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3Iji google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= google.golang.org/grpc v1.31.1/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.32.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= google.golang.org/grpc v1.34.0/go.mod h1:WotjhfgOW/POjDeRt8vscBtXq+2VjORFy659qA51WJ8= google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= -google.golang.org/grpc v1.36.1 h1:cmUfbeGKnz9+2DD/UYsMQXeqbHZqZDs4eQwW0sFOpBY= google.golang.org/grpc v1.36.1/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= +google.golang.org/grpc v1.37.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= +google.golang.org/grpc v1.37.1/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= +google.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= +google.golang.org/grpc v1.39.0 h1:Klz8I9kdtkIN6EpHHUOMLCYhTn/2WAe5a0s1hcBkdTI= +google.golang.org/grpc v1.39.0/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE= +google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= @@ -762,16 +1151,19 @@ google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpAD google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= -google.golang.org/protobuf v1.26.0 h1:bxAC2xTBsZGibn2RTntX0oH50xLsqy1OxA9tTL3p/lk= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +google.golang.org/protobuf v1.27.1 h1:SnqbnDw1V7RiZcXPx5MEeqPv2s79L9i7BJUlG/+RurQ= +google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/cheggaaa/pb.v1 v1.0.25/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= gopkg.in/gcfg.v1 v1.2.3/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o= +gopkg.in/inconshreveable/log15.v2 v2.0.0-20180818164646-67afb5ed74ec/go.mod h1:aPpfJ7XW+gOuirDoZ8gHhLh3kZ1B08FtV2bbmy7Jv3s= gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= @@ -779,10 +1171,18 @@ gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRN gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.7/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gorm.io/driver/postgres v1.0.8/go.mod h1:4eOzrI1MUfm6ObJU/UcmbXyiHSs8jSwH95G5P5dxcAg= +gorm.io/gorm v1.20.12/go.mod h1:0HFTzE/SqkGTzK6TlDPPQbAYCluiVvhzoA1+aVyzenw= +gorm.io/gorm v1.21.4/go.mod h1:0HFTzE/SqkGTzK6TlDPPQbAYCluiVvhzoA1+aVyzenw= +gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw= grpc.go4.org v0.0.0-20170609214715-11d0a25b4919/go.mod h1:77eQGdRu53HpSqPFJFmuJdjuHRquDANNeA4x7B8WQ9o= honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= @@ -792,6 +1192,32 @@ honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWh honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= +modernc.org/b v1.0.0/go.mod h1:uZWcZfRj1BpYzfN9JTerzlNUnnPsV9O2ZA8JsRcubNg= +modernc.org/cc/v3 v3.32.4/go.mod h1:0R6jl1aZlIl2avnYfbfHBS1QB6/f+16mihBObaBC878= +modernc.org/ccgo/v3 v3.9.2/go.mod h1:gnJpy6NIVqkETT+L5zPsQFj7L2kkhfPMzOghRNv/CFo= +modernc.org/db v1.0.0/go.mod h1:kYD/cO29L/29RM0hXYl4i3+Q5VojL31kTUVpVJDw0s8= +modernc.org/file v1.0.0/go.mod h1:uqEokAEn1u6e+J45e54dsEA/pw4o7zLrA2GwyntZzjw= +modernc.org/fileutil v1.0.0/go.mod h1:JHsWpkrk/CnVV1H/eGlFf85BEpfkrp56ro8nojIq9Q8= +modernc.org/golex v1.0.0/go.mod h1:b/QX9oBD/LhixY6NDh+IdGv17hgB+51fET1i2kPSmvk= +modernc.org/httpfs v1.0.6/go.mod h1:7dosgurJGp0sPaRanU53W4xZYKh14wfzX420oZADeHM= +modernc.org/internal v1.0.0/go.mod h1:VUD/+JAkhCpvkUitlEOnhpVxCgsBI90oTzSCRcqQVSM= +modernc.org/libc v1.7.13-0.20210308123627-12f642a52bb8/go.mod h1:U1eq8YWr/Kc1RWCMFUWEdkTg8OTcfLw2kY8EDwl039w= +modernc.org/libc v1.9.5/go.mod h1:U1eq8YWr/Kc1RWCMFUWEdkTg8OTcfLw2kY8EDwl039w= +modernc.org/lldb v1.0.0/go.mod h1:jcRvJGWfCGodDZz8BPwiKMJxGJngQ/5DrRapkQnLob8= +modernc.org/mathutil v1.0.0/go.mod h1:wU0vUrJsVWBZ4P6e7xtFJEhFSNsfRLJ8H458uRjg03k= +modernc.org/mathutil v1.1.1/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E= +modernc.org/mathutil v1.2.2/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E= +modernc.org/memory v1.0.4/go.mod h1:nV2OApxradM3/OVbs2/0OsP6nPfakXpi50C7dcoHXlc= +modernc.org/opt v0.1.1/go.mod h1:WdSiB5evDcignE70guQKxYUl14mgWtbClRi5wmkkTX0= +modernc.org/ql v1.0.0/go.mod h1:xGVyrLIatPcO2C1JvI/Co8c0sr6y91HKFNy4pt9JXEY= +modernc.org/sortutil v1.1.0/go.mod h1:ZyL98OQHJgH9IEfN71VsamvJgrtRX9Dj2gX+vH86L1k= +modernc.org/sqlite v1.10.6/go.mod h1:Z9FEjUtZP4qFEg6/SiADg9XCER7aYy9a/j7Pg9P7CPs= +modernc.org/strutil v1.1.0/go.mod h1:lstksw84oURvj9y3tn8lGvRxyRC1S2+g5uuIzNfIOBs= +modernc.org/tcl v1.5.2/go.mod h1:pmJYOLgpiys3oI4AeAafkcUfE+TKKilminxNyU/+Zlo= +modernc.org/token v1.0.0/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM= +modernc.org/z v1.0.1-0.20210308123920-1f282aa71362/go.mod h1:8/SRk5C/HgiQWCgXdfpb+1RvhORdkz5sw72d3jjtyqA= +modernc.org/z v1.0.1/go.mod h1:8/SRk5C/HgiQWCgXdfpb+1RvhORdkz5sw72d3jjtyqA= +modernc.org/zappy v1.0.0/go.mod h1:hHe+oGahLVII/aTTyWK/b53VDHMAGCBYYeZ9sn83HC4= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= diff --git a/package-lock.json b/package-lock.json index 4429547701..baeb441265 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,51 +1,51 @@ { "name": "go", - "version": "0.30.0", + "version": "0.31.0", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "go", - "version": "0.30.0", + "version": "0.31.0", "license": "MIT", "dependencies": { - "deep-equal": "^2.0.2", - "diff": "^4.0.2", - "glob": "^7.1.6", - "json-rpc2": "^2.0.0", - "moment": "^2.24.0", - "semver": "^7.3.2", + "deep-equal": "2.0.5", + "diff": "4.0.2", + "glob": "7.1.7", + "json-rpc2": "2.0.0", + "moment": "2.29.1", + "semver": "7.3.4", "tree-kill": "file:third_party/tree-kill", - "vscode-debugadapter": "^1.44.0", - "vscode-debugadapter-testsupport": "^1.44.0", - "vscode-debugprotocol": "^1.44.0", - "vscode-languageclient": "^7.0.0", - "vscode-languageserver-protocol": "^3.16.0", - "web-request": "^1.0.7" + "vscode-debugadapter": "1.45.0", + "vscode-debugadapter-testsupport": "1.45.0", + "vscode-debugprotocol": "1.45.0", + "vscode-languageclient": "7.0.0", + "vscode-languageserver-protocol": "3.16.0", + "web-request": "1.0.7" }, "devDependencies": { - "@types/adm-zip": "^0.4.33", - "@types/deep-equal": "^1.0.1", - "@types/fs-extra": "^8.1.0", - "@types/glob": "^7.1.1", - "@types/mocha": "^7.0.2", - "@types/node": "^13.11.1", - "@types/semver": "^7.1.0", - "@types/sinon": "^9.0.0", - "@types/vscode": "^1.59.0", - "adm-zip": "^0.4.14", - "esbuild": "^0.12.21", - "fs-extra": "^9.0.0", - "get-port": "^5.1.1", - "gts": "^3.1.0", - "mocha": "^9.1.2", - "prettier": "^2.2.1", - "sinon": "^9.0.2", - "ts-loader": "^7.0.5", - "tslint": "^6.1.1", - "typescript": "^3.8.3", - "vscode-test": "^1.3.0", - "yarn": "^1.22.4" + "@types/adm-zip": "0.4.33", + "@types/deep-equal": "1.0.1", + "@types/fs-extra": "8.1.1", + "@types/glob": "7.1.3", + "@types/mocha": "7.0.2", + "@types/node": "13.13.46", + "@types/semver": "7.3.4", + "@types/sinon": "9.0.11", + "@types/vscode": "1.59.0", + "@vscode/test-electron": "2.0.2", + "adm-zip": "0.4.16", + "esbuild": "0.12.21", + "fs-extra": "9.1.0", + "get-port": "5.1.1", + "gts": "3.1.0", + "mocha": "9.1.2", + "prettier": "2.2.1", + "sinon": "9.2.4", + "ts-loader": "7.0.5", + "tslint": "6.1.3", + "typescript": "3.9.9", + "yarn": "1.22.10" }, "engines": { "vscode": "^1.59.0" @@ -519,6 +519,21 @@ "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", "dev": true }, + "node_modules/@vscode/test-electron": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@vscode/test-electron/-/test-electron-2.0.2.tgz", + "integrity": "sha512-myng+dso4WzOL0WbFS//JtYrUfqVDGI7U9lNRrC6Wm1oND+Nor3txn9klTaNj/39qrQ9jKv3ijv9ps1+cTOsig==", + "dev": true, + "dependencies": { + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "rimraf": "^3.0.2", + "unzipper": "^0.10.11" + }, + "engines": { + "node": ">=8.9.3" + } + }, "node_modules/acorn": { "version": "7.4.1", "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", @@ -5485,21 +5500,6 @@ "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.16.0.tgz", "integrity": "sha512-k8luDIWJWyenLc5ToFQQMaSrqCHiLwyKPHKPQZ5zz21vM+vIVUSvsRpcbiECH4WR88K2XZqc4ScRcZ7nk/jbeA==" }, - "node_modules/vscode-test": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/vscode-test/-/vscode-test-1.5.1.tgz", - "integrity": "sha512-tDloz6euDne+GeUSglhufL0c2xhuYAPAT74hjsuGxfflALfXF9bYnJ7ehZEeVkr/ZnQEh/T8EBrfPL+m0h5qEQ==", - "dev": true, - "dependencies": { - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "^5.0.0", - "rimraf": "^3.0.2", - "unzipper": "^0.10.11" - }, - "engines": { - "node": ">=8.9.3" - } - }, "node_modules/web-request": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/web-request/-/web-request-1.0.7.tgz", @@ -6147,6 +6147,18 @@ "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", "dev": true }, + "@vscode/test-electron": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@vscode/test-electron/-/test-electron-2.0.2.tgz", + "integrity": "sha512-myng+dso4WzOL0WbFS//JtYrUfqVDGI7U9lNRrC6Wm1oND+Nor3txn9klTaNj/39qrQ9jKv3ijv9ps1+cTOsig==", + "dev": true, + "requires": { + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "rimraf": "^3.0.2", + "unzipper": "^0.10.11" + } + }, "acorn": { "version": "7.4.1", "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", @@ -9863,18 +9875,6 @@ "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.16.0.tgz", "integrity": "sha512-k8luDIWJWyenLc5ToFQQMaSrqCHiLwyKPHKPQZ5zz21vM+vIVUSvsRpcbiECH4WR88K2XZqc4ScRcZ7nk/jbeA==" }, - "vscode-test": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/vscode-test/-/vscode-test-1.5.1.tgz", - "integrity": "sha512-tDloz6euDne+GeUSglhufL0c2xhuYAPAT74hjsuGxfflALfXF9bYnJ7ehZEeVkr/ZnQEh/T8EBrfPL+m0h5qEQ==", - "dev": true, - "requires": { - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "^5.0.0", - "rimraf": "^3.0.2", - "unzipper": "^0.10.11" - } - }, "web-request": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/web-request/-/web-request-1.0.7.tgz", diff --git a/package.json b/package.json index d7fe9ae265..77dfc5b94e 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "go", "displayName": "Go", - "version": "0.30.0", + "version": "0.31.0", "publisher": "golang", "description": "Rich Go language support for Visual Studio Code", "author": { @@ -48,43 +48,43 @@ }, "extensionDependencies": [], "dependencies": { - "deep-equal": "^2.0.2", - "diff": "^4.0.2", - "glob": "^7.1.6", - "json-rpc2": "^2.0.0", - "moment": "^2.24.0", - "semver": "^7.3.2", + "deep-equal": "2.0.5", + "diff": "4.0.2", + "glob": "7.1.7", + "json-rpc2": "2.0.0", + "moment": "2.29.1", + "semver": "7.3.4", "tree-kill": "file:third_party/tree-kill", - "vscode-debugadapter": "^1.44.0", - "vscode-debugadapter-testsupport": "^1.44.0", - "vscode-debugprotocol": "^1.44.0", - "vscode-languageclient": "^7.0.0", - "vscode-languageserver-protocol": "^3.16.0", - "web-request": "^1.0.7" + "vscode-debugadapter": "1.45.0", + "vscode-debugadapter-testsupport": "1.45.0", + "vscode-debugprotocol": "1.45.0", + "vscode-languageclient": "7.0.0", + "vscode-languageserver-protocol": "3.16.0", + "web-request": "1.0.7" }, "devDependencies": { - "@types/adm-zip": "^0.4.33", - "@types/deep-equal": "^1.0.1", - "@types/fs-extra": "^8.1.0", - "@types/glob": "^7.1.1", - "@types/mocha": "^7.0.2", - "@types/node": "^13.11.1", - "@types/semver": "^7.1.0", - "@types/sinon": "^9.0.0", - "@types/vscode": "^1.59.0", - "adm-zip": "^0.4.14", - "esbuild": "^0.12.21", - "fs-extra": "^9.0.0", - "get-port": "^5.1.1", - "gts": "^3.1.0", - "mocha": "^9.1.2", - "prettier": "^2.2.1", - "sinon": "^9.0.2", - "ts-loader": "^7.0.5", - "tslint": "^6.1.1", - "typescript": "^3.8.3", - "vscode-test": "^1.3.0", - "yarn": "^1.22.4" + "@types/adm-zip": "0.4.33", + "@types/deep-equal": "1.0.1", + "@types/fs-extra": "8.1.1", + "@types/glob": "7.1.3", + "@types/mocha": "7.0.2", + "@types/node": "13.13.46", + "@types/semver": "7.3.4", + "@types/sinon": "9.0.11", + "@types/vscode": "1.59.0", + "@vscode/test-electron": "2.0.2", + "adm-zip": "0.4.16", + "esbuild": "0.12.21", + "fs-extra": "9.1.0", + "get-port": "5.1.1", + "gts": "3.1.0", + "mocha": "9.1.2", + "prettier": "2.2.1", + "sinon": "9.2.4", + "ts-loader": "7.0.5", + "tslint": "6.1.3", + "typescript": "3.9.9", + "yarn": "1.22.10" }, "engines": { "vscode": "^1.59.0" @@ -134,14 +134,23 @@ "id": "go.mod", "filenames": [ "go.mod", - "gopls.mod", - "go.work" + "gopls.mod" ], "aliases": [ "Go Module File" ], "configuration": "./languages/go.mod.language-configuration.json" }, + { + "id": "go.work", + "filenames": [ + "go.work" + ], + "aliases": [ + "Go Work File" + ], + "configuration": "./languages/go.mod.language-configuration.json" + }, { "id": "go.sum", "filenames": [ @@ -152,7 +161,7 @@ ] }, { - "id": "tmpl", + "id": "gotmpl", "extensions": [ ".tmpl", ".gotmpl" @@ -786,6 +795,20 @@ "type": "boolean", "default": false, "description": "Boolean value to indicate whether system goroutines should be hidden from call stack view." + }, + "console": { + "default": "internalConsole", + "description": "(Experimental) Where to launch the debugger and the debug target: internal console, integrated terminal, or external terminal. It is ignored in remote debugging.", + "enum": [ + "internalConsole", + "integratedTerminal", + "externalTerminal" + ] + }, + "asRoot": { + "default": false, + "description": "(Experimental) Debug with elevated permissions (on Unix). It requires `integrated` or `external` console modes and is ignored in remote debugging.", + "type": "boolean" } } }, @@ -993,6 +1016,20 @@ "type": "boolean", "default": false, "description": "Boolean value to indicate whether system goroutines should be hidden from call stack view." + }, + "console": { + "default": "internalConsole", + "description": "(Experimental) Where to launch the debugger: internal console, integrated terminal, or external terminal. This does not affect tty of the running program. It is ignored in remote debugging.", + "enum": [ + "internalConsole", + "integratedTerminal", + "externalTerminal" + ] + }, + "asRoot": { + "default": false, + "description": "(Experimental) Debug with elevated permissions (on Unix). This requires `integrated` or `external` console modes and is ignored in remote debugging.", + "type": "boolean" } } } @@ -1974,12 +2011,15 @@ "build.buildFlags": { "type": "array", "markdownDescription": "buildFlags is the set of flags passed on to the build system when invoked.\nIt is applied to queries like `go list`, which is used when discovering files.\nThe most common use is to set `-tags`.\n\nIf unspecified, values of `go.buildFlags, go.buildTags` will be propagated.\n", + "default": [], "scope": "resource" }, "build.directoryFilters": { "type": "array", "markdownDescription": "directoryFilters can be used to exclude unwanted directories from the\nworkspace. By default, all directories are included. Filters are an\noperator, `+` to include and `-` to exclude, followed by a path prefix\nrelative to the workspace folder. They are evaluated in order, and\nthe last filter that applies to a path controls whether it is included.\nThe path prefix can be empty, so an initial `-` excludes everything.\n\nExamples:\n\nExclude node_modules: `-node_modules`\n\nInclude only project_a: `-` (exclude everything), `+project_a`\n\nInclude only project_a, but not node_modules inside it: `-`, `+project_a`, `-project_a/node_modules`\n", - "default": "[\"-node_modules\"]", + "default": [ + "-node_modules" + ], "scope": "resource" }, "build.env": { @@ -2028,7 +2068,7 @@ "build.templateExtensions": { "type": "array", "markdownDescription": "templateExtensions gives the extensions of file names that are treateed\nas template files. (The extension\nis the part of the file name after the final dot.)\n", - "default": "[\"tmpl\",\"gotmpl\"]", + "default": [], "scope": "resource" }, "formatting.gofumpt": { diff --git a/src/goBrowsePackage.ts b/src/goBrowsePackage.ts index e2e766f272..c34fc9281b 100644 --- a/src/goBrowsePackage.ts +++ b/src/goBrowsePackage.ts @@ -95,22 +95,19 @@ function showPackageFiles(pkg: string, showAllPkgsIfPkgNotFound: boolean, workDi ); } -function showPackageList(workDir: string) { - return getAllPackages(workDir).then((pkgMap) => { - const pkgs: string[] = Array.from(pkgMap.keys()); - if (pkgs.length === 0) { - return vscode.window.showErrorMessage( - 'Could not find packages. Ensure `gopkgs -format {{.Name}};{{.ImportPath}}` runs successfully.' - ); - } - - vscode.window - .showQuickPick(pkgs.sort(), { placeHolder: 'Select a package to browse' }) - .then((pkgFromDropdown) => { - if (!pkgFromDropdown) { - return; - } - showPackageFiles(pkgFromDropdown, false, workDir); - }); +async function showPackageList(workDir: string) { + const pkgMap = await getAllPackages(workDir); + const pkgs: string[] = Array.from(pkgMap.keys()); + if (pkgs.length === 0) { + return vscode.window.showErrorMessage( + 'Could not find packages. Ensure `gopkgs -format {{.Name}};{{.ImportPath}}` runs successfully.' + ); + } + const pkgFromDropdown = await vscode.window.showQuickPick(pkgs.sort(), { + placeHolder: 'Select a package to browse' }); + if (!pkgFromDropdown) { + return; + } + showPackageFiles(pkgFromDropdown, false, workDir); } diff --git a/src/goCheck.ts b/src/goCheck.ts index c4d710bc07..021b52dfdf 100644 --- a/src/goCheck.ts +++ b/src/goCheck.ts @@ -20,7 +20,9 @@ import { goVet } from './goVet'; import { getTestFlags, goTest, TestConfig } from './testUtils'; import { ICheckResult } from './util'; -const statusBarItem = vscode.window.createStatusBarItem(vscode.StatusBarAlignment.Left); +const STATUS_BAR_ITEM_NAME = 'Go Test'; +const statusBarItem = vscode.window.createStatusBarItem(STATUS_BAR_ITEM_NAME, vscode.StatusBarAlignment.Left); +statusBarItem.name = STATUS_BAR_ITEM_NAME; statusBarItem.command = 'go.test.showOutput'; const neverAgain = { title: "Don't Show Again" }; diff --git a/src/goDebugConfiguration.ts b/src/goDebugConfiguration.ts index dc6055c618..77b5425649 100644 --- a/src/goDebugConfiguration.ts +++ b/src/goDebugConfiguration.ts @@ -10,7 +10,7 @@ import { lstatSync } from 'fs'; import path = require('path'); import vscode = require('vscode'); -import { ContinuedEvent } from 'vscode-debugadapter'; +import { extensionId } from './const'; import { getGoConfig } from './config'; import { toolExecutionEnvironment } from './goEnv'; import { @@ -154,6 +154,8 @@ export class GoDebugConfigurationProvider implements vscode.DebugConfigurationPr const goConfig = getGoConfig(folder && folder.uri); const dlvConfig = goConfig['delveConfig']; + const defaultConfig = vscode.extensions.getExtension(extensionId).packageJSON.contributes.configuration + .properties['go.delveConfig'].properties; // Figure out which debugAdapter is being used first, so we can use this to send warnings // for properties that don't apply. @@ -175,7 +177,7 @@ export class GoDebugConfigurationProvider implements vscode.DebugConfigurationPr // but we have no way of detectng that with an external server. this.showWarning( 'ignoreDlvDAPInRemoteModeWarning', - "'remote' mode with 'dlv-dap' debugAdapter must connect to an external `dlv --headless` server @ v1.7.3 or later. Older versions will fail with \"error layer=rpc rpc:invalid character 'C' looking for beginning of value\" logged to the terminal.\n" + "Using new 'remote' mode with 'dlv-dap' to connect to an external `dlv --headless` server via DAP." ); } else if (debugConfiguration['port']) { this.showWarning( @@ -225,8 +227,12 @@ export class GoDebugConfigurationProvider implements vscode.DebugConfigurationPr dlvProperties.push('dlvLoadConfig'); } dlvProperties.forEach((p) => { - if (!debugConfiguration.hasOwnProperty(p) && dlvConfig.hasOwnProperty(p)) { - debugConfiguration[p] = dlvConfig[p]; + if (!debugConfiguration.hasOwnProperty(p)) { + if (dlvConfig.hasOwnProperty(p)) { + debugConfiguration[p] = dlvConfig[p]; + } else { + debugConfiguration[p] = defaultConfig[p]?.default; + } } }); @@ -263,34 +269,34 @@ export class GoDebugConfigurationProvider implements vscode.DebugConfigurationPr } } - const dlvToolPath = getBinPath(debugAdapter); + const dlvToolPath = getBinPath('dlv'); if (!path.isAbsolute(dlvToolPath)) { // If user has not already declined to install this tool, // prompt for it. Otherwise continue and have the lack of // dlv binary be caught later. - if (!declinedToolInstall(debugAdapter)) { - await promptForMissingTool(debugAdapter); + if (!declinedToolInstall('dlv')) { + await promptForMissingTool('dlv'); return; } } debugConfiguration['dlvToolPath'] = dlvToolPath; + // For dlv-dap mode, check if the dlv is recent enough to support DAP. if (debugAdapter === 'dlv-dap' && !dlvDAPVersionChecked) { - const tool = getToolAtVersion('dlv-dap'); + const tool = getToolAtVersion('dlv'); if (await shouldUpdateTool(tool, dlvToolPath)) { // If the user has opted in to automatic tool updates, we can update // without prompting. const toolsManagementConfig = getGoConfig()['toolsManagement']; if (toolsManagementConfig && toolsManagementConfig['autoUpdate'] === true) { const goVersion = await getGoVersion(); - const toolVersion = { ...tool, version: tool.latestVersion }; // ToolWithVersion - await installTools([toolVersion], goVersion, true); + await installTools([tool], goVersion, true); } else { await promptForUpdatingTool(tool.name); } - // installTools could've failed (e.g. no network access) or the user decliend to install dlv-dap - // in promptForUpdatingTool. If dlv-dap doesn't exist or dlv-dap is too old to have MVP features, - // the failure will be visible to users when launching the dlv-dap process (crash or error message). + // installTools could've failed (e.g. no network access) or the user decliend to install dlv + // in promptForUpdatingTool. If dlv doesn't exist or dlv is too old to have MVP features, + // the failure will be visible to users when launching the dlv process (crash or error message). } dlvDAPVersionChecked = true; } @@ -401,10 +407,11 @@ export class GoDebugConfigurationProvider implements vscode.DebugConfigurationPr // For legacy mode, we merge the environment variables on top of // the tools execution environment variables and update the debugConfiguration // because VS Code directly handles launch of the legacy debug adapter. - // For dlv-dap mode, we do not merge the tools execution environment + // For dlv-dap mode, we do not merge process.env environment // variables here to reduce the number of environment variables passed // as launch/attach parameters. - const goToolsEnvVars = debugAdapter === 'legacy' ? toolExecutionEnvironment(folder?.uri) : {}; + const mergeProcessEnv = debugAdapter === 'legacy'; + const goToolsEnvVars = toolExecutionEnvironment(folder?.uri, mergeProcessEnv); const fileEnvs = parseEnvFiles(debugConfiguration['envFile']); const env = debugConfiguration['env'] || {}; diff --git a/src/goDebugFactory.ts b/src/goDebugFactory.ts index 4ab4fb78db..4ea35bfcb7 100644 --- a/src/goDebugFactory.ts +++ b/src/goDebugFactory.ts @@ -12,11 +12,10 @@ import getPort = require('get-port'); import path = require('path'); import * as fs from 'fs'; import * as net from 'net'; -import { getTool } from './goTools'; -import { Logger, TimestampedLogger } from './goLogging'; +import { Logger, logVerbose, TimestampedLogger } from './goLogging'; import { DebugProtocol } from 'vscode-debugprotocol'; import { getWorkspaceFolderPath } from './util'; -import { toolExecutionEnvironment } from './goEnv'; +import { envPath, getBinPathFromEnvVar } from './utils/pathUtils'; export class GoDebugAdapterDescriptorFactory implements vscode.DebugAdapterDescriptorFactory { constructor(private outputChannel?: vscode.OutputChannel) {} @@ -80,9 +79,10 @@ export class GoDebugAdapterTrackerFactory implements vscode.DebugAdapterTrackerF requestsSent > 0 && responsesReceived === 0 // happens when the rpc server doesn't understand DAP ) { - logger.warn( - "'remote' mode with 'dlv-dap' debugAdapter must connect to an external headless server started with dlv @ v1.7.3 or later.\n" - ); + const err = + 'Expected to connect to external `dlv --headless` server @ v1.7.3 or later via DAP. Older versions fail with "error layer=rpc rpc:invalid character \'C\' looking for beginning of value" logged to the terminal.\n'; + logger.warn(err); + vscode.window.showErrorMessage(err); } logger.debug(`session ${session.id} will stop\n`); }, @@ -220,16 +220,40 @@ export class ProxyDebugAdapter implements vscode.DebugAdapter { export class DelveDAPOutputAdapter extends ProxyDebugAdapter { constructor(private configuration: vscode.DebugConfiguration, logger?: Logger) { super(logger); - this.connected = this.startAndConnectToServer(); } private connected: Promise<{ connected: boolean; reason?: any }>; private dlvDapServer: ChildProcess; - private port: number; private socket: net.Socket; private terminatedOnError = false; + protected sendMessageToClient(message: vscode.DebugProtocolMessage) { + const m = message as any; + if (m.type === 'request') { + logVerbose(`do not forward reverse request: dropping ${JSON.stringify(m)}`); + return; + } + + super.sendMessageToClient(message); + } + protected async sendMessageToServer(message: vscode.DebugProtocolMessage): Promise { + const m = message as any; + if (m.type === 'response') { + logVerbose(`do not forward reverse request response: dropping ${JSON.stringify(m)}`); + return; + } + + if (!this.connected) { + if (m.type === 'request' && m.command === 'initialize') { + this.connected = this.launchDelveDAP(); + } else { + this.connected = Promise.resolve({ + connected: false, + reason: `the first message must be an initialize request, got ${JSON.stringify(m)}` + }); + } + } const { connected, reason } = await this.connected; if (connected) { super.sendMessageToServer(message); @@ -241,7 +265,7 @@ export class DelveDAPOutputAdapter extends ProxyDebugAdapter { this.outputEvent('stderr', errMsg); this.sendMessageToClient(new TerminatedEvent()); } - if ((message as any).type === 'request') { + if (m.type === 'request') { const req = message as DebugProtocol.Request; this.sendMessageToClient({ seq: 0, @@ -297,21 +321,9 @@ export class DelveDAPOutputAdapter extends ProxyDebugAdapter { }); } - private async startAndConnectToServer() { + private async launchDelveDAP() { try { - const { dlvDapServer, socket } = await startDapServer( - this.configuration, - (msg) => this.outputEvent('stdout', msg), - (msg) => this.outputEvent('stderr', msg), - (msg) => { - this.outputEvent('console', msg); - // Some log messages generated after vscode stops the debug session - // may not appear in the DEBUG CONSOLE. For easier debugging, log - // the messages through the logger that prints to Go Debug output - // channel. - this.logger?.info(msg); - } - ); + const { dlvDapServer, socket } = await this.startDapServer(this.configuration); this.dlvDapServer = dlvDapServer; this.socket = socket; @@ -319,44 +331,149 @@ export class DelveDAPOutputAdapter extends ProxyDebugAdapter { } catch (err) { return { connected: false, reason: err }; } - this.logger?.debug(`Running dlv dap server: port=${this.port} pid=${this.dlvDapServer.pid}\n`); + this.logger?.debug(`Running dlv dap server: pid=${this.dlvDapServer?.pid}\n`); return { connected: true }; } - private outputEvent(dest: string, output: string, data?: any) { + protected outputEvent(dest: string, output: string, data?: any) { this.sendMessageToClient(new OutputEvent(output, dest, data)); } + + async startDapServer( + configuration: vscode.DebugConfiguration + ): Promise<{ dlvDapServer?: ChildProcessWithoutNullStreams; socket: net.Socket }> { + const log = (msg: string) => this.outputEvent('stdout', msg); + const logErr = (msg: string) => this.outputEvent('stderr', msg); + const logConsole = (msg: string) => { + this.outputEvent('console', msg); + // Some log messages generated after vscode stops the debug session + // may not appear in the DEBUG CONSOLE. For easier debugging, log + // the messages through the logger that prints to Go Debug output + // channel. + this.logger?.info(msg); + }; + + // If a port has been specified, assume there is an already + // running dap server to connect to. Otherwise, we start the dlv dap server. + const dlvExternallyLaunched = !!configuration.port; + + if ( + !dlvExternallyLaunched && + (configuration.console === 'integratedTerminal' || configuration.console === 'externalTerminal') + ) { + return this.startDAPServerWithClientAddrFlag(configuration, logErr); + } + const host = configuration.host || '127.0.0.1'; + const port = configuration.port || (await getPort()); + + const dlvDapServer = dlvExternallyLaunched + ? undefined + : await spawnDlvDapServerProcess(configuration, host, port, log, logErr, logConsole); + + const socket = await new Promise((resolve, reject) => { + // eslint-disable-next-line prefer-const + let timer: NodeJS.Timeout; + const s = net.createConnection(port, host, () => { + clearTimeout(timer); + resolve(s); + }); + timer = setTimeout(() => { + reject('connection timeout'); + s?.destroy(); + }, 1000); + }); + + return { dlvDapServer, socket }; + } + + async startDAPServerWithClientAddrFlag( + launchAttachArgs: vscode.DebugConfiguration, + logErr: (msg: string) => void + ): Promise<{ dlvDapServer?: ChildProcessWithoutNullStreams; socket: net.Socket }> { + // This is called only when launchAttachArgs.console === 'integratedTerminal' | 'externalTerminal' currently. + const console = (launchAttachArgs as any).console === 'externalTerminal' ? 'external' : 'integrated'; + + const { dlvArgs, dlvPath, dir, env } = getSpawnConfig(launchAttachArgs, logErr); + + // logDest - unlike startDAPServer that relies on piping log messages to a file descriptor + // using --log-dest, we can pass the user-specified logDest directly to the flag. + const logDest = launchAttachArgs.logDest; + if (logDest) { + dlvArgs.push(`--log-dest=${logDest}`); + } + + dlvArgs.unshift(dlvPath); + + if (launchAttachArgs.asRoot === true && process.platform !== 'win32') { + const sudo = getSudo(); + if (sudo) { + dlvArgs.unshift(sudo); + } else { + throw new Error('Failed to find "sudo" utility'); + } + } + + try { + const port = await getPort(); + const rendezvousServerPromise = waitForDAPServer(port, 30_000); + + dlvArgs.push(`--client-addr=:${port}`); + + super.sendMessageToClient({ + seq: 0, + type: 'request', + command: 'runInTerminal', + arguments: { + kind: console, + title: `Go Debug Terminal (${launchAttachArgs.name})`, + cwd: dir, + args: dlvArgs, + env: env + } + }); + const socket = await rendezvousServerPromise; + return { socket }; + } catch (err) { + logErr(`Failed to launch dlv: ${err}`); + throw new Error('cannot launch dlv dap. See DEBUG CONSOLE'); + } + } } -async function startDapServer( - configuration: vscode.DebugConfiguration, - log: (msg: string) => void, - logErr: (msg: string) => void, - logConsole: (msg: string) => void -): Promise<{ dlvDapServer?: ChildProcessWithoutNullStreams; socket: net.Socket }> { - const host = configuration.host || '127.0.0.1'; - const port = configuration.port || (await getPort()); - - // If a port has been specified, assume there is an already - // running dap server to connect to. Otherwise, we start the dlv dap server. - const dlvDapServer = configuration.port - ? undefined - : await spawnDlvDapServerProcess(configuration, host, port, log, logErr, logConsole); - - const socket = await new Promise((resolve, reject) => { - // eslint-disable-next-line prefer-const - let timer: NodeJS.Timeout; - const s = net.createConnection(port, host, () => { - clearTimeout(timer); - resolve(s); +let sudoPath: string | null | undefined = undefined; +function getSudo(): string | null { + if (sudoPath === undefined) { + sudoPath = getBinPathFromEnvVar('sudo', envPath, false); + } + return sudoPath; +} + +function waitForDAPServer(port: number, timeoutMs: number): Promise { + return new Promise((resolve, reject) => { + let s: net.Server = undefined; + const timeoutToken = setTimeout(() => { + if (s?.listening) { + s.close(); + } + reject(new Error('timed out while waiting for DAP in reverse mode to connect')); + }, timeoutMs); + + s = net.createServer({ pauseOnConnect: true }, (socket) => { + logVerbose( + `connected: ${port} (remote: ${socket.remoteAddress}:${socket.remotePort} local: ${socket.localAddress}:${socket.localPort})` + ); + clearTimeout(timeoutToken); + s.close(); // accept no more connection + socket.resume(); + resolve(socket); }); - timer = setTimeout(() => { - reject('connection timeout'); - s?.destroy(); - }, 1000); + s.on('error', (err) => { + logVerbose(`connection error ${err}`); + reject(err); + }); + s.maxConnections = 1; + s.listen(port); }); - - return { dlvDapServer, socket }; } function spawnDlvDapServerProcess( @@ -367,48 +484,12 @@ function spawnDlvDapServerProcess( logErr: (msg: string) => void, logConsole: (msg: string) => void ): Promise { - const launchArgsEnv = launchAttachArgs.env || {}; - const goToolsEnvVars = toolExecutionEnvironment(); - // launchArgsEnv is user-requested env vars (envFiles + env). - const env = Object.assign(goToolsEnvVars, launchArgsEnv); - - const dlvPath = launchAttachArgs.dlvToolPath ?? getTool('dlv-dap'); - - if (!fs.existsSync(dlvPath)) { - const envPath = process.env['PATH'] || (process.platform === 'win32' ? process.env['Path'] : null); - logErr( - `Couldn't find dlv-dap at the Go tools path, ${process.env['GOPATH']}${ - env['GOPATH'] ? ', ' + env['GOPATH'] : '' - } or ${envPath}\n` + - 'Follow the setup instruction in https://github.com/golang/vscode-go/blob/master/docs/debugging.md#getting-started.\n' - ); - throw new Error('Cannot find Delve debugger (dlv dap)'); - } - let dir = getWorkspaceFolderPath(); - if (launchAttachArgs.request === 'launch' && launchAttachArgs['__buildDir']) { - // __buildDir is the directory determined during resolving debug config - dir = launchAttachArgs['__buildDir']; - } + const { dlvArgs, dlvPath, dir, env } = getSpawnConfig(launchAttachArgs, logErr); + // env does not include process.env. Construct the new env for process spawning + // by combining process.env. + const envForSpawn = env ? Object.assign({}, process.env, env) : undefined; - const dlvArgs = new Array(); - dlvArgs.push('dap'); - // When duplicate flags are specified, - // dlv doesn't mind but accepts the last flag value. - // Add user-specified dlv flags first except - // --check-go-version that we want to disable by default but allow users to override. - dlvArgs.push('--check-go-version=false'); - if (launchAttachArgs.dlvFlags && launchAttachArgs.dlvFlags.length > 0) { - dlvArgs.push(...launchAttachArgs.dlvFlags); - } dlvArgs.push(`--listen=${host}:${port}`); - if (launchAttachArgs.showLog) { - dlvArgs.push('--log=' + launchAttachArgs.showLog.toString()); - // Only add the log output flag if we have already added the log flag. - // Otherwise, delve complains. - if (launchAttachArgs.logOutput) { - dlvArgs.push('--log-output=' + launchAttachArgs.logOutput); - } - } const onWindows = process.platform === 'win32'; @@ -445,7 +526,7 @@ function spawnDlvDapServerProcess( return new Promise((resolve, reject) => { const p = spawn(dlvPath, dlvArgs, { cwd: dir, - env, + env: envForSpawn, stdio: onWindows ? ['pipe', 'pipe', 'pipe'] : ['pipe', 'pipe', 'pipe', 'pipe'] // --log-dest=3 if !onWindows. }); let started = false; @@ -516,3 +597,51 @@ function spawnDlvDapServerProcess( }); }); } + +// getSpawnConfig returns the dlv args, directory, and dlv path necessary to spawn the dlv command. +// It also returns `env` that is the additional environment variables users want to run the dlv +// and the debuggee (i.e., go.toolsEnvVars, launch configuration's env and envFile) with. +function getSpawnConfig(launchAttachArgs: vscode.DebugConfiguration, logErr: (msg: string) => void) { + // launchArgsEnv is user-requested env vars (envFiles + env + toolsEnvVars). + const env = launchAttachArgs.env; + const dlvPath = launchAttachArgs.dlvToolPath ?? 'dlv'; + + if (!fs.existsSync(dlvPath)) { + const envPath = process.env['PATH'] || (process.platform === 'win32' ? process.env['Path'] : null); + logErr( + `Couldn't find ${dlvPath} at the Go tools path, ${process.env['GOPATH']}${ + env['GOPATH'] ? ', ' + env['GOPATH'] : '' + } or ${envPath}\n` + + 'Follow the setup instruction in https://github.com/golang/vscode-go/blob/master/docs/debugging.md#getting-started.\n' + ); + throw new Error('Cannot find Delve debugger (dlv dap)'); + } + let dir = getWorkspaceFolderPath(); + if (launchAttachArgs.request === 'launch' && launchAttachArgs['__buildDir']) { + // __buildDir is the directory determined during resolving debug config + dir = launchAttachArgs['__buildDir']; + } + + const dlvArgs = new Array(); + dlvArgs.push('dap'); + + // TODO(hyangah): if Go version is higher than what the delve can support, we need to warn users. + + // When duplicate flags are specified, + // dlv doesn't mind but accepts the last flag value. + // Add user-specified dlv flags first except + // --check-go-version that we want to disable by default but allow users to override. + dlvArgs.push('--check-go-version=false'); + if (launchAttachArgs.dlvFlags && launchAttachArgs.dlvFlags.length > 0) { + dlvArgs.push(...launchAttachArgs.dlvFlags); + } + if (launchAttachArgs.showLog) { + dlvArgs.push('--log=' + launchAttachArgs.showLog.toString()); + // Only add the log output flag if we have already added the log flag. + // Otherwise, delve complains. + if (launchAttachArgs.logOutput) { + dlvArgs.push('--log-output=' + launchAttachArgs.logOutput); + } + } + return { dlvArgs, dlvPath, dir, env }; +} diff --git a/src/goEnv.ts b/src/goEnv.ts index f9f7cd4e1d..6c7be1e69f 100644 --- a/src/goEnv.ts +++ b/src/goEnv.ts @@ -54,8 +54,8 @@ export function toolInstallationEnvironment(): NodeJS.Dict { // toolExecutionEnvironment returns the environment in which tools should // be executed. It always returns a new object. -export function toolExecutionEnvironment(uri?: vscode.Uri): NodeJS.Dict { - const env = newEnvironment(); +export function toolExecutionEnvironment(uri?: vscode.Uri, addProcessEnv = true): NodeJS.Dict { + const env = newEnvironment(addProcessEnv); const gopath = getCurrentGoPath(uri); if (gopath) { env['GOPATH'] = gopath; @@ -69,9 +69,9 @@ export function toolExecutionEnvironment(uri?: vscode.Uri): NodeJS.Dict return env; } -function newEnvironment(): NodeJS.Dict { +function newEnvironment(addProcessEnv = true): NodeJS.Dict { const toolsEnvVars = getGoConfig()['toolsEnvVars']; - const env = Object.assign({}, process.env, toolsEnvVars); + const env = addProcessEnv ? Object.assign({}, process.env, toolsEnvVars) : Object.assign({}, toolsEnvVars); if (toolsEnvVars && typeof toolsEnvVars === 'object') { Object.keys(toolsEnvVars).forEach( (key) => diff --git a/src/goEnvironmentStatus.ts b/src/goEnvironmentStatus.ts index 87f7473335..8b11e48fba 100644 --- a/src/goEnvironmentStatus.ts +++ b/src/goEnvironmentStatus.ts @@ -555,6 +555,7 @@ export async function getLatestGoVersions(): Promise { return results; } +const STATUS_BAR_ITEM_NAME = 'Go Notification'; const dismissedGoVersionUpdatesKey = 'dismissedGoVersionUpdates'; export async function offerToInstallLatestGoVersion() { @@ -585,7 +586,12 @@ export async function offerToInstallLatestGoVersion() { // notify user that there is a newer version of Go available if (options.length > 0) { - addGoStatus('Go Update Available', 'go.promptforgoinstall', 'A newer version of Go is available'); + addGoStatus( + STATUS_BAR_ITEM_NAME, + 'Go Update Available', + 'go.promptforgoinstall', + 'A newer version of Go is available' + ); vscode.commands.registerCommand('go.promptforgoinstall', () => { const download = { title: 'Download', @@ -630,7 +636,7 @@ export async function offerToInstallLatestGoVersion() { // TODO: should we removeGoStatus if user has closed the notification // without any action? It's kind of a feature now - without selecting // neverAgain, user can hide this statusbar item. - removeGoStatus(); + removeGoStatus(STATUS_BAR_ITEM_NAME); selection?.command(); }); }); diff --git a/src/goInstallTools.ts b/src/goInstallTools.ts index 5fc4aa519c..c6298ff561 100644 --- a/src/goInstallTools.ts +++ b/src/goInstallTools.ts @@ -44,6 +44,8 @@ import util = require('util'); import vscode = require('vscode'); import { isInPreviewMode, RestartReason } from './goLanguageServer'; +const STATUS_BAR_ITEM_NAME = 'Go Tools'; + // declinedUpdates tracks the tools that the user has declined to update. const declinedUpdates: Tool[] = []; @@ -233,7 +235,7 @@ export async function installTool( } try { - if (!modulesOn || goVersion.lt('1.16') || hasModSuffix(tool) || tool.name === 'dlv-dap') { + if (!modulesOn || goVersion.lt('1.16') || hasModSuffix(tool)) { await installToolWithGoGet(tool, goVersion, env, modulesOn, importPath); } else { await installToolWithGoInstall(goVersion, env, importPath); @@ -282,9 +284,9 @@ async function installToolWithGoGet( if (!modulesOn) { args.push('-u'); } - // dlv-dap or tools with a "mod" suffix can't be installed with + // tools with a "mod" suffix can't be installed with // simple `go install` or `go get`. We need to get, build, and rename them. - if (hasModSuffix(tool) || tool.name === 'dlv-dap') { + if (hasModSuffix(tool)) { args.push('-d'); // get the version, but don't build. } args.push(importPath); @@ -305,8 +307,8 @@ async function installToolWithGoGet( logVerbose(`$ ${goBinary} ${args.join(' ')} (cwd: ${opts.cwd})`); await execFile(goBinary, args, opts); - if (hasModSuffix(tool) || tool.name === 'dlv-dap') { - // Actual installation of the -gomod tool and dlv-dap is done by running go build. + if (hasModSuffix(tool)) { + // Actual installation of the -gomod tool is done by running go build. let destDir = env['GOBIN']; if (!destDir) { const gopath0 = env['GOPATH']?.split(path.delimiter)[0]; @@ -381,21 +383,20 @@ export async function promptForMissingTool(toolName: string) { // Offer the option to install all tools. installOptions.push('Install All'); } - let msg = `The "${tool.name}" command is not available. -Run "go get -v ${getImportPath(tool, goVersion)}" to install.`; - if (tool.name === 'dlv-dap') { - msg = `The ["${tool.name}"](https://github.com/golang/vscode-go/blob/master/docs/debugging.md) command is not available. -Please select "Install", or follow the installation instructions [here](https://github.com/golang/vscode-go/blob/master/docs/debugging.md#updating-dlv-dap).`; - } - - const selected = await vscode.window.showErrorMessage(msg, ...installOptions); + const cmd = goVersion.lt('1.16') + ? `go get -v ${getImportPath(tool, goVersion)}` + : `go install -v ${getImportPathWithVersion(tool, tool.defaultVersion, goVersion)}`; + const selected = await vscode.window.showErrorMessage( + `The "${tool.name}" command is not available. Run "${cmd}" to install.`, + ...installOptions + ); switch (selected) { case 'Install': await installTools([tool], goVersion); break; case 'Install All': await installTools(missing, goVersion); - removeGoStatus(); + removeGoStatus(STATUS_BAR_ITEM_NAME); break; default: // The user has declined to install this tool. @@ -434,7 +435,7 @@ export async function promptForUpdatingTool( if (toolName === 'gopls') { choices = ['Always Update', 'Update Once', 'Release Notes']; } - if (toolName === 'dlv-dap') { + if (toolName === 'dlv') { choices = ['Always Update', 'Update Once']; } @@ -555,12 +556,17 @@ export async function offerToInstallTools() { let missing = await getMissingTools(goVersion); missing = missing.filter((x) => x.isImportant); if (missing.length > 0) { - addGoStatus('Analysis Tools Missing', 'go.promptforinstall', 'Not all Go tools are available on the GOPATH'); + addGoStatus( + STATUS_BAR_ITEM_NAME, + 'Analysis Tools Missing', + 'go.promptforinstall', + 'Not all Go tools are available on the GOPATH' + ); vscode.commands.registerCommand('go.promptforinstall', () => { const installItem = { title: 'Install', async command() { - removeGoStatus(); + removeGoStatus(STATUS_BAR_ITEM_NAME); await installTools(missing, goVersion); } }; @@ -583,7 +589,7 @@ export async function offerToInstallTools() { if (selection) { selection.command(); } else { - removeGoStatus(); + removeGoStatus(STATUS_BAR_ITEM_NAME); } }); }); diff --git a/src/goLanguageServer.ts b/src/goLanguageServer.ts index 43d5f8a77e..69b80884d1 100644 --- a/src/goLanguageServer.ts +++ b/src/goLanguageServer.ts @@ -492,7 +492,7 @@ export async function buildLanguageClient(cfg: BuildLanguageClientOption): Promi { language: 'go.mod', scheme: 'file' }, { language: 'go.sum', scheme: 'file' }, { language: 'go.work', scheme: 'file' }, - { language: 'tmpl', scheme: 'file' } + { language: 'gotmpl', scheme: 'file' } ]; const c = new LanguageClient( diff --git a/src/goMain.ts b/src/goMain.ts index 8bcb57e3b0..939b2d4c92 100644 --- a/src/goMain.ts +++ b/src/goMain.ts @@ -100,14 +100,7 @@ import { resolvePath, runGoVersionM } from './util'; -import { - clearCacheForTools, - fileExists, - getCurrentGoRoot, - dirExists, - setCurrentGoRoot, - envPath -} from './utils/pathUtils'; +import { clearCacheForTools, fileExists, getCurrentGoRoot, dirExists, envPath } from './utils/pathUtils'; import { WelcomePanel } from './welcome'; import semver = require('semver'); import vscode = require('vscode'); @@ -195,6 +188,10 @@ If you would like additional configuration for diagnostics from gopls, please se } } } + + // Present a warning about the deprecation of a 'dlv-dap' binary setting. + checkAlternateTools(cfg); + updateGoVarsFromConfig().then(async () => { suggestUpdates(ctx); offerToInstallLatestGoVersion(); @@ -1037,3 +1034,23 @@ export async function setGOROOTEnvVar(configGOROOT: string) { delete process.env.GOROOT; } } + +async function checkAlternateTools(goConfig: vscode.WorkspaceConfiguration) { + const alternateTools = goConfig ? goConfig['alternateTools'] : {}; + // TODO(hyangah): delete this check after 2022-03-01. + if (alternateTools['dlv-dap']) { + const msg = `The extension no longer requires a separate 'dlv-dap' binary but uses the 'dlv' binary. +The "dlv-dap" property of the "go.alternateTools" setting will be ignored. +Please use the "dlv" property if you need to override the default Go debugger.`; + + const selected = await vscode.window.showWarningMessage(msg, 'Open settings.json'); + if (selected === 'Open settings.json') { + const { workspaceValue } = goConfig.inspect('alternateTools.dlv-dap'); + if (workspaceValue !== undefined) { + vscode.commands.executeCommand('workbench.action.openWorkspaceSettingsFile'); + } else { + vscode.commands.executeCommand('workbench.action.openSettingsJson'); + } + } + } +} diff --git a/src/goStatus.ts b/src/goStatus.ts index 2968297f97..89f98d5de4 100644 --- a/src/goStatus.ts +++ b/src/goStatus.ts @@ -24,7 +24,12 @@ import { getGoVersion } from './util'; export const outputChannel = vscode.window.createOutputChannel('Go'); -export const diagnosticsStatusBarItem = vscode.window.createStatusBarItem(vscode.StatusBarAlignment.Left); +const STATUS_BAR_ITEM_NAME = 'Go Diagnostics'; +export const diagnosticsStatusBarItem = vscode.window.createStatusBarItem( + STATUS_BAR_ITEM_NAME, + vscode.StatusBarAlignment.Left +); +diagnosticsStatusBarItem.name = STATUS_BAR_ITEM_NAME; // statusbar item for switching the Go environment export let goEnvStatusbarItem: vscode.StatusBarItem; @@ -106,7 +111,13 @@ export async function expandGoStatusBar() { */ export async function initGoStatusBar() { if (!goEnvStatusbarItem) { - goEnvStatusbarItem = vscode.window.createStatusBarItem(vscode.StatusBarAlignment.Left, 50); + const STATUS_BAR_ITEM_NAME = 'Go'; + goEnvStatusbarItem = vscode.window.createStatusBarItem( + STATUS_BAR_ITEM_NAME, + vscode.StatusBarAlignment.Left, + 50 + ); + goEnvStatusbarItem.name = STATUS_BAR_ITEM_NAME; } // set Go version and command const version = await getGoVersion(); @@ -158,7 +169,13 @@ export function disposeGoStatusBar() { if (terminalCreationListener) { terminalCreationListener.dispose(); } - removeGoStatus(); + for (const statusBarEntry of statusBarEntries) { + if (statusBarEntry) { + const [name, entry] = statusBarEntry; + statusBarEntries.delete(name); + entry.dispose(); + } + } } /** @@ -171,18 +188,23 @@ export function showGoStatusBar() { } // status bar item to show warning messages such as missing analysis tools. -let statusBarEntry: vscode.StatusBarItem; +const statusBarEntries = new Map(); -export function removeGoStatus() { +export function removeGoStatus(name: string) { + const statusBarEntry = statusBarEntries.get(name); if (statusBarEntry) { statusBarEntry.dispose(); - statusBarEntry = undefined; + statusBarEntries.delete(name); } } -export function addGoStatus(message: string, command: string, tooltip?: string) { +export function addGoStatus(name: string, message: string, command: string, tooltip?: string) { + let statusBarEntry = statusBarEntries.get(name); if (!statusBarEntry) { - statusBarEntry = vscode.window.createStatusBarItem(vscode.StatusBarAlignment.Right, Number.MIN_VALUE); + statusBarEntry = vscode.window.createStatusBarItem(name, vscode.StatusBarAlignment.Right, Number.MIN_VALUE); + statusBarEntries.set(name, statusBarEntry); + + statusBarEntry.name = name; } statusBarEntry.text = `$(alert) ${message}`; statusBarEntry.command = command; diff --git a/src/goTest/explore.ts b/src/goTest/explore.ts index 765b24423d..8f24762f5c 100644 --- a/src/goTest/explore.ts +++ b/src/goTest/explore.ts @@ -299,6 +299,14 @@ export class GoTestExplorer { return; } + // If we don't do this, then we attempt to resolve tests in virtual + // documents such as those created by the Git, GitLens, and GitHub PR + // extensions + if (doc.uri.scheme !== 'file') { + // TODO This breaks virtual/remote workspace support + return; + } + await this.resolver.processDocument(doc, ranges); this.resolver.updateGoTestContext(); } diff --git a/src/goTest/run.ts b/src/goTest/run.ts index d2f1a1794d..6958011176 100644 --- a/src/goTest/run.ts +++ b/src/goTest/run.ts @@ -42,7 +42,7 @@ interface RunConfig { options: ProfilingOptions; pkg: TestItem; concat: boolean; - record: Map; + record: Map; functions: Record; } @@ -320,7 +320,7 @@ export class GoTestRunner { } } - const record = new Map(); + const record = new Map(); const concat = goConfig.get('testExplorer.concatenateMessages'); // https://github.com/golang/go/issues/39904 @@ -583,7 +583,7 @@ export class GoTestRunner { consumeGoTestEvent( run: TestRun, tests: Record, - record: Map, + record: Map, complete: Set, concat: boolean, e: GoTestOutput @@ -612,7 +612,7 @@ export class GoTestRunner { case 'fail': { complete.add(test); - const messages = this.parseOutput(test, record.get(test) || []); + const messages = this.parseOutput(test, record.get(test.id) || []); if (!concat) { run.failed(test, messages, e.Elapsed * 1000); @@ -643,8 +643,8 @@ export class GoTestRunner { break; } - if (record.has(test)) record.get(test).push(e.Output); - else record.set(test, [e.Output]); + if (record.has(test.id)) record.get(test.id).push(e.Output); + else record.set(test.id, [e.Output]); break; } } diff --git a/src/goTools.ts b/src/goTools.ts index a14420dcb6..01289dbb42 100644 --- a/src/goTools.ts +++ b/src/goTools.ts @@ -157,9 +157,8 @@ export function getConfiguredTools( // Check if the system supports dlv, i.e. is 64-bit. // There doesn't seem to be a good way to check if the mips and s390 // families are 64-bit, so just try to install it and hope for the best. - if (process.arch.match(/^(arm64|mips|mipsel|ppc64|s390|s390x|x64)$/)) { + if (process.arch.match(/^(mips|mipsel|ppc64|s390|s390x|x64)$/)) { maybeAddTool('dlv'); - maybeAddTool('dlv-dap'); } // gocode-gomod needed in go 1.11 & higher diff --git a/src/goToolsInformation.ts b/src/goToolsInformation.ts index aae0d5db0c..5df956c169 100644 --- a/src/goToolsInformation.ts +++ b/src/goToolsInformation.ts @@ -203,10 +203,10 @@ export const allToolsInformation: { [key: string]: Tool } = { description: 'Language Server from Google', usePrereleaseInPreviewMode: true, minimumGoVersion: semver.coerce('1.12'), - latestVersion: semver.parse('v0.7.1'), - latestVersionTimestamp: moment('2021-08-02', 'YYYY-MM-DD'), - latestPrereleaseVersion: semver.parse('v0.7.1'), - latestPrereleaseVersionTimestamp: moment('2021-08-02', 'YYYY-MM-DD') + latestVersion: semver.parse('v0.7.5'), + latestVersionTimestamp: moment('2022-01-18', 'YYYY-MM-DD'), + latestPrereleaseVersion: semver.parse('v0.7.5'), + latestPrereleaseVersionTimestamp: moment('2022-01-18', 'YYYY-MM-DD') }, 'dlv': { name: 'dlv', @@ -215,20 +215,10 @@ export const allToolsInformation: { [key: string]: Tool } = { replacedByGopls: false, isImportant: true, description: 'Go debugger (Delve)', + latestVersion: semver.parse('v1.6.1'), // minimum version that supports DAP + latestVersionTimestamp: moment('2021-05-19', 'YYYY-MM-DD'), minimumGoVersion: semver.coerce('1.12') // dlv requires 1.12+ for build }, - 'dlv-dap': { - name: 'dlv-dap', - importPath: 'github.com/go-delve/delve/cmd/dlv', - modulePath: 'github.com/go-delve/delve', - replacedByGopls: false, - isImportant: true, - description: 'Go debugger & debug adapter (Delve DAP)', - defaultVersion: '2f13672765fe', // pinned version - minimumGoVersion: semver.coerce('1.12'), // dlv requires 1.12+ for build - latestVersion: semver.parse('v1.7.3-0.20211026171155-b48ceec161d5'), - latestVersionTimestamp: moment('2021-10-26', 'YYYY-MM-DD') - }, 'fillstruct': { name: 'fillstruct', importPath: 'github.com/davidrjenni/reftools/cmd/fillstruct', diff --git a/src/testUtils.ts b/src/testUtils.ts index 3dc4e45afa..d34016874c 100644 --- a/src/testUtils.ts +++ b/src/testUtils.ts @@ -23,7 +23,9 @@ import { envPath, expandFilePathInOutput, getCurrentGoRoot, getCurrentGoWorkspac import { killProcessTree } from './utils/processUtils'; const testOutputChannel = vscode.window.createOutputChannel('Go Tests'); -const statusBarItem = vscode.window.createStatusBarItem(vscode.StatusBarAlignment.Left); +const STATUS_BAR_ITEM_NAME = 'Go Test Cancel'; +const statusBarItem = vscode.window.createStatusBarItem(STATUS_BAR_ITEM_NAME, vscode.StatusBarAlignment.Left); +statusBarItem.name = STATUS_BAR_ITEM_NAME; statusBarItem.command = 'go.test.cancel'; statusBarItem.text = '$(x) Cancel Running Tests'; diff --git a/test/gopls/extension.test.ts b/test/gopls/extension.test.ts index 9a09f5a221..47a67a9895 100644 --- a/test/gopls/extension.test.ts +++ b/test/gopls/extension.test.ts @@ -11,6 +11,7 @@ import { LanguageClient } from 'vscode-languageclient/node'; import { getGoConfig } from '../../src/config'; import { buildLanguageClient, BuildLanguageClientOption, buildLanguageServerConfig } from '../../src/goLanguageServer'; import sinon = require('sinon'); +import { getGoVersion, GoVersion } from '../../src/util'; // FakeOutputChannel is a fake output channel used to buffer // the output of the tested language client in an in-memory @@ -132,7 +133,11 @@ suite('Go Extension Tests With Gopls', function () { const testdataDir = path.join(projectDir, 'test', 'testdata'); const env = new Env(); - suiteSetup(async () => await env.setup(path.resolve(testdataDir, 'gogetdocTestData', 'test.go'))); + let goVersion: GoVersion; + suiteSetup(async () => { + await env.setup(path.resolve(testdataDir, 'gogetdocTestData', 'test.go')); + goVersion = await getGoVersion(); + }); suiteTeardown(() => env.teardown()); this.afterEach(function () { @@ -155,7 +160,9 @@ suite('Go Extension Tests With Gopls', function () { [ 'func Println()', new vscode.Position(19, 6), - 'func fmt.Println(a ...interface{}) (n int, err error)', + goVersion.lt('1.18') + ? 'func fmt.Println(a ...interface{}) (n int, err error)' + : 'func fmt.Println(a ...any) (n int, err error)', 'Println formats ' ], ['func print()', new vscode.Position(23, 4), 'func print(txt string)', 'This is an unexported function '] diff --git a/test/gopls/update.test.ts b/test/gopls/update.test.ts index bb36605b88..150f02c015 100644 --- a/test/gopls/update.test.ts +++ b/test/gopls/update.test.ts @@ -188,7 +188,7 @@ suite('gopls update tests', () => { }); suite('version comparison', () => { - const tool = getTool('dlv-dap'); + const tool = getTool('dlv'); const latestVersion = tool.latestVersion; teardown(() => { @@ -197,7 +197,7 @@ suite('version comparison', () => { async function testShouldUpdateTool(expected: boolean, moduleVersion?: string) { sinon.stub(goInstallTools, 'inspectGoToolVersion').returns(Promise.resolve({ moduleVersion })); - const got = await goInstallTools.shouldUpdateTool(tool, '/bin/path/to/dlv-dap'); + const got = await goInstallTools.shouldUpdateTool(tool, '/bin/path/to/dlv'); assert.strictEqual( expected, got, diff --git a/test/integration/extension.test.ts b/test/integration/extension.test.ts index c3b703e2ad..d7bb17eeeb 100644 --- a/test/integration/extension.test.ts +++ b/test/integration/extension.test.ts @@ -37,7 +37,9 @@ import { testCurrentFile } from '../../src/goTest'; import { getBinPath, getCurrentGoPath, + getGoVersion, getImportPath, + GoVersion, handleDiagnosticErrors, ICheckResult, isVendorSupported @@ -57,6 +59,7 @@ const testAll = (isModuleMode: boolean) => { let generateFunctionTestSourcePath: string; let generatePackageTestSourcePath: string; let previousEnv: any; + let goVersion: GoVersion; suiteSetup(async () => { previousEnv = Object.assign({}, process.env); @@ -69,6 +72,8 @@ const testAll = (isModuleMode: boolean) => { assert.ok(gopath, 'Cannot run tests if GOPATH is not set as environment variable'); return; } + goVersion = await getGoVersion(); + console.log(`Using GOPATH: ${gopath}`); repoPath = isModuleMode ? fs.mkdtempSync(path.join(os.tmpdir(), 'legacy')) : path.join(gopath, 'src', 'test'); @@ -225,13 +230,16 @@ standard output. Spaces are always added between operands and a newline is appended. It returns the number of bytes written and any write error encountered. `; + const printlnSig = goVersion.lt('1.18') + ? 'Println(a ...interface{}) (n int, err error)' + : 'Println(a ...any) (n int, err error)'; const testCases: [vscode.Position, string, string, string[]][] = [ [ new vscode.Position(19, 13), - 'Println(a ...interface{}) (n int, err error)', + printlnSig, printlnDoc, - ['a ...interface{}'] + [goVersion.lt('1.18') ? 'a ...interface{}' : 'a ...any'] ], [ new vscode.Position(23, 7), @@ -272,12 +280,16 @@ encountered. Spaces are always added between operands and a newline is appended. It returns the number of bytes written and any write error encountered. `; + const printlnSig = goVersion.lt('1.18') + ? 'Println(a ...interface{}) (n int, err error)' + : 'Println(a ...any) (n int, err error)'; + const testCases: [vscode.Position, string, string, string[]][] = [ [ new vscode.Position(19, 13), - 'Println(a ...interface{}) (n int, err error)', + printlnSig, printlnDoc, - ['a ...interface{}'] + [goVersion.lt('1.18') ? 'a ...interface{}' : 'a ...any'] ], [ new vscode.Position(23, 7), @@ -314,6 +326,10 @@ standard output. Spaces are always added between operands and a newline is appended. It returns the number of bytes written and any write error encountered. `; + const printlnSig = goVersion.lt('1.18') + ? 'Println func(a ...interface{}) (n int, err error)' + : 'Println func(a ...any) (n int, err error)'; + const testCases: [vscode.Position, string | null, string | null][] = [ // [new vscode.Position(3,3), '/usr/local/go/src/fmt'], [new vscode.Position(0, 3), null, null], // keyword @@ -322,7 +338,7 @@ encountered. [new vscode.Position(28, 16), null, null], // inside a number [new vscode.Position(22, 5), 'main func()', '\n'], [new vscode.Position(40, 23), 'import (math "math")', null], - [new vscode.Position(19, 6), 'Println func(a ...interface{}) (n int, err error)', printlnDoc], + [new vscode.Position(19, 6), printlnSig, printlnDoc], [ new vscode.Position(23, 4), 'print func(txt string)', @@ -350,6 +366,10 @@ encountered. Spaces are always added between operands and a newline is appended. It returns the number of bytes written and any write error encountered. `; + const printlnSig = goVersion.lt('1.18') + ? 'func Println(a ...interface{}) (n int, err error)' + : 'func Println(a ...any) (n int, err error)'; + const testCases: [vscode.Position, string | null, string | null][] = [ [new vscode.Position(0, 3), null, null], // keyword [new vscode.Position(23, 11), null, null], // inside a string @@ -366,7 +386,7 @@ It returns the number of bytes written and any write error encountered. 'package math', 'Package math provides basic constants and mathematical functions.\n\nThis package does not guarantee bit-identical results across architectures.\n' ], - [new vscode.Position(19, 6), 'func Println(a ...interface{}) (n int, err error)', printlnDoc], + [new vscode.Position(19, 6), printlnSig, printlnDoc], [ new vscode.Position(27, 14), 'type ABC struct {\n a int\n b int\n c int\n}', @@ -384,7 +404,13 @@ It returns the number of bytes written and any write error encountered. await testHoverProvider(config, testCases); }); - test('Linting - concurrent process cancelation', async () => { + test('Linting - concurrent process cancelation', async function () { + if (!goVersion.lt('1.18')) { + // TODO(hyangah): reenable test when staticcheck for go1.18 is released + // https://github.com/dominikh/go-tools/issues/1145 + this.skip(); + } + const util = require('../../src/util'); const processutil = require('../../src/utils/processUtils'); sinon.spy(util, 'runTool'); @@ -413,7 +439,12 @@ It returns the number of bytes written and any write error encountered. ); }); - test('Linting - lint errors with multiple open files', async () => { + test('Linting - lint errors with multiple open files', async function () { + if (!goVersion.lt('1.18')) { + // TODO(hyangah): reenable test when staticcheck for go1.18 is released + // https://github.com/dominikh/go-tools/issues/1145 + this.skip(); + } // handleDiagnosticErrors may adjust the lint errors' ranges to make the error more visible. // This adjustment applies only to the text documents known to vscode. This test checks // the adjustment is made consistently across multiple open text documents. @@ -448,7 +479,13 @@ It returns the number of bytes written and any write error encountered. assert.deepStrictEqual(file1Diagnostics[0], file2Diagnostics[0]); }); - test('Error checking', async () => { + test('Error checking', async function () { + if (!goVersion.lt('1.18')) { + // TODO(hyangah): reenable test when staticcheck for go1.18 is released + // https://github.com/dominikh/go-tools/issues/1145 + this.skip(); + } + const config = Object.create(getGoConfig(), { vetOnSave: { value: 'package' }, vetFlags: { value: ['-all'] }, @@ -901,10 +938,14 @@ standard output. Spaces are always added between operands and a newline is appended. It returns the number of bytes written and any write error encountered. `; + const printlnSig = goVersion.lt('1.18') + ? 'func(a ...interface{}) (n int, err error)' + : 'func(a ...any) (n int, err error)'; + const provider = new GoCompletionItemProvider(); const testCases: [vscode.Position, string, string | null, string | null][] = [ [new vscode.Position(7, 4), 'fmt', 'fmt', null], - [new vscode.Position(7, 6), 'Println', 'func(a ...interface{}) (n int, err error)', printlnDoc] + [new vscode.Position(7, 6), 'Println', printlnSig, printlnDoc] ]; const uri = vscode.Uri.file(path.join(fixturePath, 'baseTest', 'test.go')); const textDocument = await vscode.workspace.openTextDocument(uri); @@ -980,7 +1021,10 @@ encountered. if (!item1) { assert.fail('Suggestion with label "Print" not found in test case withFunctionSnippet.'); } - assert.equal((item1.insertText).value, 'Print(${1:a ...interface{\\}})'); + assert.equal( + (item1.insertText).value, + goVersion.lt('1.18') ? 'Print(${1:a ...interface{\\}})' : 'Print(${1:a ...any})' + ); }); const withFunctionSnippetNotype = provider .provideCompletionItemsInternal( diff --git a/test/integration/goDebug.test.ts b/test/integration/goDebug.test.ts index 88bf797bc9..4e0d0a1d19 100644 --- a/test/integration/goDebug.test.ts +++ b/test/integration/goDebug.test.ts @@ -57,6 +57,7 @@ suite('GoDebugSession Tests', async () => { process.env.GOPATH = '/usr/gopath'; process.env.GOROOT = '/usr/goroot'; remoteSourcesAndPackages = new RemoteSourcesAndPackages(); + // eslint-disable-next-line prettier/prettier fileSystem = ({ existsSync: () => false } as unknown) as typeof fs; delve.program = workspaceFolder; delve.isApiV1 = false; @@ -287,6 +288,7 @@ suite('RemoteSourcesAndPackages Tests', () => { let remoteSourcesAndPackages: RemoteSourcesAndPackages; let delve: Delve; setup(() => { + // eslint-disable-next-line prettier/prettier delve = ({ callPromise: () => ({}), isApiV1: false } as unknown) as Delve; remoteSourcesAndPackages = new RemoteSourcesAndPackages(); }); @@ -310,9 +312,7 @@ suite('RemoteSourcesAndPackages Tests', () => { // Test suite adapted from: // https://github.com/microsoft/vscode-mock-debug/blob/master/src/tests/adapter.test.ts -const testAll = (ctx: Mocha.Context, isDlvDap: boolean) => { - // To disable skipping of dlvDapTests, set dlvDapSkipsEnabled = false. - const dlvDapSkipsEnabled = true; +const testAll = (ctx: Mocha.Context, isDlvDap: boolean, withConsole?: string) => { const debugConfigProvider = new GoDebugConfigurationProvider(); const DEBUG_ADAPTER = path.join('.', 'out', 'src', 'debugAdapter', 'goDebug.js'); @@ -399,7 +399,13 @@ const testAll = (ctx: Mocha.Context, isDlvDap: boolean) => { ): Promise { const serverFolder = path.join(DATA_ROOT, 'helloWorldServer'); const toolPath = getBinPath('dlv'); - const args = ['debug', '--api-version=2', '--headless', `--listen=127.0.0.1:${dlvPort}`]; + const args = [ + 'debug', + '--check-go-version=false', + '--api-version=2', + '--headless', + `--listen=127.0.0.1:${dlvPort}` + ]; if (acceptMultiClient) { args.push('--accept-multiclient'); } @@ -503,11 +509,7 @@ const testAll = (ctx: Mocha.Context, isDlvDap: boolean) => { } suite('basic', () => { - test('unknown request should produce error', async function () { - if (isDlvDap && dlvDapSkipsEnabled) { - this.skip(); // not working in dlv-dap. - } - + test('unknown request should produce error', async () => { // fake config that will be used to initialize fixtures. const config = { name: 'Launch', type: 'go', request: 'launch', program: DATA_ROOT }; await initializeDebugConfig(config); @@ -733,6 +735,7 @@ const testAll = (ctx: Mocha.Context, isDlvDap: boolean) => { this.skip(); // not working in dlv-dap. } + // TODO(hyangah): why does it take 30sec? const PROGRAM = path.join(DATA_ROOT, 'baseTest'); const config = { name: 'Launch', @@ -1008,39 +1011,27 @@ const testAll = (ctx: Mocha.Context, isDlvDap: boolean) => { await new Promise((resolve) => setTimeout(resolve, 2_000)); }); - test('can connect and initialize using external dlv --headless --accept-multiclient=true --continue=true', async function () { - if (isDlvDap && dlvDapSkipsEnabled) { - this.skip(); // not working in dlv-dap. - } - + test('can connect and initialize using external dlv --headless --accept-multiclient=true --continue=true', async () => { childProcess = await setUpRemoteProgram(remoteAttachConfig.port, server, true, true); await setUpRemoteAttach(debugConfig); }); - test('can connect and initialize using external dlv --headless --accept-multiclient=false --continue=false', async function () { - if (isDlvDap && dlvDapSkipsEnabled) { - this.skip(); // not working in dlv-dap. - } - + test('can connect and initialize using external dlv --headless --accept-multiclient=false --continue=false', async () => { childProcess = await setUpRemoteProgram(remoteAttachConfig.port, server, false, false); await setUpRemoteAttach(debugConfig); }); - test('can connect and initialize using external dlv --headless --accept-multiclient=true --continue=false', async function () { - if (isDlvDap && dlvDapSkipsEnabled) { - this.skip(); // not working in dlv-dap. - } - + test('can connect and initialize using external dlv --headless --accept-multiclient=true --continue=false', async () => { childProcess = await setUpRemoteProgram(remoteAttachConfig.port, server, true, false); await setUpRemoteAttach(debugConfig); }); test('connection to remote is terminated when external dlv process exits', async function () { - if (isDlvDap && dlvDapSkipsEnabled) { - this.skip(); // not working in dlv-dap. + if (isDlvDap) { + this.skip(); // this test does not apply for dlv-dap. } const childProcess = await setUpRemoteProgram(remoteAttachConfig.port, server, true, false); @@ -1103,11 +1094,7 @@ const testAll = (ctx: Mocha.Context, isDlvDap: boolean) => { await dc.hitBreakpoint(debugConfig, getBreakpointLocation(FILE, BREAKPOINT_LINE)); }); - test('stopped for a breakpoint set during initialization (remote attach)', async function () { - if (isDlvDap && dlvDapSkipsEnabled) { - this.skip(); // not working in dlv-dap. - } - + test('stopped for a breakpoint set during initialization (remote attach)', async () => { const FILE = path.join(DATA_ROOT, 'helloWorldServer', 'main.go'); const BREAKPOINT_LINE = 29; const remoteProgram = await setUpRemoteProgram(remoteAttachConfig.port, server); @@ -1128,11 +1115,7 @@ const testAll = (ctx: Mocha.Context, isDlvDap: boolean) => { await new Promise((resolve) => setTimeout(resolve, 2_000)); }); - test('stopped for a breakpoint set after initialization (remote attach)', async function () { - if (isDlvDap && dlvDapSkipsEnabled) { - this.skip(); // not working in dlv-dap. - } - + test('stopped for a breakpoint set after initialization (remote attach)', async () => { const FILE = path.join(DATA_ROOT, 'helloWorldServer', 'main.go'); const BREAKPOINT_LINE = 29; const remoteProgram = await setUpRemoteProgram(remoteAttachConfig.port, server); @@ -1545,11 +1528,7 @@ const testAll = (ctx: Mocha.Context, isDlvDap: boolean) => { // In order for these tests to pass, the debug adapter must not fail if a // disconnectRequest is sent after it has already disconnected. - test('disconnect should work for remote attach', async function () { - if (isDlvDap && dlvDapSkipsEnabled) { - this.skip(); // not working in dlv-dap. - } - + test('disconnect should work for remote attach', async () => { const server = await getPort(); remoteAttachConfig.port = await getPort(); const remoteProgram = await setUpRemoteProgram(remoteAttachConfig.port, server); @@ -1744,8 +1723,12 @@ const testAll = (ctx: Mocha.Context, isDlvDap: boolean) => { await Promise.all([dc.disconnectRequest({ restart: false }), dc.waitForEvent('terminated')]); }); + // This test is flaky. It has been updated to run stat multiple + // times to decrease the likelihood of stat occuring before delve + // has a chance to clean up. + // BUG(https://github.com/golang/vscode-go/issues/1993) test('should cleanup when stopped', async function () { - if (!isDlvDap || !dlvDapSkipsEnabled) { + if (!isDlvDap) { this.skip(); } const PROGRAM = path.join(DATA_ROOT, 'loop'); @@ -1772,14 +1755,20 @@ const testAll = (ctx: Mocha.Context, isDlvDap: boolean) => { } // Skip the proper disconnect sequence started with a disconnect request. - await dlvDapAdapter.dispose(1); dc = undefined; - await sleep(100); // allow dlv to respond and finish cleanup. let stat: fs.Stats = null; try { const fsstat = util.promisify(fs.stat); - stat = await fsstat(OUTPUT); + const maxAttempts = 2; + for (let i = 0; i < maxAttempts; i++) { + await sleep(1000); // allow dlv to respond and finish cleanup. + stat = await fsstat(OUTPUT); + // Don't need to try again if stat result is null. + if (stat === null) { + break; + } + } fs.unlinkSync(OUTPUT); } catch (e) { console.log(`output was cleaned ${OUTPUT} ${e}`); @@ -1790,11 +1779,65 @@ const testAll = (ctx: Mocha.Context, isDlvDap: boolean) => { }); suite('switch goroutine', () => { + async function findParkedGoroutine(file: string): Promise { + // Find a goroutine that is stopped in parked. + const bp = getBreakpointLocation(file, 8); + await dc.setBreakpointsRequest({ source: { path: bp.path }, breakpoints: [bp] }); + + let parkedGoid = -1; + while (parkedGoid < 0) { + const res = await Promise.all([ + dc.continueRequest({ threadId: 1 }), + Promise.race([ + dc.waitForEvent('stopped'), + // It is very unlikely to happen. But in theory if all sayhi + // goroutines are run serially, there will never be a second parked + // sayhi goroutine when another breaks and we will keep trying + // until process termination. If the process terminates, mark the test + // as done. + dc.waitForEvent('terminated') + ]) + ]); + const event = res[1]; + if (res[1].event === 'terminated') { + break; + } + const threads = await dc.threadsRequest(); + + // Search for a parked goroutine that we know for sure will have to be + // resumed before the program can exit. This is a parked goroutine that: + // 1. is executing main.sayhi + // 2. hasn't called wg.Done yet + // 3. is not the currently selected goroutine + for (let i = 0; i < threads.body.threads.length; i++) { + const g = threads.body.threads[i]; + if (g.id === event.body.threadId) { + continue; + } + const st = await dc.stackTraceRequest({ threadId: g.id, startFrame: 0, levels: 5 }); + for (let j = 0; j < st.body.stackFrames.length; j++) { + const frame = st.body.stackFrames[j]; + // line 11 is the line where wg.Done is called + if (frame.name === 'main.sayhi' && frame.line < 11) { + parkedGoid = g.id; + break; + } + } + if (parkedGoid >= 0) { + break; + } + } + } + + // Clear all breakpoints + await dc.setBreakpointsRequest({ source: { path: bp.path }, breakpoints: [] }); + return parkedGoid; + } + async function runSwitchGoroutineTest(stepFunction: string) { const PROGRAM = path.join(DATA_ROOT, 'goroutineTest'); const FILE = path.join(PROGRAM, 'main.go'); - const BREAKPOINT_LINE_MAIN_RUN1 = 6; - const BREAKPOINT_LINE_MAIN_RUN2 = 14; + const BREAKPOINT_LINE_MAIN_RUN = 15; const config = { name: 'Launch', @@ -1804,33 +1847,10 @@ const testAll = (ctx: Mocha.Context, isDlvDap: boolean) => { program: PROGRAM }; const debugConfig = await initializeDebugConfig(config); - // Set a breakpoint in run 1 and get the goroutine id. - await dc.hitBreakpoint(debugConfig, getBreakpointLocation(FILE, BREAKPOINT_LINE_MAIN_RUN1)); - const threadsResponse1 = await dc.threadsRequest(); - assert.ok(threadsResponse1.success); - const run1Goroutine = threadsResponse1.body.threads.find((val) => val.name.indexOf('main.run1') >= 0); - - // Set a breakpoint in run 2 and get the goroutine id. - // By setting breakpoints in both goroutine, we can make sure that both goroutines - // are running before continuing. - const bp2 = getBreakpointLocation(FILE, BREAKPOINT_LINE_MAIN_RUN2); - const breakpointsResult = await dc.setBreakpointsRequest({ - source: { path: bp2.path }, - breakpoints: [{ line: bp2.line }] - }); - assert.ok(breakpointsResult.success); - const threadsResponse2 = await dc.threadsRequest(); - assert.ok(threadsResponse2.success); - const run2Goroutine = threadsResponse2.body.threads.find((val) => val.name.indexOf('main.run2') >= 0); - - await Promise.all([dc.continueRequest({ threadId: 1 }), dc.assertStoppedLocation('breakpoint', bp2)]); + // Set a breakpoint in main. + await dc.hitBreakpoint(debugConfig, getBreakpointLocation(FILE, BREAKPOINT_LINE_MAIN_RUN)); - // Clear breakpoints to make sure they do not interrupt the stepping. - const clearBreakpointsResult = await dc.setBreakpointsRequest({ - source: { path: FILE }, - breakpoints: [] - }); - assert.ok(clearBreakpointsResult.success); + const parkedGoid = await findParkedGoroutine(FILE); // runStepFunction runs the necessary step function and resolves if it succeeded. async function runStepFunction( @@ -1850,68 +1870,26 @@ const testAll = (ctx: Mocha.Context, isDlvDap: boolean) => { callback(await dc.stepInRequest(args)); break; case 'step out': - // TODO(suzmue): write a test for step out. - reject(new Error('step out will never complete on this program')); + callback(await dc.stepOutRequest(args)); break; default: reject(new Error(`not a valid step function ${stepFunction}`)); } } - // The program is currently stopped on the goroutine in main.run2. - // Test switching go routines by stepping in: - // 1. main.run2 - // 2. main.run1 (switch routine) - // 3. main.run1 - // 4. main.run2 (switch routine) - - // Next on the goroutine in main.run2 - await Promise.all([ - new Promise((resolve, reject) => { - const args = { threadId: run2Goroutine.id }; - return runStepFunction(args, resolve, reject); - }), - dc.waitForEvent('stopped').then((event) => { - assert.strictEqual(event.body.reason, 'step'); - assert.strictEqual(event.body.threadId, run2Goroutine.id); - }) - ]); - - // Next on the goroutine in main.run1 - await Promise.all([ - new Promise((resolve, reject) => { - const args = { threadId: run1Goroutine.id }; - return runStepFunction(args, resolve, reject); - }), - dc.waitForEvent('stopped').then((event) => { - assert.strictEqual(event.body.reason, 'step'); - assert.strictEqual(event.body.threadId, run1Goroutine.id); - }) - ]); - - // Next on the goroutine in main.run1 - await Promise.all([ - new Promise((resolve, reject) => { - const args = { threadId: run1Goroutine.id }; - return runStepFunction(args, resolve, reject); - }), - dc.waitForEvent('stopped').then((event) => { - assert.strictEqual(event.body.reason, 'step'); - assert.strictEqual(event.body.threadId, run1Goroutine.id); - }) - ]); - - // Next on the goroutine in main.run2 - await Promise.all([ - new Promise((resolve, reject) => { - const args = { threadId: run2Goroutine.id }; - return runStepFunction(args, resolve, reject); - }), - dc.waitForEvent('stopped').then((event) => { - assert.strictEqual(event.body.reason, 'step'); - assert.strictEqual(event.body.threadId, run2Goroutine.id); - }) - ]); + if (parkedGoid > 0) { + // Next on the parkedGoid. + await Promise.all([ + new Promise((resolve, reject) => { + const args = { threadId: parkedGoid }; + return runStepFunction(args, resolve, reject); + }), + dc.waitForEvent('stopped').then((event) => { + assert.strictEqual(event.body.reason, 'step'); + assert.strictEqual(event.body.threadId, parkedGoid); + }) + ]); + } } test('next', async function () { @@ -1927,9 +1905,16 @@ const testAll = (ctx: Mocha.Context, isDlvDap: boolean) => { // Not implemented in the legacy adapter. this.skip(); } - // neither debug adapter implements this behavior await runSwitchGoroutineTest('step in'); }); + + test('step out', async function () { + if (!isDlvDap) { + // Not implemented in the legacy adapter. + this.skip(); + } + await runSwitchGoroutineTest('step out'); + }); }); suite('logDest attribute tests', () => { @@ -1962,8 +1947,12 @@ const testAll = (ctx: Mocha.Context, isDlvDap: boolean) => { await dc.stop(); dc = undefined; const dapLog = fs.readFileSync(DELVE_LOG)?.toString(); + const preamble = + debugConfig.console === 'integratedTerminal' || debugConfig.console === 'externalTerminal' + ? 'DAP server for a predetermined client' + : 'DAP server listening at'; assert( - dapLog.includes('DAP server listening at') && + dapLog.includes(preamble) && dapLog.includes('"command":"initialize"') && dapLog.includes('"event":"terminated"'), dapLog @@ -1989,12 +1978,12 @@ const testAll = (ctx: Mocha.Context, isDlvDap: boolean) => { } } test('relative path as logDest triggers an error', async function () { - if (!isDlvDap || process.platform === 'win32') this.skip(); + if (!isDlvDap || withConsole || process.platform === 'win32') this.skip(); await testWithInvalidLogDest('delve.log', 'relative path'); }); test('number as logDest triggers an error', async function () { - if (!isDlvDap || process.platform === 'win32') this.skip(); + if (!isDlvDap || withConsole || process.platform === 'win32') this.skip(); await testWithInvalidLogDest(3, 'file descriptor'); }); }); @@ -2094,11 +2083,7 @@ const testAll = (ctx: Mocha.Context, isDlvDap: boolean) => { rmdirRecursive(helloWorldLocal); }); - test('stopped for a breakpoint set during initialization using substitutePath (remote attach)', async function () { - if (isDlvDap && dlvDapSkipsEnabled) { - this.skip(); // not working in dlv-dap. - } - + test('stopped for a breakpoint set during initialization using substitutePath (remote attach)', async () => { const FILE = path.join(helloWorldLocal, 'main.go'); const BREAKPOINT_LINE = 29; const remoteProgram = await setUpRemoteProgram(remoteAttachConfig.port, server); @@ -2124,8 +2109,8 @@ const testAll = (ctx: Mocha.Context, isDlvDap: boolean) => { // Skip because it times out in nightly release workflow. // BUG(https://github.com/golang/vscode-go/issues/1043) test.skip('stopped for a breakpoint set during initialization using remotePath (remote attach)', async function () { - if (isDlvDap && dlvDapSkipsEnabled) { - this.skip(); // not working in dlv-dap. + if (isDlvDap) { + this.skip(); // remotePath is not used in dlv-dap } const FILE = path.join(helloWorldLocal, 'main.go'); @@ -2193,6 +2178,9 @@ const testAll = (ctx: Mocha.Context, isDlvDap: boolean) => { // be explicit and prevent resolveDebugConfiguration from picking // a default debugAdapter for us. config['debugAdapter'] = isDlvDap ? 'dlv-dap' : 'legacy'; + if (withConsole) { + config['console'] = withConsole; + } if (!keepUserLogSettings) { dapTraced = true; @@ -2202,6 +2190,12 @@ const testAll = (ctx: Mocha.Context, isDlvDap: boolean) => { config['showLog'] = true; config['trace'] = 'verbose'; } + + // disable version check (like in dlv-dap). + if (!isDlvDap) { + const dlvFlags = config['dlvFlags'] || []; + config['dlvFlags'] = ['--check-go-version=false'].concat(dlvFlags); + } // Give each test a distinct debug binary. If a previous test // and a new test use the same binary location, it is possible // that the second test could build the binary, and then the @@ -2238,6 +2232,11 @@ suite('Go Debug Adapter Tests (dlv-dap)', function () { testAll(this.ctx, true); }); +suite('Go Debug Adapter Tests (dlv-dap, console=integratedTerminal)', function () { + this.timeout(60_000); + testAll(this.ctx, true, 'integratedTerminal'); +}); + // DelveDAPDebugAdapterOnSocket runs a DelveDAPOutputAdapter // over a network socket. This allows tests to instantiate // the thin adapter for Delve DAP and the debug test support's @@ -2281,12 +2280,64 @@ class DelveDAPDebugAdapterOnSocket extends proxy.DelveDAPOutputAdapter { // forward to DelveDAPDebugAdapter, which will forward to dlv dap. inStream.on('data', (data: Buffer) => this._handleData(data)); - // handle data from DelveDAPDebugAdapter, that's from dlv dap. - this.onDidSendMessage((m) => this._send(m)); + // DebugClient silently drops reverse requests. Handle runInTerminal request here. + this.onDidSendMessage((m) => { + if (this.handleRunInTerminal(m)) { + return; + } + this._send(m); + }); inStream.resume(); } + // handleRunInTerminal spawns the requested command and simulates RunInTerminal + // handler implementation inside an editor. + private _dlvInTerminal: cp.ChildProcess; + private handleRunInTerminal(m: vscode.DebugProtocolMessage) { + const m0 = m as any; + if (m0['type'] !== 'request' || m0['command'] !== 'runInTerminal') { + return false; + } + const json = JSON.stringify(m0); + this.log(`<- server: ${json}`); + + const resp = { + seq: 0, + type: 'response', + success: false, + request_seq: m0['seq'], + command: m0['command'], + body: {} + }; + + if (!this._dlvInTerminal && m0['arguments']?.args?.length > 0) { + const args = m0['arguments'].args as string[]; + const env = m0['arguments'].env ? Object.assign({}, process.env, m0['arguments'].env) : undefined; + const p = cp.spawn(args[0], args.slice(1), { + cwd: m0['arguments'].cwd, + env + }); + // stdout/stderr are supposed to appear in the terminal, but + // some of noDebug tests depend on access to stdout/stderr. + // For those tests, let's pump the output as OutputEvent. + p.stdout.on('data', (chunk) => { + this.outputEvent('stdout', chunk.toString()); + }); + p.stderr.on('data', (chunk) => { + this.outputEvent('stderr', chunk.toString()); + }); + resp.success = true; + resp.body = { processId: p.pid }; + this._dlvInTerminal = p; + } + + this.log(`-> server: ${JSON.stringify(resp)}`); + this.handleMessage(resp); + + return true; + } + private _disposed = false; public async dispose(timeoutMS?: number) { if (this._disposed) { diff --git a/test/integration/goDebugConfiguration.test.ts b/test/integration/goDebugConfiguration.test.ts index 5f63b8c073..a59926ae59 100644 --- a/test/integration/goDebugConfiguration.test.ts +++ b/test/integration/goDebugConfiguration.test.ts @@ -12,9 +12,8 @@ import { GoDebugConfigurationProvider } from '../../src/goDebugConfiguration'; import { updateGoVarsFromConfig } from '../../src/goInstallTools'; import { rmdirRecursive } from '../../src/util'; import goEnv = require('../../src/goEnv'); -import { isInPreviewMode } from '../../src/goLanguageServer'; import { MockCfg } from '../mocks/MockCfg'; -import { fileURLToPath } from 'url'; +import { extensionId } from '../../src/const'; suite('Debug Environment Variable Merge Test', () => { const debugConfigProvider = new GoDebugConfigurationProvider(); @@ -91,7 +90,7 @@ suite('Debug Environment Variable Merge Test', () => { ); }); - test('toolsEnvVars is not propagated', () => { + test('toolsEnvVars is propagated', () => { const toolsEnv = { GOPATH: '/gopath', GOOS: 'valueFromToolsEnv' @@ -101,7 +100,7 @@ suite('Debug Environment Variable Merge Test', () => { { toolsEnv }, - {} + toolsEnv ); }); @@ -155,7 +154,7 @@ suite('Debug Environment Variable Merge Test', () => { ); }); - test('launchArgs.env is respected, toolsEnvVar is ignored (dlv-dap)', () => { + test('launchArgs.env and toolsEnvVar is respected', () => { const toolsEnv = { GOPATH: '/gopath', SOMEVAR1: 'valueFromToolsEnvVar1', @@ -166,7 +165,9 @@ suite('Debug Environment Variable Merge Test', () => { runTest( { env, toolsEnv }, { - SOMEVAR1: 'valueFromEnv' + GOPATH: '/gopath', + SOMEVAR1: 'valueFromEnv', + SOMEVAR2: 'valueFromToolsEnvVar2' } ); }); @@ -191,7 +192,7 @@ suite('Debug Environment Variable Merge Test', () => { ); }); - test('launchArgs.envFile is repected, and toolsEnvVar is ignored (dlv-dap)', () => { + test('launchArgs.envFile and toolsEnvVar are repected (dlv-dap)', () => { const toolsEnv = { GOPATH: '/gopath', SOMEVAR1: 'valueFromToolsEnvVar1', @@ -204,6 +205,8 @@ suite('Debug Environment Variable Merge Test', () => { runTest( { debugAdapter, toolsEnv, envFile }, { + GOPATH: '/gopath', + SOMEVAR1: 'valueFromToolsEnvVar1', SOMEVAR2: 'valueFromEnvFile2' } ); @@ -217,6 +220,31 @@ suite('Debug Configuration Merge User Settings', () => { teardown(() => sinon.restore()); suite("merge 'go' config from settings.json", () => { + test('default settings are applied', async () => { + const defaultConfig = vscode.extensions.getExtension(extensionId).packageJSON.contributes.configuration + .properties['go.delveConfig'].properties; + + // Run resolveDebugConfiguration with the default workspace settings. + const cfg1 = { + name: 'Launch', + type: 'go', + request: 'launch', + mode: 'auto', + program: '${fileDirname}' + }; + + const defaultResult = await debugConfigProvider.resolveDebugConfiguration(undefined, cfg1); + + assert.strictEqual(defaultResult.showGlobalVariables, defaultConfig.showGlobalVariables.default); + assert.strictEqual(defaultResult.showRegisters, defaultConfig.showRegisters.default); + assert.strictEqual(defaultResult.hideSystemGoroutines, defaultConfig.hideSystemGoroutines.default); + assert.strictEqual(defaultResult.showLog, defaultConfig.showLog.default); + assert.strictEqual(defaultResult.logOutput, defaultConfig.logOutput.default); + assert.strictEqual(defaultResult.debugAdapter, defaultConfig.debugAdapter.default); + assert.deepStrictEqual(defaultResult.dlvFlags, defaultConfig.dlvFlags.default); + assert.deepStrictEqual(defaultResult.substitutePath, defaultConfig.substitutePath.default); + }); + test('go flags config does not affect debug config', async () => { // This tests that the testFlags and GOOS and GOARCH set // in settings.json do not affect the resolved debug configuration. @@ -370,7 +398,7 @@ suite('Debug Configuration Merge User Settings', () => { assert.strictEqual(result.hideSystemGoroutines, false); assert.strictEqual(result.debugAdapter, 'legacy'); assert.strictEqual(result.substitutePath.length, 0); - assert.strictEqual(result.showLog, undefined); + assert.strictEqual(result.showLog, false); assert.strictEqual(result.logOutput, 'rpc'); const dlvLoadConfig = result.dlvLoadConfig; assert.strictEqual(dlvLoadConfig.followPointers, true); diff --git a/test/integration/install.test.ts b/test/integration/install.test.ts index 3602022120..6272c8a11d 100644 --- a/test/integration/install.test.ts +++ b/test/integration/install.test.ts @@ -157,12 +157,7 @@ suite('Installation Tests', function () { await runTest( [ { name: 'gopls', versions: ['v0.1.0', 'v1.0.0-pre.1', 'v1.0.0'], wantVersion: 'v1.0.0' }, - { name: 'guru', versions: ['v1.0.0'], wantVersion: 'v1.0.0' }, - { - name: 'dlv-dap', - versions: ['v1.0.0', getTool('dlv-dap').defaultVersion!], - wantVersion: 'v' + getTool('dlv-dap').latestVersion!.toString() - } + { name: 'dlv', versions: ['v1.0.0', 'v1.8.0'], wantVersion: 'v1.8.0' } ], true ); @@ -172,12 +167,7 @@ suite('Installation Tests', function () { await runTest( [ { name: 'gopls', versions: ['v0.1.0', 'v1.0.0-pre.1', 'v1.0.0'], wantVersion: 'v1.0.0' }, - { name: 'guru', versions: ['v1.0.0'], wantVersion: 'v1.0.0' }, - { - name: 'dlv-dap', - versions: ['v1.0.0', getTool('dlv-dap').defaultVersion!], - wantVersion: 'v' + getTool('dlv-dap').latestVersion!.toString() - } + { name: 'dlv', versions: ['v1.0.0', 'v1.8.0'], wantVersion: 'v1.8.0' } ], true, // LOCAL PROXY true // GOBIN @@ -214,7 +204,7 @@ function buildFakeProxy(testCases: installationTestCase[]) { versions.map((version) => { if (!version.match(/^v\d+\.\d+\.\d+/)) { - // for dlv-dap that retrieves the version from a revision (commit hash) + // for tools that retrieve the versions from a revision (commit hash) const resolvedVersion = tool.latestVersion?.toString() || '1.0.0'; const infoPath = path.join(dir, `${version}.info`); version = `v${resolvedVersion}`; diff --git a/test/runTest.ts b/test/runTest.ts index 27a23f4322..1756bcfcd6 100644 --- a/test/runTest.ts +++ b/test/runTest.ts @@ -1,7 +1,7 @@ /* eslint-disable no-process-exit */ /* eslint-disable node/no-unpublished-import */ import * as path from 'path'; -import { runTests } from 'vscode-test'; +import { runTests } from '@vscode/test-electron'; async function main() { // We are in test mode. diff --git a/test/testdata/goroutineTest/main.go b/test/testdata/goroutineTest/main.go index 38055ed1f4..70338f5ef7 100644 --- a/test/testdata/goroutineTest/main.go +++ b/test/testdata/goroutineTest/main.go @@ -1,24 +1,21 @@ package main -func run1() { - x := 0 - for { - x++ - x *= 4 - } -} +import ( + "fmt" + "sync" +) -func run2() { - x := 0 - for { - x++ - x *= 4 - } +func sayhi(n int, wg *sync.WaitGroup) { + fmt.Println("hi", n) + fmt.Println("hi", n) + wg.Done() } func main() { - go run1() - go run2() - for { + var wg sync.WaitGroup + wg.Add(10) + for i := 0; i < 10; i++ { + go sayhi(i, &wg) } + wg.Wait() } diff --git a/tools/allTools.ts.in b/tools/allTools.ts.in index e6377b8313..b08805419b 100644 --- a/tools/allTools.ts.in +++ b/tools/allTools.ts.in @@ -213,20 +213,10 @@ export const allToolsInformation: { [key: string]: Tool } = { replacedByGopls: false, isImportant: true, description: 'Go debugger (Delve)', + latestVersion: semver.parse('v1.6.1'), // minimum version that supports DAP + latestVersionTimestamp: moment('2021-05-19', 'YYYY-MM-DD'), minimumGoVersion: semver.coerce('1.12') // dlv requires 1.12+ for build }, - 'dlv-dap': { - name: 'dlv-dap', - importPath: 'github.com/go-delve/delve/cmd/dlv', - modulePath: 'github.com/go-delve/delve', - replacedByGopls: false, - isImportant: true, - description: 'Go debugger & debug adapter (Delve DAP)', - defaultVersion: '%s', // pinned version - minimumGoVersion: semver.coerce('1.12'), // dlv requires 1.12+ for build - latestVersion: semver.parse('%s'), - latestVersionTimestamp: moment('%s', 'YYYY-MM-DD') - }, 'fillstruct': { name: 'fillstruct', importPath: 'github.com/davidrjenni/reftools/cmd/fillstruct', diff --git a/tools/generate.go b/tools/generate.go index e3169d18e0..41535a992c 100644 --- a/tools/generate.go +++ b/tools/generate.go @@ -15,7 +15,6 @@ package main import ( "bytes" "encoding/json" - "errors" "flag" "fmt" "io" @@ -24,7 +23,6 @@ import ( "os" "os/exec" "path/filepath" - "regexp" "sort" "strings" @@ -232,18 +230,6 @@ func main() { // Clear so that we can rewrite src/goToolsInformation.ts. b.Reset() - // Check for latest dlv-dap version. - dlvVersion, err := listModuleVersion("github.com/go-delve/delve@master") - if err != nil { - log.Fatal(err) - } - // Due to https://github.com/golang/vscode-go/issues/1682, we cannot use - // pseudo-version as the pinned version reliably. - dlvRevOrStable := dlvVersion.Version - if rev, err := pseudoVersionRev(dlvVersion.Version); err == nil { // pseudo-version - dlvRevOrStable = rev - } - // Check for the latest gopls version. versions, err := listAllModuleVersions("golang.org/x/tools/gopls") if err != nil { @@ -253,7 +239,8 @@ func main() { latestPre := versions.Versions[latestIndex] // We need to find the last version that was not a pre-release. var latest string - for latest = versions.Versions[latestIndex]; latestIndex >= 0; latestIndex-- { + for ; latestIndex >= 0; latestIndex-- { + latest = versions.Versions[latestIndex] if !strings.Contains(latest, "pre") { break } @@ -277,7 +264,7 @@ func main() { } // TODO(suzmue): change input to json and avoid magic string printing. - toolsString := fmt.Sprintf(string(data), goplsVersion.Version, goplsVersion.Time[:len("YYYY-MM-DD")], goplsVersionPre.Version, goplsVersionPre.Time[:len("YYYY-MM-DD")], dlvRevOrStable, dlvVersion.Version, dlvVersion.Time[:len("YYYY-MM-DD")]) + toolsString := fmt.Sprintf(string(data), goplsVersion.Version, goplsVersion.Time[:len("YYYY-MM-DD")], goplsVersionPre.Version, goplsVersionPre.Time[:len("YYYY-MM-DD")]) // Write tools section. b.WriteString(toolsString) @@ -354,8 +341,10 @@ func defaultDescriptionSnippet(p *Property) string { switch p.Type { case "object": x, ok := p.Default.(map[string]interface{}) - // do nothing if it is nil - if ok && len(x) > 0 { + if !ok { + panic(fmt.Sprintf("unexpected type of object: %v", *p)) + } else if len(x) > 0 { + // do nothing if it is nil writeMapObject(b, "", x) } case "string": @@ -363,8 +352,18 @@ func defaultDescriptionSnippet(p *Property) string { case "boolean", "number": fmt.Fprintf(b, "%v", p.Default) case "array": - if x, ok := p.Default.([]interface{}); ok && len(x) > 0 { - fmt.Fprintf(b, "%v", p.Default) + x, ok := p.Default.([]interface{}) + if !ok { + panic(fmt.Sprintf("unexpected type for array: %v", *p)) + } else if len(x) > 0 { + fmt.Fprintf(b, "[") + for i, v := range x { + if i > 0 { + fmt.Fprintf(b, ", ") + } + fmt.Fprintf(b, "%q", v) + } + fmt.Fprintf(b, "]") } default: fmt.Fprintf(b, "%v", p.Default) @@ -693,19 +692,3 @@ func describeDebugProperty(p *Property) string { } return b.String() } - -// pseudoVersionRev extracts the revision info if the given version is pseudo version. -// We wanted to use golang.org/x/mod/module.PseudoVersionRev, but couldn't due to -// an error in the CI. This is a workaround. -// -// It assumes the version string came from the proxy, so a valid, canonical version -// string. Thus, the check for pseudoversion is not as robust as golang.org/x/mod/module -// offers. -func pseudoVersionRev(ver string) (rev string, _ error) { - var pseudoVersionRE = regexp.MustCompile(`^v[0-9]+\.(0\.0-|\d+\.\d+-([^+]*\.)?0\.)\d{14}-[A-Za-z0-9]+(\+[0-9A-Za-z-]+(\.[0-9A-Za-z-]+)*)?$`) - if strings.Count(ver, "-") < 2 || !pseudoVersionRE.MatchString(ver) { - return "", errors.New("not a pseudo version") - } - j := strings.LastIndex(ver, "-") - return ver[j+1:], nil -} diff --git a/tools/goplssetting/goplssetting.go b/tools/goplssetting/goplssetting.go index 3c9f331b55..ef568cef00 100644 --- a/tools/goplssetting/goplssetting.go +++ b/tools/goplssetting/goplssetting.go @@ -249,7 +249,7 @@ func collectProperties(m map[string][]*OptionJSON) (map[string]*Object, error) { obj.Properties[unquotedName] = &Object{ Type: propertyType(opt.EnumKeys.ValueType), MarkdownDescription: k.Doc, - Default: formatDefault(k.Default), + Default: formatDefault(k.Default, opt.EnumKeys.ValueType), } } } @@ -272,21 +272,26 @@ func formatOptionDefault(opt *OptionJSON) interface{} { if len(opt.EnumKeys.Keys) > 0 { return nil } - def := opt.Default - switch opt.Type { + + return formatDefault(opt.Default, opt.Type) +} + +// formatDefault converts a string-based default value to an actual value that +// can be marshaled to JSON. Right now, gopls generates default values as +// strings, but perhaps that will change. +func formatDefault(def, typ string) interface{} { + switch typ { case "enum", "string", "time.Duration": unquote, err := strconv.Unquote(def) if err == nil { def = unquote } + case "[]string": + var x []string + if err := json.Unmarshal([]byte(def), &x); err == nil { + return x + } } - return formatDefault(def) -} - -// formatDefault converts a string-based default value to an actual value that -// can be marshaled to JSON. Right now, gopls generates default values as -// strings, but perhaps that will change. -func formatDefault(def string) interface{} { switch def { case "{}", "[]": return nil diff --git a/tools/goplssetting/goplssetting_test.go b/tools/goplssetting/goplssetting_test.go index 80d553f837..4a9124150a 100644 --- a/tools/goplssetting/goplssetting_test.go +++ b/tools/goplssetting/goplssetting_test.go @@ -105,6 +105,19 @@ func TestWriteAsVSCodeSettings(t *testing.T) { "scope": "resource" }`, }, + { + name: "array", + in: &OptionJSON{ + Name: "directoryFilters", + Type: "[]string", + Default: "[\"-node_modules\", \"-vendor\"]", + }, + out: `"directoryFilters": { + "type": "array", + "default": ["-node_modules", "-vendor"], + "scope": "resource" + }`, + }, } for _, tc := range testCases { diff --git a/tools/installtools/main.go b/tools/installtools/main.go index 99a2def4eb..d892bd2402 100644 --- a/tools/installtools/main.go +++ b/tools/installtools/main.go @@ -31,7 +31,6 @@ var tools = []struct { {"github.com/zmb3/gogetdoc", "", ""}, {"honnef.co/go/tools/cmd/staticcheck", "", ""}, {"golang.org/x/tools/cmd/gorename", "", ""}, - {"github.com/go-delve/delve/cmd/dlv", "master", "dlv-dap"}, {"github.com/go-delve/delve/cmd/dlv", "", ""}, } @@ -140,7 +139,3 @@ func binName(toolPath string) string { } return b } - -func runWithGoInstall() error { - return nil -}