gopls version

Build info
----------
golang.org/x/tools/gopls v0.20.0
    golang.org/x/tools/gopls@v0.20.0 h1:fxOYZXKl6IsOTKIh6IgjDbIDHlr5btOtOUkrGOgFDB4=
    github.com/BurntSushi/toml@v1.5.0 h1:W5quZX/G/csjUnuI8SUYlsHs9M38FC7znL0lIO+DvMg=
    github.com/fatih/camelcase@v1.0.0 h1:hxNvNX/xYBp0ovncs8WyWZrOrpBNub/JfaMvbURyft8=
    github.com/fatih/gomodifytags@v1.17.1-0.20250423142747-f3939df9aa3c h1:dDSgAjoOMp8da3egfz0t2S+t8RGOpEmEXZubcGuc0Bg=
    github.com/fatih/structtag@v1.2.0 h1:/OdNE99OxoI/PqaW/SuSK9uxxT3f/tcSZgon/ssNSx4=
    github.com/fsnotify/fsnotify@v1.9.0 h1:2Ml+OJNzbYCTzsxtv8vKSFD9PbJjmhYF14k/jKC7S9k=
    github.com/google/go-cmp@v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=
    golang.org/x/exp/typeparams@v0.0.0-20250620022241-b7579e27df2b h1:KdrhdYPDUvJTvrDK9gdjfFd6JTk8vA1WJoldYSi0kHo=
    golang.org/x/mod@v0.26.0 h1:EGMPT//Ezu+ylkCijjPc+f4Aih7sZvaAr+O3EHBxvZg=
    golang.org/x/sync@v0.16.0 h1:ycBJEhp9p4vXvUZNszeOq0kGTPghopOL8q0fq3vstxw=
    golang.org/x/sys@v0.34.0 h1:H5Y5sJ2L2JRdyv7ROF1he/lPdvFsd0mJHFw2ThKHxLA=
    golang.org/x/telemetry@v0.0.0-20250710130107-8d8967aff50b h1:DU+gwOBXU+6bO0sEyO7o/NeMlxZxCZEvI7v+J4a1zRQ=
    golang.org/x/text@v0.27.0 h1:4fGWRpyh641NLlecmyl4LOe6yDdfaYNrGb2zdfo4JV4=
    golang.org/x/tools@v0.35.1-0.20250728180453-01a3475a31bc h1:ZRKyKRJl/YEWl9ScZwd6Ua6xSt7DE6tHp1I3ucMroGM=
    golang.org/x/vuln@v1.1.4 h1:Ju8QsuyhX3Hk8ma3CesTbO8vfJD9EvUBgHvkxHBzj0I=
    honnef.co/go/tools@v0.7.0-0.dev.0.20250523013057-bbc2f4dd71ea h1:fj8r9irJSpolAGUdZBxJIRY3lLc4jH2Dt4lwnWyWwpw=
    mvdan.cc/gofumpt@v0.8.0 h1:nZUCeC2ViFaerTcYKstMmfysj6uhQrA2vJe+2vwGU6k=
    mvdan.cc/xurls/v2@v2.6.0 h1:3NTZpeTxYVWNSokW3MKeyVkz/j7uYXYiMtXRUfmjbgI=
go: go1.24.7

go env

GO111MODULE=''
GOARCH='arm64'
GOBIN=''
GOCACHE='/Users/ian/Library/Caches/go-build'
GOENV='/Users/ian/Library/Application Support/go/env'
GOEXE=''
GOEXPERIMENT=''
GOFLAGS=''
GOHOSTARCH='arm64'
GOHOSTOS='darwin'
GOINSECURE=''
GOMODCACHE='/Users/ian/go/pkg/mod'
GONOPROXY='github.com/gb'
GONOSUMDB='github.com/gb'
GOOS='darwin'
GOPATH='/Users/ian/go'
GOPRIVATE='github.com/gb'
GOPROXY='https://proxy.golang.org,direct'
GOROOT='/Users/ian/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.23.12.darwin-arm64'
GOSUMDB='sum.golang.org'
GOTMPDIR=''
GOTOOLCHAIN='auto'
GOTOOLDIR='/Users/ian/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.23.12.darwin-arm64/pkg/tool/darwin_arm64'
GOVCS=''
GOVERSION='go1.23.12'
GODEBUG=''
GOTELEMETRY='local'
GOTELEMETRYDIR='/Users/ian/Library/Application Support/go/telemetry'
GCCGO='gccgo'
GOARM64='v8.0'
AR='ar'
CC='clang'
CXX='clang++'
CGO_ENABLED='1'
GOMOD='/Users/ian/src/roadie/go.mod'
GOWORK=''
CGO_CFLAGS='-O2 -g'
CGO_CPPFLAGS=''
CGO_CXXFLAGS='-O2 -g'
CGO_FFLAGS='-O2 -g'
CGO_LDFLAGS='-O2 -g'
PKG_CONFIG='pkg-config'
GOGCCFLAGS='-fPIC -arch arm64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -ffile-prefix-map=/var/folders/ts/8mtw6_ys063g05dpbbwx0y980000gn/T/go-build3086432762=/tmp/go-build -gno-record-gcc-switches -fno-common'

What did you do?

Typing new code while running a VSCode Liveshare. This happens both on the host and a connected client (although I think the client may have to type something first to trigger the host to start exhibiting the same behaviour).

What did you see happen?

Frequentl pops up a code action resolve failed error, with various contents depending on the change that is being made. These errors appear live as you're typing and it's possible for them to stack until they fill most of the vertical height of a monitor making pairing incredibly difficult.

Image

https://github.com/user-attachments/assets/4d8cbf63-6313-47cb-9267-aacf43361ca1

What did you expect to see?

No popups or a popup on save.

Editor and settings

{
    "workbench.colorTheme": "Default Dark Modern",
    "prettier.requireConfig": true,
    "editor.codeActionsOnSave": {
        "source.fixAll": "explicit"
    },
    "git.confirmSync": false,
    "editor.formatOnSave": true,
    "editor.defaultFormatter": "esbenp.prettier-vscode",
    "wallaby.startAutomatically": false,
    "playwright.env": {}
}

Logs

[Error - 12:45:23] Request codeAction/resolve failed.
  Message: no identifier found
  Code: 0 
[Error - 12:45:29] Request codeAction/resolve failed.
  Message: no identifier found
  Code: 0 
[Error - 12:45:29] Request codeAction/resolve failed.
  Message: no identifier found
  Code: 0 
[Info  - 12:45:51] 2025/09/12 12:45:51 background imports cache refresh starting

[Info  - 12:45:51] 2025/09/12 12:45:51 background refresh finished after 25.97425ms

[Error - 12:45:53] Request codeAction/resolve failed.
  Message: no identifier found
  Code: 0 
[Info  - 12:46:21] 2025/09/12 12:46:21 background imports cache refresh starting

[Info  - 12:46:21] 2025/09/12 12:46:21 background refresh finished after 45.627875ms

Comment From: gabyhelp

Related Issues

(Emoji vote if this was helpful or unhelpful; more detailed feedback welcome in this discussion.)

Comment From: findleyr

See also https://github.com/golang/go/issues/71405

For some reason, VS Code liveshare always runs codeAction/resolve, where normal VS Code sessions don't run it until you actually try to run the codeAction.

I wish the error message included the actual code action that failed to resolve...

Comment From: findleyr

At the very least, we should have a way to disable codeAction/resolve so that it stops breaking LiveShare sessions.

Comment From: IPWright83

Yeah it made it completely unusable for my colleague @findleyr - being able to only run on save might work.

Comment From: whitequark

This makes LiveShare completely unusable when working on Go code. Easily the worst user experience I've ever had with VS Code.

Comment From: h9jiang

I could not reproduce this issue with @madelinekalil

Is it possible to share the verbose log with us to see where the error is happening? To do that, please add "go.trace.server": "verbose", to the user settings.json and re-produce this issue. Find channel gopls, it should have the exact same error message you are observing.

Though I can not reproduce this with live share, I think the problem is "vscode live share always run codeAction/resolve".

[Trace - 2:26:50 PM] Sending request 'codeAction/resolve - (162)'.
Params: {
    "title": "Create variable te",
    "data": {
        "title": "Create variable te",
        "command": "gopls.apply_fix",
        "arguments": [
            {
                "Fix": "create_undeclared",
                "Location": {
                    "uri": "file://....go",
                    "range": {
                        "start": {
                            "line": 102,
                            "character": 3
                        },
                        "end": {
                            "line": 102,
                            "character": 3
                        }
                    }
                },
                "ResolveEdits": true
            }
        ]
    },
    "kind": "quickfix"
}


[Trace - 2:26:50 PM] Received response 'codeAction/resolve - (162)' in 2ms. Request failed: no identifier found (0).

In a regular gopls session (without live share), I have to manually issue codeAction/resolve and I can reproduce the symptom you are observing.

Image

Comment From: findleyr

I have a CL in progress, which I'll mail later today, that tries to address this on first principles (though I also couldn't reproduce!)

Comment From: IPWright83

I could not reproduce this issue with @madelinekalil

Is it possible to share the verbose log with us to see where the error is happening? To do that, please add "go.trace.server": "verbose", to the user settings.json and re-produce this issue. Find channel gopls, it should have the exact same error message you are observing.

Though I can not reproduce this with live share, I think the problem is "vscode live share always run codeAction/resolve".

``` [Trace - 2:26:50 PM] Sending request 'codeAction/resolve - (162)'. Params: { "title": "Create variable te", "data": { "title": "Create variable te", "command": "gopls.apply_fix", "arguments": [ { "Fix": "create_undeclared", "Location": { "uri": "file://....go", "range": { "start": { "line": 102, "character": 3 }, "end": { "line": 102, "character": 3 } } }, "ResolveEdits": true } ] }, "kind": "quickfix" }

[Trace - 2:26:50 PM] Received response 'codeAction/resolve - (162)' in 2ms. Request failed: no identifier found (0). ```

In a regular gopls session (without live share), I have to manually issue codeAction/resolve and I can reproduce the symptom you are observing.

The easiest way I found to reproduce it is this:

  • Start a VSCode Liveshare instance
  • Open the URL in a browser and connect anonymously (in browser)
  • Accept the anonymous connection inside VSCode
  • Make a change via the browser

At that point making changes from either VSCode or the browser will trigger the issue. I think before that you might struggle getting a prompt. The advantage of using the browser is you can reproduce on your own without any assistance from others.

I've included logs from the 2 gopls channels:

gopls

[Trace - 15:02:28] Sending request 'workspace/executeCommand - (332)'.
Params: {
    "command": "gopls.maybe_prompt_for_telemetry"
}


[Trace - 15:02:28] Received response 'workspace/executeCommand - (332)' in 2ms.
No result returned.


[Trace - 15:02:30] Sending request 'textDocument/documentSymbol - (333)'.
Params: {
    "textDocument": {
        "uri": "file:///Users/ian/src/roadie/server/create_parameterized_dashboard_test.go"
    }
}


[Trace - 15:02:30] Sending request 'textDocument/documentSymbol - (334)'.
Params: {
    "textDocument": {
        "uri": "file:///Users/ian/src/roadie/server/create_parameterized_dashboard_test.go"
    }
}


[Trace - 15:02:30] Sending request 'textDocument/documentSymbol - (335)'.
Params: {
    "textDocument": {
        "uri": "file:///Users/ian/src/roadie/server/create_parameterized_dashboard_test.go"
    }
}


[Trace - 15:02:30] Sending request 'textDocument/codeLens - (336)'.
Params: {
    "textDocument": {
        "uri": "file:///Users/ian/src/roadie/server/create_parameterized_dashboard_test.go"
    }
}


[Trace - 15:02:30] Received response 'textDocument/documentSymbol - (333)' in 2ms.
Result: [
    {
        "name": "Test_CreateParameterizedDashboard",
        "detail": "func(t *testing.T)",
        "kind": 12,
        "range": {
            "start": {
                "line": 29,
                "character": 0
            },
            "end": {
                "line": 406,
                "character": 1
            }
        },
        "selectionRange": {
            "start": {
                "line": 29,
                "character": 5
            },
            "end": {
                "line": 29,
                "character": 38
            }
        }
    }
]


[Trace - 15:02:30] Received response 'textDocument/documentSymbol - (334)' in 2ms.
Result: [
    {
        "name": "Test_CreateParameterizedDashboard",
        "detail": "func(t *testing.T)",
        "kind": 12,
        "range": {
            "start": {
                "line": 29,
                "character": 0
            },
            "end": {
                "line": 406,
                "character": 1
            }
        },
        "selectionRange": {
            "start": {
                "line": 29,
                "character": 5
            },
            "end": {
                "line": 29,
                "character": 38
            }
        }
    }
]


[Trace - 15:02:30] Sending request 'workspace/executeCommand - (337)'.
Params: {
    "command": "gopls.list_imports",
    "arguments": [
        {
            "URI": "file:///Users/ian/src/roadie/server/create_parameterized_dashboard_test.go"
        }
    ]
}


[Trace - 15:02:30] Received response 'textDocument/documentSymbol - (335)' in 3ms.
Result: [
    {
        "name": "Test_CreateParameterizedDashboard",
        "detail": "func(t *testing.T)",
        "kind": 12,
        "range": {
            "start": {
                "line": 29,
                "character": 0
            },
            "end": {
                "line": 406,
                "character": 1
            }
        },
        "selectionRange": {
            "start": {
                "line": 29,
                "character": 5
            },
            "end": {
                "line": 29,
                "character": 38
            }
        }
    }
]


[Trace - 15:02:30] Received response 'textDocument/codeLens - (336)' in 2ms.
No result returned.


[Trace - 15:02:30] Received response 'workspace/executeCommand - (337)' in 1ms.
Result: {
    "Imports": [
        {
            "Path": "context",
            "Name": ""
        },
        {
            "Path": "errors",
            "Name": ""
        },
        {
            "Path": "net",
            "Name": ""
        },
        {
            "Path": "testing",
            "Name": ""
        },
        {
            "Path": "github.com/gb/agora/queue/mocks",
            "Name": "agoramocks"
        },
        {
            "Path": "github.com/gb/goutils/database/driver",
            "Name": ""
        },
        {
            "Path": "github.com/gb/goutils/featureflags/featureflagtest",
            "Name": ""
        },
        {
            "Path": "github.com/gb/identity/authorizer",
            "Name": ""
        },
        {
            "Path": "github.com/gb/identity/identity",
            "Name": ""
        },
        {
            "Path": "github.com/gb/identity/principal",
            "Name": ""
        },
        {
            "Path": "github.com/gb/roadie/database",
            "Name": ""
        },
        {
            "Path": "github.com/gb/roadie/database/mocks",
            "Name": ""
        },
        {
            "Path": "github.com/gb/roadie/mapping",
            "Name": ""
        },
        {
            "Path": "github.com/gb/roadie/models",
            "Name": ""
        },
        {
            "Path": "github.com/gb/roadie/presentation",
            "Name": ""
        },
        {
            "Path": "github.com/gb/roadie/presentation/presentationmock",
            "Name": ""
        },
        {
            "Path": "github.com/gb/roadie/roadiepb",
            "Name": "pb"
        },
        {
            "Path": "github.com/gb/roadie/testutil",
            "Name": ""
        },
        {
            "Path": "github.com/google/go-cmp/cmp/cmpopts",
            "Name": ""
        },
        {
            "Path": "github.com/volatiletech/null/v8",
            "Name": ""
        },
        {
            "Path": "google.golang.org/grpc/codes",
            "Name": ""
        },
        {
            "Path": "google.golang.org/grpc/status",
            "Name": ""
        },
        {
            "Path": "gotest.tools/v3/assert",
            "Name": ""
        }
    ],
    "PackageImports": [
        {
            "Path": "context"
        },
        {
            "Path": "crypto/rand"
        },
        {
            "Path": "database/sql"
        },
        {
            "Path": "errors"
        },
        {
            "Path": "fmt"
        },
        {
            "Path": "github.com/aws/aws-sdk-go/aws"
        },
        {
            "Path": "github.com/aws/aws-sdk-go/aws/awserr"
        },
        {
            "Path": "github.com/aws/aws-sdk-go/aws/request"
        },
        {
            "Path": "github.com/aws/aws-sdk-go/service/s3"
        },
        {
            "Path": "github.com/aws/aws-sdk-go/service/s3/s3iface"
        },
        {
            "Path": "github.com/bugsnag/bugsnag-go"
        },
        {
            "Path": "github.com/bugsnag/bugsnag-go/errors"
        },
        {
            "Path": "github.com/gb/agora/queue/event"
        },
        {
            "Path": "github.com/gb/agora/queue/mocks"
        },
        {
            "Path": "github.com/gb/campus/campuspb"
        },
        {
            "Path": "github.com/gb/clerk/clerkpb"
        },
        {
            "Path": "github.com/gb/go-grpc-middleware/middleware"
        },
        {
            "Path": "github.com/gb/goutils/bugsnagutils/bugsnagtest"
        },
        {
            "Path": "github.com/gb/goutils/database/driver"
        },
        {
            "Path": "github.com/gb/goutils/database/driver/mocks"
        },
        {
            "Path": "github.com/gb/goutils/featureflags"
        },
        {
            "Path": "github.com/gb/goutils/featureflags/featureflagtest"
        },
        {
            "Path": "github.com/gb/goutils/globalfinderpb"
        },
        {
            "Path": "github.com/gb/goutils/globalfinderpb/globalfindertestutil"
        },
        {
            "Path": "github.com/gb/goutils/log"
        },
        {
            "Path": "github.com/gb/goutils/testhelp"
        },
        {
            "Path": "github.com/gb/goutils/vault"
        },
        {
            "Path": "github.com/gb/goutils/vault/mocks"
        },
        {
            "Path": "github.com/gb/identity/authorization"
        },
        {
            "Path": "github.com/gb/identity/authorizer"
        },
        {
            "Path": "github.com/gb/identity/grpcauthz"
        },
        {
            "Path": "github.com/gb/identity/identity"
        },
        {
            "Path": "github.com/gb/identity/principal"
        },
        {
            "Path": "github.com/gb/roadie/database"
        },
        {
            "Path": "github.com/gb/roadie/database/dbmock"
        },
        {
            "Path": "github.com/gb/roadie/database/mocks"
        },
        {
            "Path": "github.com/gb/roadie/event"
        },
        {
            "Path": "github.com/gb/roadie/integrations"
        },
        {
            "Path": "github.com/gb/roadie/mapping"
        },
        {
            "Path": "github.com/gb/roadie/models"
        },
        {
            "Path": "github.com/gb/roadie/presentation"
        },
        {
            "Path": "github.com/gb/roadie/presentation/presentationmock"
        },
        {
            "Path": "github.com/gb/roadie/random"
        },
        {
            "Path": "github.com/gb/roadie/roadiepb"
        },
        {
            "Path": "github.com/gb/roadie/s3"
        },
        {
            "Path": "github.com/gb/roadie/testutil"
        },
        {
            "Path": "github.com/gb/tuner/tunerpb"
        },
        {
            "Path": "github.com/golang/protobuf/ptypes/empty"
        },
        {
            "Path": "github.com/google/go-cmp/cmp"
        },
        {
            "Path": "github.com/google/go-cmp/cmp/cmpopts"
        },
        {
            "Path": "github.com/google/uuid"
        },
        {
            "Path": "github.com/honeycombio/beeline-go"
        },
        {
            "Path": "github.com/volatiletech/null/v8"
        },
        {
            "Path": "github.com/volatiletech/sqlboiler/v4/boil"
        },
        {
            "Path": "github.com/volatiletech/sqlboiler/v4/queries/qm"
        },
        {
            "Path": "github.com/volatiletech/sqlboiler/v4/types"
        },
        {
            "Path": "google.golang.org/grpc"
        },
        {
            "Path": "google.golang.org/grpc/codes"
        },
        {
            "Path": "google.golang.org/grpc/metadata"
        },
        {
            "Path": "google.golang.org/grpc/status"
        },
        {
            "Path": "google.golang.org/protobuf/reflect/protoreflect"
        },
        {
            "Path": "google.golang.org/protobuf/testing/protocmp"
        },
        {
            "Path": "google.golang.org/protobuf/types/known/timestamppb"
        },
        {
            "Path": "gotest.tools/v3/assert"
        },
        {
            "Path": "gotest.tools/v3/assert/cmp"
        },
        {
            "Path": "io"
        },
        {
            "Path": "log"
        },
        {
            "Path": "math/rand"
        },
        {
            "Path": "net"
        },
        {
            "Path": "path"
        },
        {
            "Path": "slices"
        },
        {
            "Path": "sort"
        },
        {
            "Path": "strings"
        },
        {
            "Path": "testing"
        },
        {
            "Path": "time"
        }
    ]
}


[Trace - 15:02:31] Sending request 'textDocument/hover - (338)'.
Params: {
    "textDocument": {
        "uri": "file:///Users/ian/src/roadie/server/create_parameterized_dashboard_test.go"
    },
    "position": {
        "line": 144,
        "character": 6
    }
}


[Trace - 15:02:31] Received response 'textDocument/hover - (338)' in 1ms.
Result: {
    "contents": {
        "kind": "markdown",
        "value": "```go\nvar parentTemplateId string\n```"
    },
    "range": {
        "start": {
            "line": 144,
            "character": 2
        },
        "end": {
            "line": 144,
            "character": 18
        }
    }
}


[Trace - 15:02:32] Sending notification 'textDocument/didChange'.
Params: {
    "textDocument": {
        "uri": "file:///Users/ian/src/roadie/server/create_parameterized_dashboard_test.go",
        "version": 12
    },
    "contentChanges": [
        {
            "range": {
                "start": {
                    "line": 143,
                    "character": 2
                },
                "end": {
                    "line": 143,
                    "character": 2
                }
            },
            "rangeLength": 0,
            "text": "s"
        }
    ]
}


[Trace - 15:02:32] Sending request 'textDocument/documentSymbol - (339)'.
Params: {
    "textDocument": {
        "uri": "file:///Users/ian/src/roadie/server/create_parameterized_dashboard_test.go"
    }
}


[Trace - 15:02:32] Received response 'textDocument/documentSymbol - (339)' in 6ms.
Result: [
    {
        "name": "Test_CreateParameterizedDashboard",
        "detail": "func(t *testing.T)",
        "kind": 12,
        "range": {
            "start": {
                "line": 29,
                "character": 0
            },
            "end": {
                "line": 406,
                "character": 1
            }
        },
        "selectionRange": {
            "start": {
                "line": 29,
                "character": 5
            },
            "end": {
                "line": 29,
                "character": 38
            }
        }
    }
]


[Trace - 15:02:32] Sending request 'workspace/executeCommand - (340)'.
Params: {
    "command": "gopls.list_imports",
    "arguments": [
        {
            "URI": "file:///Users/ian/src/roadie/server/create_parameterized_dashboard_test.go"
        }
    ]
}


[Trace - 15:02:32] Received response 'workspace/executeCommand - (340)' in 2ms.
Result: {
    "Imports": [
        {
            "Path": "context",
            "Name": ""
        },
        {
            "Path": "errors",
            "Name": ""
        },
        {
            "Path": "net",
            "Name": ""
        },
        {
            "Path": "testing",
            "Name": ""
        },
        {
            "Path": "github.com/gb/agora/queue/mocks",
            "Name": "agoramocks"
        },
        {
            "Path": "github.com/gb/goutils/database/driver",
            "Name": ""
        },
        {
            "Path": "github.com/gb/goutils/featureflags/featureflagtest",
            "Name": ""
        },
        {
            "Path": "github.com/gb/identity/authorizer",
            "Name": ""
        },
        {
            "Path": "github.com/gb/identity/identity",
            "Name": ""
        },
        {
            "Path": "github.com/gb/identity/principal",
            "Name": ""
        },
        {
            "Path": "github.com/gb/roadie/database",
            "Name": ""
        },
        {
            "Path": "github.com/gb/roadie/database/mocks",
            "Name": ""
        },
        {
            "Path": "github.com/gb/roadie/mapping",
            "Name": ""
        },
        {
            "Path": "github.com/gb/roadie/models",
            "Name": ""
        },
        {
            "Path": "github.com/gb/roadie/presentation",
            "Name": ""
        },
        {
            "Path": "github.com/gb/roadie/presentation/presentationmock",
            "Name": ""
        },
        {
            "Path": "github.com/gb/roadie/roadiepb",
            "Name": "pb"
        },
        {
            "Path": "github.com/gb/roadie/testutil",
            "Name": ""
        },
        {
            "Path": "github.com/google/go-cmp/cmp/cmpopts",
            "Name": ""
        },
        {
            "Path": "github.com/volatiletech/null/v8",
            "Name": ""
        },
        {
            "Path": "google.golang.org/grpc/codes",
            "Name": ""
        },
        {
            "Path": "google.golang.org/grpc/status",
            "Name": ""
        },
        {
            "Path": "gotest.tools/v3/assert",
            "Name": ""
        }
    ],
    "PackageImports": [
        {
            "Path": "context"
        },
        {
            "Path": "crypto/rand"
        },
        {
            "Path": "database/sql"
        },
        {
            "Path": "errors"
        },
        {
            "Path": "fmt"
        },
        {
            "Path": "github.com/aws/aws-sdk-go/aws"
        },
        {
            "Path": "github.com/aws/aws-sdk-go/aws/awserr"
        },
        {
            "Path": "github.com/aws/aws-sdk-go/aws/request"
        },
        {
            "Path": "github.com/aws/aws-sdk-go/service/s3"
        },
        {
            "Path": "github.com/aws/aws-sdk-go/service/s3/s3iface"
        },
        {
            "Path": "github.com/bugsnag/bugsnag-go"
        },
        {
            "Path": "github.com/bugsnag/bugsnag-go/errors"
        },
        {
            "Path": "github.com/gb/agora/queue/event"
        },
        {
            "Path": "github.com/gb/agora/queue/mocks"
        },
        {
            "Path": "github.com/gb/campus/campuspb"
        },
        {
            "Path": "github.com/gb/clerk/clerkpb"
        },
        {
            "Path": "github.com/gb/go-grpc-middleware/middleware"
        },
        {
            "Path": "github.com/gb/goutils/bugsnagutils/bugsnagtest"
        },
        {
            "Path": "github.com/gb/goutils/database/driver"
        },
        {
            "Path": "github.com/gb/goutils/database/driver/mocks"
        },
        {
            "Path": "github.com/gb/goutils/featureflags"
        },
        {
            "Path": "github.com/gb/goutils/featureflags/featureflagtest"
        },
        {
            "Path": "github.com/gb/goutils/globalfinderpb"
        },
        {
            "Path": "github.com/gb/goutils/globalfinderpb/globalfindertestutil"
        },
        {
            "Path": "github.com/gb/goutils/log"
        },
        {
            "Path": "github.com/gb/goutils/testhelp"
        },
        {
            "Path": "github.com/gb/goutils/vault"
        },
        {
            "Path": "github.com/gb/goutils/vault/mocks"
        },
        {
            "Path": "github.com/gb/identity/authorization"
        },
        {
            "Path": "github.com/gb/identity/authorizer"
        },
        {
            "Path": "github.com/gb/identity/grpcauthz"
        },
        {
            "Path": "github.com/gb/identity/identity"
        },
        {
            "Path": "github.com/gb/identity/principal"
        },
        {
            "Path": "github.com/gb/roadie/database"
        },
        {
            "Path": "github.com/gb/roadie/database/dbmock"
        },
        {
            "Path": "github.com/gb/roadie/database/mocks"
        },
        {
            "Path": "github.com/gb/roadie/event"
        },
        {
            "Path": "github.com/gb/roadie/integrations"
        },
        {
            "Path": "github.com/gb/roadie/mapping"
        },
        {
            "Path": "github.com/gb/roadie/models"
        },
        {
            "Path": "github.com/gb/roadie/presentation"
        },
        {
            "Path": "github.com/gb/roadie/presentation/presentationmock"
        },
        {
            "Path": "github.com/gb/roadie/random"
        },
        {
            "Path": "github.com/gb/roadie/roadiepb"
        },
        {
            "Path": "github.com/gb/roadie/s3"
        },
        {
            "Path": "github.com/gb/roadie/testutil"
        },
        {
            "Path": "github.com/gb/tuner/tunerpb"
        },
        {
            "Path": "github.com/golang/protobuf/ptypes/empty"
        },
        {
            "Path": "github.com/google/go-cmp/cmp"
        },
        {
            "Path": "github.com/google/go-cmp/cmp/cmpopts"
        },
        {
            "Path": "github.com/google/uuid"
        },
        {
            "Path": "github.com/honeycombio/beeline-go"
        },
        {
            "Path": "github.com/volatiletech/null/v8"
        },
        {
            "Path": "github.com/volatiletech/sqlboiler/v4/boil"
        },
        {
            "Path": "github.com/volatiletech/sqlboiler/v4/queries/qm"
        },
        {
            "Path": "github.com/volatiletech/sqlboiler/v4/types"
        },
        {
            "Path": "google.golang.org/grpc"
        },
        {
            "Path": "google.golang.org/grpc/codes"
        },
        {
            "Path": "google.golang.org/grpc/metadata"
        },
        {
            "Path": "google.golang.org/grpc/status"
        },
        {
            "Path": "google.golang.org/protobuf/reflect/protoreflect"
        },
        {
            "Path": "google.golang.org/protobuf/testing/protocmp"
        },
        {
            "Path": "google.golang.org/protobuf/types/known/timestamppb"
        },
        {
            "Path": "gotest.tools/v3/assert"
        },
        {
            "Path": "gotest.tools/v3/assert/cmp"
        },
        {
            "Path": "io"
        },
        {
            "Path": "log"
        },
        {
            "Path": "math/rand"
        },
        {
            "Path": "net"
        },
        {
            "Path": "path"
        },
        {
            "Path": "slices"
        },
        {
            "Path": "sort"
        },
        {
            "Path": "strings"
        },
        {
            "Path": "testing"
        },
        {
            "Path": "time"
        }
    ]
}


[Trace - 15:02:32] Sending request 'textDocument/completion - (341)'.
Params: {
    "textDocument": {
        "uri": "file:///Users/ian/src/roadie/server/create_parameterized_dashboard_test.go"
    },
    "position": {
        "line": 143,
        "character": 3
    },
    "context": {
        "triggerKind": 1
    }
}


[Trace - 15:02:32] Sending request 'textDocument/inlayHint - (342)'.
Params: {
    "textDocument": {
        "uri": "file:///Users/ian/src/roadie/server/create_parameterized_dashboard_test.go"
    },
    "range": {
        "start": {
            "line": 72,
            "character": 0
        },
        "end": {
            "line": 175,
            "character": 0
        }
    }
}


[Trace - 15:02:32] Received notification 'textDocument/publishDiagnostics'.
Params: {
    "uri": "file:///Users/ian/src/roadie/server/create_parameterized_dashboard_test.go",
    "version": 12,
    "diagnostics": [
        {
            "range": {
                "start": {
                    "line": 143,
                    "character": 0
                },
                "end": {
                    "line": 143,
                    "character": 3
                }
            },
            "severity": 1,
            "code": "UndeclaredName",
            "codeDescription": {
                "href": "https://pkg.go.dev/golang.org/x/tools/internal/typesinternal#UndeclaredName"
            },
            "source": "compiler",
            "message": "undefined: res"
        }
    ]
}


[Trace - 15:02:32] Received response 'textDocument/inlayHint - (342)' in 65ms.
No result returned.


[Trace - 15:02:32] Received response 'textDocument/completion - (341)' in 95ms.
Result: {
    "isIncomplete": true,
    "items": [
        {
            "label": "resp",
            "kind": 6,
            "detail": "*pb.CreateParameterizedDashboardResponse",
            "preselect": true,
            "sortText": "00000",
            "filterText": "resp",
            "insertTextFormat": 2,
            "textEdit": {
                "newText": "resp",
                "insert": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                },
                "replace": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                }
            }
        },
        {
            "label": "resizeContainerFramesRequestIDs",
            "kind": 3,
            "detail": "func(req *pb.ResizeContainerFramesRequest) []string",
            "sortText": "00001",
            "filterText": "resizeContainerFramesRequestIDs",
            "insertTextFormat": 2,
            "textEdit": {
                "newText": "resizeContainerFramesRequestIDs(${1:})",
                "insert": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                },
                "replace": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                }
            }
        },
        {
            "label": "resourceCount",
            "kind": 3,
            "detail": "func(v int) func(ctx context.Context, orgID string) (int, error)",
            "sortText": "00002",
            "filterText": "resourceCount",
            "insertTextFormat": 2,
            "textEdit": {
                "newText": "resourceCount(${1:})",
                "insert": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                },
                "replace": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                }
            }
        },
        {
            "label": "codes.ResourceExhausted",
            "kind": 21,
            "detail": "codes.Code",
            "documentation": {
                "kind": "markdown",
                "value": "ResourceExhausted indicates some resource has been exhausted, perhaps a per-user quota, or perhaps the entire file system is out of space.\n\nThis error code will be generated by the gRPC framework in out-of-memory and server overload situations, or when a message is larger than the configured maximum size.\n"
            },
            "sortText": "00003",
            "filterText": "codes.ResourceExhausted",
            "insertTextFormat": 2,
            "textEdit": {
                "newText": "codes.ResourceExhausted",
                "insert": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                },
                "replace": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                }
            }
        },
        {
            "label": "models.ResetWrapAutoDecision",
            "kind": 3,
            "detail": "func(i models.wrappableInstrument) error",
            "sortText": "00004",
            "filterText": "models.ResetWrapAutoDecision",
            "insertTextFormat": 2,
            "textEdit": {
                "newText": "models.ResetWrapAutoDecision(${1:})",
                "insert": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                },
                "replace": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                }
            }
        },
        {
            "label": "net.ResolveIPAddr",
            "kind": 3,
            "detail": "func(network string, address string) (*net.IPAddr, error)",
            "documentation": {
                "kind": "markdown",
                "value": "ResolveIPAddr returns an address of IP end point.\n\nThe network must be an IP network name.\n\nIf the host in the address parameter is not a literal IP address, ResolveIPAddr resolves the address to an address of IP end point. Otherwise, it parses the address as a literal IP address. The address parameter can use a host name, but this is not recommended, because it will return at most one of the host name's IP addresses.\n\nSee func \\[Dial] for a description of the network and address parameters.\n"
            },
            "sortText": "00005",
            "filterText": "net.ResolveIPAddr",
            "insertTextFormat": 2,
            "textEdit": {
                "newText": "net.ResolveIPAddr(${1:})",
                "insert": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                },
                "replace": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                }
            }
        },
        {
            "label": "resolver",
            "kind": 9,
            "detail": "\"github.com/actgardner/gogen-avro/v7/resolver\"",
            "sortText": "00006",
            "filterText": "resolver",
            "insertTextFormat": 2,
            "textEdit": {
                "newText": "resolver",
                "insert": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                },
                "replace": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                }
            },
            "additionalTextEdits": [
                {
                    "range": {
                        "start": {
                            "line": 7,
                            "character": 0
                        },
                        "end": {
                            "line": 7,
                            "character": 0
                        }
                    },
                    "newText": "\n\t\"github.com/actgardner/gogen-avro/v7/resolver\""
                }
            ]
        },
        {
            "label": "resolver",
            "kind": 9,
            "detail": "\"google.golang.org/grpc/internal/resolver\"",
            "sortText": "00007",
            "filterText": "resolver",
            "insertTextFormat": 2,
            "textEdit": {
                "newText": "resolver",
                "insert": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                },
                "replace": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                }
            },
            "additionalTextEdits": [
                {
                    "range": {
                        "start": {
                            "line": 24,
                            "character": 28
                        },
                        "end": {
                            "line": 24,
                            "character": 28
                        }
                    },
                    "newText": "es\"\n\t\"google.golang.org/grpc/internal/r"
                },
                {
                    "range": {
                        "start": {
                            "line": 24,
                            "character": 30
                        },
                        "end": {
                            "line": 24,
                            "character": 30
                        }
                    },
                    "newText": "olver"
                }
            ]
        },
        {
            "label": "rest",
            "kind": 9,
            "detail": "\"github.com/aws/aws-sdk-go/private/protocol/rest\"",
            "sortText": "00008",
            "filterText": "rest",
            "insertTextFormat": 2,
            "textEdit": {
                "newText": "rest",
                "insert": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                },
                "replace": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                }
            },
            "additionalTextEdits": [
                {
                    "range": {
                        "start": {
                            "line": 7,
                            "character": 0
                        },
                        "end": {
                            "line": 7,
                            "character": 0
                        }
                    },
                    "newText": "\n\t\"github.com/aws/aws-sdk-go/private/protocol/rest\""
                }
            ]
        },
        {
            "label": "restjson",
            "kind": 9,
            "detail": "\"github.com/aws/aws-sdk-go/private/protocol/restjson\"",
            "sortText": "00009",
            "filterText": "restjson",
            "insertTextFormat": 2,
            "textEdit": {
                "newText": "restjson",
                "insert": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                },
                "replace": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                }
            },
            "additionalTextEdits": [
                {
                    "range": {
                        "start": {
                            "line": 7,
                            "character": 0
                        },
                        "end": {
                            "line": 7,
                            "character": 0
                        }
                    },
                    "newText": "\n\t\"github.com/aws/aws-sdk-go/private/protocol/restjson\""
                }
            ]
        },
        {
            "label": "restxml",
            "kind": 9,
            "detail": "\"github.com/aws/aws-sdk-go/private/protocol/restxml\"",
            "sortText": "00010",
            "filterText": "restxml",
            "insertTextFormat": 2,
            "textEdit": {
                "newText": "restxml",
                "insert": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                },
                "replace": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                }
            },
            "additionalTextEdits": [
                {
                    "range": {
                        "start": {
                            "line": 7,
                            "character": 0
                        },
                        "end": {
                            "line": 7,
                            "character": 0
                        }
                    },
                    "newText": "\n\t\"github.com/aws/aws-sdk-go/private/protocol/restxml\""
                }
            ]
        },
        {
            "label": "presentDashboardFinderResult",
            "kind": 3,
            "detail": "func(dash *models.Dashboard) *FinderResult",
            "sortText": "00011",
            "filterText": "presentDashboardFinderResult",
            "insertTextFormat": 2,
            "textEdit": {
                "newText": "presentDashboardFinderResult(${1:})",
                "insert": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                },
                "replace": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                }
            }
        },
        {
            "label": "presentInstrumentFinderResult",
            "kind": 3,
            "detail": "func(inst *models.Instrument) *FinderResult",
            "sortText": "00012",
            "filterText": "presentInstrumentFinderResult",
            "insertTextFormat": 2,
            "textEdit": {
                "newText": "presentInstrumentFinderResult(${1:})",
                "insert": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                },
                "replace": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                }
            }
        },
        {
            "label": "presentLoopFinderResult",
            "kind": 3,
            "detail": "func(loop *models.Loop) *FinderResult",
            "sortText": "00013",
            "filterText": "presentLoopFinderResult",
            "insertTextFormat": 2,
            "textEdit": {
                "newText": "presentLoopFinderResult(${1:})",
                "insert": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                },
                "replace": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                }
            }
        },
        {
            "label": "validateResizeContainerFramesRequest",
            "kind": 3,
            "detail": "func(req *pb.ResizeContainerFramesRequest, cfrms []*models.ContainerFrame) error",
            "sortText": "00014",
            "filterText": "validateResizeContainerFramesRequest",
            "insertTextFormat": 2,
            "textEdit": {
                "newText": "validateResizeContainerFramesRequest(${1:})",
                "insert": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                },
                "replace": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                }
            }
        },
        {
            "label": "FinderResult",
            "kind": 22,
            "detail": "struct{...}",
            "sortText": "00018",
            "filterText": "FinderResult",
            "insertTextFormat": 2,
            "textEdit": {
                "newText": "FinderResult",
                "insert": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                },
                "replace": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                }
            }
        },
        {
            "label": "TestListRecentIntegrations_UpdateInstrumentUpdatesResponseOrder",
            "kind": 3,
            "detail": "func(t *testing.T)",
            "sortText": "00019",
            "filterText": "TestListRecentIntegrations_UpdateInstrumentUpdatesResponseOrder",
            "insertTextFormat": 2,
            "textEdit": {
                "newText": "TestListRecentIntegrations_UpdateInstrumentUpdatesResponseOrder(${1:})",
                "insert": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                },
                "replace": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                }
            }
        },
        {
            "label": "Test_ResizeContainerFrames_Auth",
            "kind": 3,
            "detail": "func(t *testing.T)",
            "sortText": "00020",
            "filterText": "Test_ResizeContainerFrames_Auth",
            "insertTextFormat": 2,
            "textEdit": {
                "newText": "Test_ResizeContainerFrames_Auth(${1:})",
                "insert": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                },
                "replace": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                }
            }
        },
        {
            "label": "Test_ResizeContainerFrames_Errors",
            "kind": 3,
            "detail": "func(t *testing.T)",
            "sortText": "00021",
            "filterText": "Test_ResizeContainerFrames_Errors",
            "insertTextFormat": 2,
            "textEdit": {
                "newText": "Test_ResizeContainerFrames_Errors(${1:})",
                "insert": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                },
                "replace": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                }
            }
        },
        {
            "label": "Test_ResizeContainerFrames_Success",
            "kind": 3,
            "detail": "func(t *testing.T)",
            "sortText": "00022",
            "filterText": "Test_ResizeContainerFrames_Success",
            "insertTextFormat": 2,
            "textEdit": {
                "newText": "Test_ResizeContainerFrames_Success(${1:})",
                "insert": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                },
                "replace": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                }
            }
        },
        {
            "label": "request",
            "kind": 6,
            "detail": "*pb.CreateParameterizedDashboardRequest",
            "sortText": "00024",
            "filterText": "request",
            "insertTextFormat": 2,
            "textEdit": {
                "newText": "request",
                "insert": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                },
                "replace": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                }
            }
        },
        {
            "label": "repository",
            "kind": 6,
            "detail": "*database.Repository",
            "sortText": "00026",
            "filterText": "repository",
            "insertTextFormat": 2,
            "textEdit": {
                "newText": "repository",
                "insert": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                },
                "replace": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                }
            }
        },
        {
            "label": "canReadDataSourceConfigRules",
            "kind": 3,
            "detail": "func(orgID string, dataSourceConfigPlatform string) identity.AuthorizeRules",
            "sortText": "00027",
            "filterText": "canReadDataSourceConfigRules",
            "insertTextFormat": 2,
            "textEdit": {
                "newText": "canReadDataSourceConfigRules(${1:})",
                "insert": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                },
                "replace": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                }
            }
        },
        {
            "label": "replaceTemplatedInstrumentIDsWithGeneratedIDs",
            "kind": 3,
            "detail": "func(ctx context.Context, repo database.DashboardRepository, result []*pb.BatchListDashboardContainersResponse_DashboardContainers, dashboardIDs []string) error",
            "sortText": "00028",
            "filterText": "replaceTemplatedInstrumentIDsWithGeneratedIDs",
            "insertTextFormat": 2,
            "textEdit": {
                "newText": "replaceTemplatedInstrumentIDsWithGeneratedIDs(${1:})",
                "insert": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                },
                "replace": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                }
            }
        },
        {
            "label": "TestGRPCServer_RegenerateLoopSharingHash",
            "kind": 3,
            "detail": "func(t *testing.T)",
            "sortText": "00029",
            "filterText": "TestGRPCServer_RegenerateLoopSharingHash",
            "insertTextFormat": 2,
            "textEdit": {
                "newText": "TestGRPCServer_RegenerateLoopSharingHash(${1:})",
                "insert": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                },
                "replace": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                }
            }
        },
        {
            "label": "TestReadDashboardRules_Screen",
            "kind": 3,
            "detail": "func(t *testing.T)",
            "sortText": "00030",
            "filterText": "TestReadDashboardRules_Screen",
            "insertTextFormat": 2,
            "textEdit": {
                "newText": "TestReadDashboardRules_Screen(${1:})",
                "insert": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                },
                "replace": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                }
            }
        },
        {
            "label": "TestReadDashboardRules_SharedDashboard",
            "kind": 3,
            "detail": "func(t *testing.T)",
            "sortText": "00031",
            "filterText": "TestReadDashboardRules_SharedDashboard",
            "insertTextFormat": 2,
            "textEdit": {
                "newText": "TestReadDashboardRules_SharedDashboard(${1:})",
                "insert": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                },
                "replace": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                }
            }
        },
        {
            "label": "TestReadDashboardRules_SharingLoop",
            "kind": 3,
            "detail": "func(t *testing.T)",
            "sortText": "00032",
            "filterText": "TestReadDashboardRules_SharingLoop",
            "insertTextFormat": 2,
            "textEdit": {
                "newText": "TestReadDashboardRules_SharingLoop(${1:})",
                "insert": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                },
                "replace": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                }
            }
        },
        {
            "label": "TestReadDashboardRules_Staff",
            "kind": 3,
            "detail": "func(t *testing.T)",
            "sortText": "00033",
            "filterText": "TestReadDashboardRules_Staff",
            "insertTextFormat": 2,
            "textEdit": {
                "newText": "TestReadDashboardRules_Staff(${1:})",
                "insert": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                },
                "replace": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                }
            }
        },
        {
            "label": "TestReadLoopRules_Screen",
            "kind": 3,
            "detail": "func(t *testing.T)",
            "sortText": "00034",
            "filterText": "TestReadLoopRules_Screen",
            "insertTextFormat": 2,
            "textEdit": {
                "newText": "TestReadLoopRules_Screen(${1:})",
                "insert": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                },
                "replace": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                }
            }
        },
        {
            "label": "TestReadLoopRules_SharingLoop",
            "kind": 3,
            "detail": "func(t *testing.T)",
            "sortText": "00035",
            "filterText": "TestReadLoopRules_SharingLoop",
            "insertTextFormat": 2,
            "textEdit": {
                "newText": "TestReadLoopRules_SharingLoop(${1:})",
                "insert": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                },
                "replace": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                }
            }
        },
        {
            "label": "TestReadLoopRules_Staff",
            "kind": 3,
            "detail": "func(t *testing.T)",
            "sortText": "00036",
            "filterText": "TestReadLoopRules_Staff",
            "insertTextFormat": 2,
            "textEdit": {
                "newText": "TestReadLoopRules_Staff(${1:})",
                "insert": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                },
                "replace": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                }
            }
        },
        {
            "label": "assertListDashboardsRepositoryOpts",
            "kind": 3,
            "detail": "func(t *testing.T, opts []database.DashboardLoaderOption)",
            "sortText": "00039",
            "filterText": "assertListDashboardsRepositoryOpts",
            "insertTextFormat": 2,
            "textEdit": {
                "newText": "assertListDashboardsRepositoryOpts(${1:})",
                "insert": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                },
                "replace": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                }
            }
        },
        {
            "label": "assertRootListDashboardsRepositoryOpts",
            "kind": 3,
            "detail": "func(t *testing.T, opts []database.DashboardLoaderOption)",
            "sortText": "00040",
            "filterText": "assertRootListDashboardsRepositoryOpts",
            "insertTextFormat": 2,
            "textEdit": {
                "newText": "assertRootListDashboardsRepositoryOpts(${1:})",
                "insert": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                },
                "replace": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                }
            }
        },
        {
            "label": "campusThatReturnsAnAdmin",
            "kind": 3,
            "detail": "func() *mockCampus",
            "sortText": "00041",
            "filterText": "campusThatReturnsAnAdmin",
            "insertTextFormat": 2,
            "textEdit": {
                "newText": "campusThatReturnsAnAdmin()",
                "insert": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                },
                "replace": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                }
            }
        },
        {
            "label": "canCreateDashboardRules",
            "kind": 3,
            "detail": "func() identity.AuthorizeRules",
            "sortText": "00042",
            "filterText": "canCreateDashboardRules",
            "insertTextFormat": 2,
            "textEdit": {
                "newText": "canCreateDashboardRules()",
                "insert": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                },
                "replace": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                }
            }
        },
        {
            "label": "canCreateFolderRules",
            "kind": 3,
            "detail": "func() identity.AuthorizeRules",
            "sortText": "00043",
            "filterText": "canCreateFolderRules",
            "insertTextFormat": 2,
            "textEdit": {
                "newText": "canCreateFolderRules()",
                "insert": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                },
                "replace": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                }
            }
        },
        {
            "label": "canCreateLoopRules",
            "kind": 3,
            "detail": "func() identity.AuthorizeRules",
            "sortText": "00044",
            "filterText": "canCreateLoopRules",
            "insertTextFormat": 2,
            "textEdit": {
                "newText": "canCreateLoopRules()",
                "insert": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                },
                "replace": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                }
            }
        },
        {
            "label": "canDeleteInstrumentRules",
            "kind": 3,
            "detail": "func() identity.AuthorizeRules",
            "sortText": "00045",
            "filterText": "canDeleteInstrumentRules",
            "insertTextFormat": 2,
            "textEdit": {
                "newText": "canDeleteInstrumentRules()",
                "insert": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                },
                "replace": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                }
            }
        },
        {
            "label": "canListDashboardExternalViewersRules",
            "kind": 3,
            "detail": "func(d *models.Dashboard) identity.AuthorizeRules",
            "sortText": "00046",
            "filterText": "canListDashboardExternalViewersRules",
            "insertTextFormat": 2,
            "textEdit": {
                "newText": "canListDashboardExternalViewersRules(${1:})",
                "insert": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                },
                "replace": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                }
            }
        },
        {
            "label": "canListDashboardRules",
            "kind": 3,
            "detail": "func() identity.AuthorizeRules",
            "sortText": "00047",
            "filterText": "canListDashboardRules",
            "insertTextFormat": 2,
            "textEdit": {
                "newText": "canListDashboardRules()",
                "insert": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                },
                "replace": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                }
            }
        },
        {
            "label": "canListLoopRules",
            "kind": 3,
            "detail": "func() identity.AuthorizeRules",
            "sortText": "00048",
            "filterText": "canListLoopRules",
            "insertTextFormat": 2,
            "textEdit": {
                "newText": "canListLoopRules()",
                "insert": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                },
                "replace": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                }
            }
        },
        {
            "label": "canListRootDashboardRules",
            "kind": 3,
            "detail": "func() identity.AuthorizeRules",
            "sortText": "00049",
            "filterText": "canListRootDashboardRules",
            "insertTextFormat": 2,
            "textEdit": {
                "newText": "canListRootDashboardRules()",
                "insert": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                },
                "replace": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                }
            }
        },
        {
            "label": "canManageExternalUsersDashboardsRules",
            "kind": 3,
            "detail": "func() identity.AuthorizeRules",
            "sortText": "00050",
            "filterText": "canManageExternalUsersDashboardsRules",
            "insertTextFormat": 2,
            "textEdit": {
                "newText": "canManageExternalUsersDashboardsRules()",
                "insert": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                },
                "replace": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                }
            }
        },
        {
            "label": "canPreAuthenticatedSharingLoopAccessDashboardRules",
            "kind": 3,
            "detail": "func(d *models.Dashboard) identity.AuthorizeRules",
            "documentation": {
                "kind": "markdown",
                "value": "canPreAuthenticatedSharingLoopAccessDashboardRules is used during construction of a sharing loop's identity token to work out which dashboards we can show to the client from their ip address\n"
            },
            "sortText": "00051",
            "filterText": "canPreAuthenticatedSharingLoopAccessDashboardRules",
            "insertTextFormat": 2,
            "textEdit": {
                "newText": "canPreAuthenticatedSharingLoopAccessDashboardRules(${1:})",
                "insert": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                },
                "replace": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                }
            }
        },
        {
            "label": "canReadDashboardRules",
            "kind": 3,
            "detail": "func(d *models.Dashboard) identity.AuthorizeRules",
            "sortText": "00052",
            "filterText": "canReadDashboardRules",
            "insertTextFormat": 2,
            "textEdit": {
                "newText": "canReadDashboardRules(${1:})",
                "insert": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                },
                "replace": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                }
            }
        },
        {
            "label": "canReadDashboardViewerships",
            "kind": 3,
            "detail": "func(orgID string, userID string) identity.AuthorizeRules",
            "sortText": "00053",
            "filterText": "canReadDashboardViewerships",
            "insertTextFormat": 2,
            "textEdit": {
                "newText": "canReadDashboardViewerships(${1:})",
                "insert": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                },
                "replace": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                }
            }
        },
        {
            "label": "canReadLoopRules",
            "kind": 3,
            "detail": "func(l *models.Loop) identity.AuthorizeRules",
            "sortText": "00054",
            "filterText": "canReadLoopRules",
            "insertTextFormat": 2,
            "textEdit": {
                "newText": "canReadLoopRules(${1:})",
                "insert": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                },
                "replace": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                }
            }
        },
        {
            "label": "canReadOrganizationUsagesRules",
            "kind": 3,
            "detail": "func() identity.AuthorizeRules",
            "sortText": "00055",
            "filterText": "canReadOrganizationUsagesRules",
            "insertTextFormat": 2,
            "textEdit": {
                "newText": "canReadOrganizationUsagesRules()",
                "insert": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                },
                "replace": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                }
            }
        },
        {
            "label": "canWriteDashboardRules",
            "kind": 3,
            "detail": "func(orgID string) identity.AuthorizeRules",
            "sortText": "00056",
            "filterText": "canWriteDashboardRules",
            "insertTextFormat": 2,
            "textEdit": {
                "newText": "canWriteDashboardRules(${1:})",
                "insert": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                },
                "replace": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                }
            }
        },
        {
            "label": "canWriteLoopRules",
            "kind": 3,
            "detail": "func(orgID string) identity.AuthorizeRules",
            "sortText": "00057",
            "filterText": "canWriteLoopRules",
            "insertTextFormat": 2,
            "textEdit": {
                "newText": "canWriteLoopRules(${1:})",
                "insert": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                },
                "replace": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                }
            }
        },
        {
            "label": "validateCreateLoopRequest",
            "kind": 3,
            "detail": "func(r *pb.CreateLoopRequest) error",
            "sortText": "00058",
            "filterText": "validateCreateLoopRequest",
            "insertTextFormat": 2,
            "textEdit": {
                "newText": "validateCreateLoopRequest(${1:})",
                "insert": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                },
                "replace": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                }
            }
        },
        {
            "label": "validateUpdateLoopRequest",
            "kind": 3,
            "detail": "func(r *pb.UpdateLoopRequest) error",
            "sortText": "00059",
            "filterText": "validateUpdateLoopRequest",
            "insertTextFormat": 2,
            "textEdit": {
                "newText": "validateUpdateLoopRequest(${1:})",
                "insert": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                },
                "replace": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                }
            }
        },
        {
            "label": "PusherEventNameRemoteRefreshDashboard",
            "kind": 21,
            "detail": "string",
            "sortText": "00060",
            "filterText": "PusherEventNameRemoteRefreshDashboard",
            "insertTextFormat": 2,
            "textEdit": {
                "newText": "PusherEventNameRemoteRefreshDashboard",
                "insert": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                },
                "replace": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                }
            }
        },
        {
            "label": "PusherEventNameRemoteRefreshLoop",
            "kind": 21,
            "detail": "string",
            "sortText": "00061",
            "filterText": "PusherEventNameRemoteRefreshLoop",
            "insertTextFormat": 2,
            "textEdit": {
                "newText": "PusherEventNameRemoteRefreshLoop",
                "insert": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                },
                "replace": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                }
            }
        },
        {
            "label": "TestCanManageDashboardsAndFolderRules",
            "kind": 3,
            "detail": "func(t *testing.T)",
            "sortText": "00062",
            "filterText": "TestCanManageDashboardsAndFolderRules",
            "insertTextFormat": 2,
            "textEdit": {
                "newText": "TestCanManageDashboardsAndFolderRules(${1:})",
                "insert": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                },
                "replace": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                }
            }
        },
        {
            "label": "TestCanPreAuthenticatedSharingLoopAccessDashboardRules",
            "kind": 3,
            "detail": "func(t *testing.T)",
            "sortText": "00063",
            "filterText": "TestCanPreAuthenticatedSharingLoopAccessDashboardRules",
            "insertTextFormat": 2,
            "textEdit": {
                "newText": "TestCanPreAuthenticatedSharingLoopAccessDashboardRules(${1:})",
                "insert": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                },
                "replace": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                }
            }
        },
        {
            "label": "TestCreateDashboardRules",
            "kind": 3,
            "detail": "func(t *testing.T)",
            "sortText": "00064",
            "filterText": "TestCreateDashboardRules",
            "insertTextFormat": 2,
            "textEdit": {
                "newText": "TestCreateDashboardRules(${1:})",
                "insert": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                },
                "replace": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                }
            }
        },
        {
            "label": "TestCreateFolderRules",
            "kind": 3,
            "detail": "func(t *testing.T)",
            "sortText": "00065",
            "filterText": "TestCreateFolderRules",
            "insertTextFormat": 2,
            "textEdit": {
                "newText": "TestCreateFolderRules(${1:})",
                "insert": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                },
                "replace": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                }
            }
        },
        {
            "label": "TestCreateInstrument_SetsAndReturnsCommonFields",
            "kind": 3,
            "detail": "func(t *testing.T)",
            "sortText": "00066",
            "filterText": "TestCreateInstrument_SetsAndReturnsCommonFields",
            "insertTextFormat": 2,
            "textEdit": {
                "newText": "TestCreateInstrument_SetsAndReturnsCommonFields(${1:})",
                "insert": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                },
                "replace": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                }
            }
        },
        {
            "label": "TestCreateInstrument_UpdateRecentConnections",
            "kind": 3,
            "detail": "func(t *testing.T)",
            "sortText": "00067",
            "filterText": "TestCreateInstrument_UpdateRecentConnections",
            "insertTextFormat": 2,
            "textEdit": {
                "newText": "TestCreateInstrument_UpdateRecentConnections(${1:})",
                "insert": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                },
                "replace": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                }
            }
        },
        {
            "label": "TestCreateLoopsRules",
            "kind": 3,
            "detail": "func(t *testing.T)",
            "sortText": "00068",
            "filterText": "TestCreateLoopsRules",
            "insertTextFormat": 2,
            "textEdit": {
                "newText": "TestCreateLoopsRules(${1:})",
                "insert": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                },
                "replace": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                }
            }
        },
        {
            "label": "TestListDashboardsRules",
            "kind": 3,
            "detail": "func(t *testing.T)",
            "sortText": "00069",
            "filterText": "TestListDashboardsRules",
            "insertTextFormat": 2,
            "textEdit": {
                "newText": "TestListDashboardsRules(${1:})",
                "insert": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                },
                "replace": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                }
            }
        },
        {
            "label": "TestListLoopsRules",
            "kind": 3,
            "detail": "func(t *testing.T)",
            "sortText": "00070",
            "filterText": "TestListLoopsRules",
            "insertTextFormat": 2,
            "textEdit": {
                "newText": "TestListLoopsRules(${1:})",
                "insert": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                },
                "replace": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                }
            }
        },
        {
            "label": "TestListRecentIntegrations_EmptyValues",
            "kind": 3,
            "detail": "func(t *testing.T)",
            "sortText": "00071",
            "filterText": "TestListRecentIntegrations_EmptyValues",
            "insertTextFormat": 2,
            "textEdit": {
                "newText": "TestListRecentIntegrations_EmptyValues(${1:})",
                "insert": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                },
                "replace": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                }
            }
        },
        {
            "label": "TestListRecentIntegrations_Errors",
            "kind": 3,
            "detail": "func(t *testing.T)",
            "sortText": "00072",
            "filterText": "TestListRecentIntegrations_Errors",
            "insertTextFormat": 2,
            "textEdit": {
                "newText": "TestListRecentIntegrations_Errors(${1:})",
                "insert": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                },
                "replace": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                }
            }
        },
        {
            "label": "TestListRecentIntegrations_MultipleDashboardsAndInstruments",
            "kind": 3,
            "detail": "func(t *testing.T)",
            "sortText": "00073",
            "filterText": "TestListRecentIntegrations_MultipleDashboardsAndInstruments",
            "insertTextFormat": 2,
            "textEdit": {
                "newText": "TestListRecentIntegrations_MultipleDashboardsAndInstruments(${1:})",
                "insert": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                },
                "replace": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                }
            }
        },
        {
            "label": "TestListRecentIntegrations_MultipleInstruments",
            "kind": 3,
            "detail": "func(t *testing.T)",
            "sortText": "00074",
            "filterText": "TestListRecentIntegrations_MultipleInstruments",
            "insertTextFormat": 2,
            "textEdit": {
                "newText": "TestListRecentIntegrations_MultipleInstruments(${1:})",
                "insert": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                },
                "replace": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                }
            }
        },
        {
            "label": "TestListRecentIntegrations_OneInstrument",
            "kind": 3,
            "detail": "func(t *testing.T)",
            "sortText": "00075",
            "filterText": "TestListRecentIntegrations_OneInstrument",
            "insertTextFormat": 2,
            "textEdit": {
                "newText": "TestListRecentIntegrations_OneInstrument(${1:})",
                "insert": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                },
                "replace": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                }
            }
        },
        {
            "label": "TestListRootDashboardsRules",
            "kind": 3,
            "detail": "func(t *testing.T)",
            "sortText": "00076",
            "filterText": "TestListRootDashboardsRules",
            "insertTextFormat": 2,
            "textEdit": {
                "newText": "TestListRootDashboardsRules(${1:})",
                "insert": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                },
                "replace": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                }
            }
        },
        {
            "label": "TestNotfiyDashboardToRefresh",
            "kind": 3,
            "detail": "func(t *testing.T)",
            "sortText": "00077",
            "filterText": "TestNotfiyDashboardToRefresh",
            "insertTextFormat": 2,
            "textEdit": {
                "newText": "TestNotfiyDashboardToRefresh(${1:})",
                "insert": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                },
                "replace": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                }
            }
        },
        {
            "label": "TestNotfiyDashboardToRefresh_Errors",
            "kind": 3,
            "detail": "func(t *testing.T)",
            "sortText": "00078",
            "filterText": "TestNotfiyDashboardToRefresh_Errors",
            "insertTextFormat": 2,
            "textEdit": {
                "newText": "TestNotfiyDashboardToRefresh_Errors(${1:})",
                "insert": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                },
                "replace": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                }
            }
        },
        {
            "label": "TestNotfiyLoopToRefresh",
            "kind": 3,
            "detail": "func(t *testing.T)",
            "sortText": "00079",
            "filterText": "TestNotfiyLoopToRefresh",
            "insertTextFormat": 2,
            "textEdit": {
                "newText": "TestNotfiyLoopToRefresh(${1:})",
                "insert": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                },
                "replace": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                }
            }
        },
        {
            "label": "TestNotfiyLoopToRefresh_Errors",
            "kind": 3,
            "detail": "func(t *testing.T)",
            "sortText": "00080",
            "filterText": "TestNotfiyLoopToRefresh_Errors",
            "insertTextFormat": 2,
            "textEdit": {
                "newText": "TestNotfiyLoopToRefresh_Errors(${1:})",
                "insert": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                },
                "replace": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                }
            }
        },
        {
            "label": "TestReadDashboardRules_APIKey",
            "kind": 3,
            "detail": "func(t *testing.T)",
            "sortText": "00081",
            "filterText": "TestReadDashboardRules_APIKey",
            "insertTextFormat": 2,
            "textEdit": {
                "newText": "TestReadDashboardRules_APIKey(${1:})",
                "insert": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                },
                "replace": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                }
            }
        },
        {
            "label": "TestReadDashboardRules_Agent",
            "kind": 3,
            "detail": "func(t *testing.T)",
            "sortText": "00082",
            "filterText": "TestReadDashboardRules_Agent",
            "insertTextFormat": 2,
            "textEdit": {
                "newText": "TestReadDashboardRules_Agent(${1:})",
                "insert": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                },
                "replace": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                }
            }
        },
        {
            "label": "TestReadDashboardRules_ExternalUser",
            "kind": 3,
            "detail": "func(t *testing.T)",
            "sortText": "00083",
            "filterText": "TestReadDashboardRules_ExternalUser",
            "insertTextFormat": 2,
            "textEdit": {
                "newText": "TestReadDashboardRules_ExternalUser(${1:})",
                "insert": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                },
                "replace": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                }
            }
        },
        {
            "label": "TestReadDashboardRules_User",
            "kind": 3,
            "detail": "func(t *testing.T)",
            "sortText": "00084",
            "filterText": "TestReadDashboardRules_User",
            "insertTextFormat": 2,
            "textEdit": {
                "newText": "TestReadDashboardRules_User(${1:})",
                "insert": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                },
                "replace": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                }
            }
        },
        {
            "label": "TestReadLoopRules_Agent",
            "kind": 3,
            "detail": "func(t *testing.T)",
            "sortText": "00085",
            "filterText": "TestReadLoopRules_Agent",
            "insertTextFormat": 2,
            "textEdit": {
                "newText": "TestReadLoopRules_Agent(${1:})",
                "insert": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                },
                "replace": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                }
            }
        },
        {
            "label": "TestReadLoopRules_User",
            "kind": 3,
            "detail": "func(t *testing.T)",
            "sortText": "00086",
            "filterText": "TestReadLoopRules_User",
            "insertTextFormat": 2,
            "textEdit": {
                "newText": "TestReadLoopRules_User(${1:})",
                "insert": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                },
                "replace": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                }
            }
        },
        {
            "label": "TestRevertDashboardLayout",
            "kind": 3,
            "detail": "func(t *testing.T)",
            "sortText": "00087",
            "filterText": "TestRevertDashboardLayout",
            "insertTextFormat": 2,
            "textEdit": {
                "newText": "TestRevertDashboardLayout(${1:})",
                "insert": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                },
                "replace": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                }
            }
        },
        {
            "label": "TestWriteDashboardRules",
            "kind": 3,
            "detail": "func(t *testing.T)",
            "sortText": "00088",
            "filterText": "TestWriteDashboardRules",
            "insertTextFormat": 2,
            "textEdit": {
                "newText": "TestWriteDashboardRules(${1:})",
                "insert": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                },
                "replace": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                }
            }
        },
        {
            "label": "TestWriteLoopRules_User",
            "kind": 3,
            "detail": "func(t *testing.T)",
            "sortText": "00089",
            "filterText": "TestWriteLoopRules_User",
            "insertTextFormat": 2,
            "textEdit": {
                "newText": "TestWriteLoopRules_User(${1:})",
                "insert": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                },
                "replace": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                }
            }
        },
        {
            "label": "presentation",
            "kind": 9,
            "detail": "\"github.com/gb/roadie/presentation\"",
            "sortText": "00092",
            "filterText": "presentation",
            "insertTextFormat": 2,
            "textEdit": {
                "newText": "presentation",
                "insert": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                },
                "replace": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                }
            }
        },
        {
            "label": "presentationmock",
            "kind": 9,
            "detail": "\"github.com/gb/roadie/presentation/presentationmock\"",
            "sortText": "00093",
            "filterText": "presentationmock",
            "insertTextFormat": 2,
            "textEdit": {
                "newText": "presentationmock",
                "insert": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                },
                "replace": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                }
            }
        },
        {
            "label": "TestCopyInstrumentToDashboard_Failures",
            "kind": 3,
            "detail": "func(t *testing.T)",
            "sortText": "00094",
            "filterText": "TestCopyInstrumentToDashboard_Failures",
            "insertTextFormat": 2,
            "textEdit": {
                "newText": "TestCopyInstrumentToDashboard_Failures(${1:})",
                "insert": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                },
                "replace": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                }
            }
        },
        {
            "label": "TestCopyInstrumentToDashboard_Success_Status_Progress",
            "kind": 3,
            "detail": "func(t *testing.T)",
            "sortText": "00095",
            "filterText": "TestCopyInstrumentToDashboard_Success_Status_Progress",
            "insertTextFormat": 2,
            "textEdit": {
                "newText": "TestCopyInstrumentToDashboard_Success_Status_Progress(${1:})",
                "insert": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                },
                "replace": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                }
            }
        },
        {
            "label": "TestDeleteInstrument_Failures",
            "kind": 3,
            "detail": "func(t *testing.T)",
            "documentation": {
                "kind": "markdown",
                "value": "TestDeleteInstrument\\_Failures tests how repository failures are handled by the server handler. We need mocks to generate errors.\n"
            },
            "sortText": "00096",
            "filterText": "TestDeleteInstrument_Failures",
            "insertTextFormat": 2,
            "textEdit": {
                "newText": "TestDeleteInstrument_Failures(${1:})",
                "insert": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                },
                "replace": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                }
            }
        },
        {
            "label": "TestDuplicateInstrument_Success_Status_Progress",
            "kind": 3,
            "detail": "func(t *testing.T)",
            "sortText": "00097",
            "filterText": "TestDuplicateInstrument_Success_Status_Progress",
            "insertTextFormat": 2,
            "textEdit": {
                "newText": "TestDuplicateInstrument_Success_Status_Progress(${1:})",
                "insert": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                },
                "replace": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                }
            }
        },
        {
            "label": "TestGRPCServer_GetDashboardIDsForExternalViewers_Failures",
            "kind": 3,
            "detail": "func(t *testing.T)",
            "sortText": "00098",
            "filterText": "TestGRPCServer_GetDashboardIDsForExternalViewers_Failures",
            "insertTextFormat": 2,
            "textEdit": {
                "newText": "TestGRPCServer_GetDashboardIDsForExternalViewers_Failures(${1:})",
                "insert": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                },
                "replace": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                }
            }
        },
        {
            "label": "TestGetInstrumentByLegacyKey_Failures",
            "kind": 3,
            "detail": "func(t *testing.T)",
            "sortText": "00099",
            "filterText": "TestGetInstrumentByLegacyKey_Failures",
            "insertTextFormat": 2,
            "textEdit": {
                "newText": "TestGetInstrumentByLegacyKey_Failures(${1:})",
                "insert": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                },
                "replace": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                }
            }
        },
        {
            "label": "TestGetOrCreateDefaultDashboard_Failures",
            "kind": 3,
            "detail": "func(t *testing.T)",
            "sortText": "00100",
            "filterText": "TestGetOrCreateDefaultDashboard_Failures",
            "insertTextFormat": 2,
            "textEdit": {
                "newText": "TestGetOrCreateDefaultDashboard_Failures(${1:})",
                "insert": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                },
                "replace": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                }
            }
        },
        {
            "label": "TestUpdateInstrument_Failures",
            "kind": 3,
            "detail": "func(t *testing.T)",
            "sortText": "00101",
            "filterText": "TestUpdateInstrument_Failures",
            "insertTextFormat": 2,
            "textEdit": {
                "newText": "TestUpdateInstrument_Failures(${1:})",
                "insert": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                },
                "replace": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                }
            }
        },
        {
            "label": "TestUpdateInstrument_Success_ProgressIndicator",
            "kind": 3,
            "detail": "func(t *testing.T)",
            "sortText": "00102",
            "filterText": "TestUpdateInstrument_Success_ProgressIndicator",
            "insertTextFormat": 2,
            "textEdit": {
                "newText": "TestUpdateInstrument_Success_ProgressIndicator(${1:})",
                "insert": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                },
                "replace": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                }
            }
        },
        {
            "label": "Test_DeleteInstrumentsByDatabaseConnectionID_Failures",
            "kind": 3,
            "detail": "func(t *testing.T)",
            "sortText": "00103",
            "filterText": "Test_DeleteInstrumentsByDatabaseConnectionID_Failures",
            "insertTextFormat": 2,
            "textEdit": {
                "newText": "Test_DeleteInstrumentsByDatabaseConnectionID_Failures(${1:})",
                "insert": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                },
                "replace": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                }
            }
        },
        {
            "label": "Test_DeleteInstrumentsByIntegrationConnectionID_Failures",
            "kind": 3,
            "detail": "func(t *testing.T)",
            "sortText": "00104",
            "filterText": "Test_DeleteInstrumentsByIntegrationConnectionID_Failures",
            "insertTextFormat": 2,
            "textEdit": {
                "newText": "Test_DeleteInstrumentsByIntegrationConnectionID_Failures(${1:})",
                "insert": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                },
                "replace": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                }
            }
        },
        {
            "label": "Test_GetOrganizationUsages_Failures",
            "kind": 3,
            "detail": "func(t *testing.T)",
            "sortText": "00105",
            "filterText": "Test_GetOrganizationUsages_Failures",
            "insertTextFormat": 2,
            "textEdit": {
                "newText": "Test_GetOrganizationUsages_Failures(${1:})",
                "insert": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                },
                "replace": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                }
            }
        },
        {
            "label": "Test_SetDashboardViewerships_Failures",
            "kind": 3,
            "detail": "func(t *testing.T)",
            "sortText": "00106",
            "filterText": "Test_SetDashboardViewerships_Failures",
            "insertTextFormat": 2,
            "textEdit": {
                "newText": "Test_SetDashboardViewerships_Failures(${1:})",
                "insert": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                },
                "replace": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                }
            }
        }
    ]
}


[Trace - 15:02:32] Sending request 'textDocument/foldingRange - (343)'.
Params: {
    "textDocument": {
        "uri": "file:///Users/ian/src/roadie/server/create_parameterized_dashboard_test.go"
    }
}


[Trace - 15:02:32] Received response 'textDocument/foldingRange - (343)' in 0ms.
Result: [
    {
        "startLine": 2,
        "startCharacter": 8,
        "endLine": 26,
        "endCharacter": 25,
        "kind": "imports"
    },
    {
        "startLine": 29,
        "startCharacter": 54,
        "endLine": 405,
        "endCharacter": 3
    },
    {
        "startLine": 33,
        "startCharacter": 49,
        "endLine": 35,
        "endCharacter": 39
    },
    {
        "startLine": 38,
        "startCharacter": 121,
        "endLine": 113,
        "endCharacter": 3
    },
    {
        "startLine": 39,
        "startCharacter": 19,
        "endLine": 45,
        "endCharacter": 44
    },
    {
        "startLine": 48,
        "startCharacter": 53,
        "endLine": 57,
        "endCharacter": 5
    },
    {
        "startLine": 51,
        "startCharacter": 40,
        "endLine": 56,
        "endCharacter": 34
    },
    {
        "startLine": 65,
        "startCharacter": 17,
        "endLine": 79,
        "endCharacter": 31
    },
    {
        "startLine": 68,
        "startCharacter": 46,
        "endLine": 69,
        "endCharacter": 44
    },
    {
        "startLine": 72,
        "startCharacter": 41,
        "endLine": 77,
        "endCharacter": 35
    },
    {
        "startLine": 86,
        "startCharacter": 66,
        "endLine": 87,
        "endCharacter": 71,
        "kind": "comment"
    },
    {
        "startLine": 88,
        "startCharacter": 61,
        "endLine": 89,
        "endCharacter": 39
    },
    {
        "startLine": 93,
        "startCharacter": 44,
        "endLine": 109,
        "endCharacter": 48
    },
    {
        "startLine": 97,
        "startCharacter": 45,
        "endLine": 98,
        "endCharacter": 43
    },
    {
        "startLine": 101,
        "startCharacter": 40,
        "endLine": 106,
        "endCharacter": 30
    },
    {
        "startLine": 116,
        "startCharacter": 95,
        "endLine": 182,
        "endCharacter": 3
    },
    {
        "startLine": 117,
        "startCharacter": 19,
        "endLine": 123,
        "endCharacter": 44
    },
    {
        "startLine": 128,
        "startCharacter": 62,
        "endLine": 129,
        "endCharacter": 16,
        "kind": "comment"
    },
    {
        "startLine": 130,
        "startCharacter": 53,
        "endLine": 139,
        "endCharacter": 5
    },
    {
        "startLine": 133,
        "startCharacter": 40,
        "endLine": 138,
        "endCharacter": 34
    },
    {
        "startLine": 146,
        "startCharacter": 52,
        "endLine": 157,
        "endCharacter": 5
    },
    {
        "startLine": 149,
        "startCharacter": 40,
        "endLine": 156,
        "endCharacter": 31
    },
    {
        "startLine": 152,
        "startCharacter": 59,
        "endLine": 153,
        "endCharacter": 46,
        "kind": "comment"
    },
    {
        "startLine": 163,
        "startCharacter": 17,
        "endLine": 178,
        "endCharacter": 31
    },
    {
        "startLine": 166,
        "startCharacter": 46,
        "endLine": 167,
        "endCharacter": 44
    },
    {
        "startLine": 171,
        "startCharacter": 41,
        "endLine": 176,
        "endCharacter": 35
    },
    {
        "startLine": 185,
        "startCharacter": 37,
        "endLine": 404,
        "endCharacter": 3
    },
    {
        "startLine": 187,
        "startCharacter": 53,
        "endLine": 195,
        "endCharacter": 5
    },
    {
        "startLine": 189,
        "startCharacter": 40,
        "endLine": 194,
        "endCharacter": 34
    },
    {
        "startLine": 199,
        "startCharacter": 21,
        "endLine": 205,
        "endCharacter": 19
    },
    {
        "startLine": 206,
        "startCharacter": 4,
        "endLine": 388,
        "endCharacter": 5
    },
    {
        "startLine": 207,
        "startCharacter": 4,
        "endLine": 216,
        "endCharacter": 63
    },
    {
        "startLine": 209,
        "startCharacter": 27,
        "endLine": 211,
        "endCharacter": 18
    },
    {
        "startLine": 218,
        "startCharacter": 4,
        "endLine": 226,
        "endCharacter": 78
    },
    {
        "startLine": 222,
        "startCharacter": 35,
        "endLine": 223,
        "endCharacter": 45
    },
    {
        "startLine": 228,
        "startCharacter": 4,
        "endLine": 240,
        "endCharacter": 82
    },
    {
        "startLine": 230,
        "startCharacter": 45,
        "endLine": 231,
        "endCharacter": 24
    },
    {
        "startLine": 235,
        "startCharacter": 36,
        "endLine": 236,
        "endCharacter": 43
    },
    {
        "startLine": 242,
        "startCharacter": 4,
        "endLine": 255,
        "endCharacter": 93
    },
    {
        "startLine": 247,
        "startCharacter": 36,
        "endLine": 251,
        "endCharacter": 8
    },
    {
        "startLine": 249,
        "startCharacter": 79,
        "endLine": 250,
        "endCharacter": 38
    },
    {
        "startLine": 257,
        "startCharacter": 4,
        "endLine": 275,
        "endCharacter": 83
    },
    {
        "startLine": 262,
        "startCharacter": 36,
        "endLine": 271,
        "endCharacter": 8
    },
    {
        "startLine": 264,
        "startCharacter": 79,
        "endLine": 270,
        "endCharacter": 17
    },
    {
        "startLine": 265,
        "startCharacter": 36,
        "endLine": 266,
        "endCharacter": 39
    },
    {
        "startLine": 277,
        "startCharacter": 4,
        "endLine": 295,
        "endCharacter": 70
    },
    {
        "startLine": 282,
        "startCharacter": 36,
        "endLine": 287,
        "endCharacter": 8
    },
    {
        "startLine": 284,
        "startCharacter": 79,
        "endLine": 286,
        "endCharacter": 17
    },
    {
        "startLine": 290,
        "startCharacter": 32,
        "endLine": 293,
        "endCharacter": 7
    },
    {
        "startLine": 291,
        "startCharacter": 73,
        "endLine": 292,
        "endCharacter": 65
    },
    {
        "startLine": 297,
        "startCharacter": 4,
        "endLine": 324,
        "endCharacter": 73
    },
    {
        "startLine": 300,
        "startCharacter": 44,
        "endLine": 309,
        "endCharacter": 7
    },
    {
        "startLine": 303,
        "startCharacter": 42,
        "endLine": 308,
        "endCharacter": 36
    },
    {
        "startLine": 312,
        "startCharacter": 36,
        "endLine": 320,
        "endCharacter": 8
    },
    {
        "startLine": 314,
        "startCharacter": 79,
        "endLine": 316,
        "endCharacter": 17
    },
    {
        "startLine": 318,
        "startCharacter": 129,
        "endLine": 319,
        "endCharacter": 43
    },
    {
        "startLine": 326,
        "startCharacter": 4,
        "endLine": 354,
        "endCharacter": 114
    },
    {
        "startLine": 329,
        "startCharacter": 44,
        "endLine": 338,
        "endCharacter": 7
    },
    {
        "startLine": 332,
        "startCharacter": 42,
        "endLine": 337,
        "endCharacter": 36
    },
    {
        "startLine": 341,
        "startCharacter": 36,
        "endLine": 350,
        "endCharacter": 8
    },
    {
        "startLine": 343,
        "startCharacter": 79,
        "endLine": 345,
        "endCharacter": 17
    },
    {
        "startLine": 347,
        "startCharacter": 129,
        "endLine": 349,
        "endCharacter": 38
    },
    {
        "startLine": 357,
        "startCharacter": 4,
        "endLine": 387,
        "endCharacter": 114
    },
    {
        "startLine": 360,
        "startCharacter": 44,
        "endLine": 369,
        "endCharacter": 7
    },
    {
        "startLine": 363,
        "startCharacter": 42,
        "endLine": 368,
        "endCharacter": 36
    },
    {
        "startLine": 372,
        "startCharacter": 36,
        "endLine": 383,
        "endCharacter": 8
    },
    {
        "startLine": 374,
        "startCharacter": 79,
        "endLine": 376,
        "endCharacter": 17
    },
    {
        "startLine": 378,
        "startCharacter": 129,
        "endLine": 382,
        "endCharacter": 13
    },
    {
        "startLine": 379,
        "startCharacter": 32,
        "endLine": 381,
        "endCharacter": 54
    },
    {
        "startLine": 391,
        "startCharacter": 30,
        "endLine": 403,
        "endCharacter": 5
    },
    {
        "startLine": 392,
        "startCharacter": 40,
        "endLine": 402,
        "endCharacter": 0
    },
    {
        "startLine": 393,
        "startCharacter": 21,
        "endLine": 396,
        "endCharacter": 48
    }
]


[Trace - 15:02:32] Sending request 'textDocument/documentSymbol - (344)'.
Params: {
    "textDocument": {
        "uri": "file:///Users/ian/src/roadie/server/create_parameterized_dashboard_test.go"
    }
}


[Trace - 15:02:32] Sending request 'textDocument/documentSymbol - (345)'.
Params: {
    "textDocument": {
        "uri": "file:///Users/ian/src/roadie/server/create_parameterized_dashboard_test.go"
    }
}


[Trace - 15:02:32] Sending request 'textDocument/documentSymbol - (346)'.
Params: {
    "textDocument": {
        "uri": "file:///Users/ian/src/roadie/server/create_parameterized_dashboard_test.go"
    }
}


[Trace - 15:02:32] Sending request 'textDocument/codeLens - (347)'.
Params: {
    "textDocument": {
        "uri": "file:///Users/ian/src/roadie/server/create_parameterized_dashboard_test.go"
    }
}


[Trace - 15:02:32] Sending request 'textDocument/codeAction - (348)'.
Params: {
    "textDocument": {
        "uri": "file:///Users/ian/src/roadie/server/create_parameterized_dashboard_test.go"
    },
    "range": {
        "start": {
            "line": 143,
            "character": 3
        },
        "end": {
            "line": 143,
            "character": 3
        }
    },
    "context": {
        "diagnostics": [
            {
                "range": {
                    "start": {
                        "line": 143,
                        "character": 0
                    },
                    "end": {
                        "line": 143,
                        "character": 3
                    }
                },
                "message": "undefined: res",
                "code": "UndeclaredName",
                "codeDescription": {
                    "href": "https://pkg.go.dev/golang.org/x/tools/internal/typesinternal#UndeclaredName"
                },
                "severity": 1,
                "source": "compiler"
            }
        ],
        "triggerKind": 1
    }
}


[Trace - 15:02:32] Sending request 'textDocument/documentSymbol - (349)'.
Params: {
    "textDocument": {
        "uri": "file:///Users/ian/src/roadie/server/create_parameterized_dashboard_test.go"
    }
}


[Trace - 15:02:32] Received response 'textDocument/documentSymbol - (344)' in 1ms.
Result: [
    {
        "name": "Test_CreateParameterizedDashboard",
        "detail": "func(t *testing.T)",
        "kind": 12,
        "range": {
            "start": {
                "line": 29,
                "character": 0
            },
            "end": {
                "line": 406,
                "character": 1
            }
        },
        "selectionRange": {
            "start": {
                "line": 29,
                "character": 5
            },
            "end": {
                "line": 29,
                "character": 38
            }
        }
    }
]


[Trace - 15:02:32] Received response 'textDocument/documentSymbol - (345)' in 1ms.
Result: [
    {
        "name": "Test_CreateParameterizedDashboard",
        "detail": "func(t *testing.T)",
        "kind": 12,
        "range": {
            "start": {
                "line": 29,
                "character": 0
            },
            "end": {
                "line": 406,
                "character": 1
            }
        },
        "selectionRange": {
            "start": {
                "line": 29,
                "character": 5
            },
            "end": {
                "line": 29,
                "character": 38
            }
        }
    }
]


[Trace - 15:02:32] Sending request 'workspace/executeCommand - (350)'.
Params: {
    "command": "gopls.list_imports",
    "arguments": [
        {
            "URI": "file:///Users/ian/src/roadie/server/create_parameterized_dashboard_test.go"
        }
    ]
}


[Trace - 15:02:32] Received response 'textDocument/documentSymbol - (346)' in 1ms.
Result: [
    {
        "name": "Test_CreateParameterizedDashboard",
        "detail": "func(t *testing.T)",
        "kind": 12,
        "range": {
            "start": {
                "line": 29,
                "character": 0
            },
            "end": {
                "line": 406,
                "character": 1
            }
        },
        "selectionRange": {
            "start": {
                "line": 29,
                "character": 5
            },
            "end": {
                "line": 29,
                "character": 38
            }
        }
    }
]


[Trace - 15:02:32] Received response 'textDocument/codeLens - (347)' in 1ms.
No result returned.


[Trace - 15:02:32] Received response 'textDocument/codeAction - (348)' in 1ms.
Result: [
    {
        "title": "Create variable res",
        "kind": "quickfix",
        "data": {
            "title": "Create variable res",
            "command": "gopls.apply_fix",
            "arguments": [
                {
                    "Fix": "create_undeclared",
                    "Location": {
                        "uri": "file:///Users/ian/src/roadie/server/create_parameterized_dashboard_test.go",
                        "range": {
                            "start": {
                                "line": 143,
                                "character": 3
                            },
                            "end": {
                                "line": 143,
                                "character": 3
                            }
                        }
                    },
                    "ResolveEdits": true
                }
            ]
        }
    },
    {
        "title": "Browse arm64 assembly for Test_CreateParameterizedDashboard",
        "kind": "source.assembly",
        "command": {
            "title": "Browse arm64 assembly for Test_CreateParameterizedDashboard",
            "command": "gopls.assembly",
            "arguments": [
                "1",
                "github.com/gb/roadie/server [github.com/gb/roadie/server.test]",
                "github.com/gb/roadie/server.Test_CreateParameterizedDashboard"
            ]
        }
    },
    {
        "title": "Browse documentation for func Test_CreateParameterizedDashboard",
        "kind": "source.doc",
        "command": {
            "title": "Browse documentation for func Test_CreateParameterizedDashboard",
            "command": "gopls.doc",
            "arguments": [
                {
                    "Location": {
                        "uri": "file:///Users/ian/src/roadie/server/create_parameterized_dashboard_test.go",
                        "range": {
                            "start": {
                                "line": 143,
                                "character": 3
                            },
                            "end": {
                                "line": 143,
                                "character": 3
                            }
                        }
                    },
                    "ShowDocument": true
                }
            ]
        }
    },
    {
        "title": "Split package \"server\"",
        "kind": "source.splitPackage",
        "command": {
            "title": "Split package \"server\"",
            "command": "gopls.split_package",
            "arguments": [
                "1",
                "github.com/gb/roadie/server [github.com/gb/roadie/server.test]"
            ]
        }
    },
    {
        "title": "Show compiler optimization details for \"server\"",
        "kind": "source.toggleCompilerOptDetails",
        "command": {
            "title": "Show compiler optimization details for \"server\"",
            "command": "gopls.gc_details",
            "arguments": [
                "file:///Users/ian/src/roadie/server/create_parameterized_dashboard_test.go"
            ]
        }
    },
    {
        "title": "Browse gopls feature documentation",
        "kind": "gopls.doc.features",
        "command": {
            "title": "Browse gopls feature documentation",
            "command": "gopls.client_open_url",
            "arguments": [
                "https://github.com/golang/tools/blob/master/gopls/doc/features/index.md"
            ]
        }
    }
]


[Trace - 15:02:32] Received response 'textDocument/documentSymbol - (349)' in 2ms.
Result: [
    {
        "name": "Test_CreateParameterizedDashboard",
        "detail": "func(t *testing.T)",
        "kind": 12,
        "range": {
            "start": {
                "line": 29,
                "character": 0
            },
            "end": {
                "line": 406,
                "character": 1
            }
        },
        "selectionRange": {
            "start": {
                "line": 29,
                "character": 5
            },
            "end": {
                "line": 29,
                "character": 38
            }
        }
    }
]


[Trace - 15:02:32] Sending request 'codeAction/resolve - (351)'.
Params: {
    "title": "Create variable res",
    "data": {
        "title": "Create variable res",
        "command": "gopls.apply_fix",
        "arguments": [
            {
                "Fix": "create_undeclared",
                "Location": {
                    "uri": "file:///Users/ian/src/roadie/server/create_parameterized_dashboard_test.go",
                    "range": {
                        "start": {
                            "line": 143,
                            "character": 3
                        },
                        "end": {
                            "line": 143,
                            "character": 3
                        }
                    }
                },
                "ResolveEdits": true
            }
        ]
    },
    "kind": "quickfix"
}


[Trace - 15:02:32] Received response 'workspace/executeCommand - (350)' in 1ms.
Result: {
    "Imports": [
        {
            "Path": "context",
            "Name": ""
        },
        {
            "Path": "errors",
            "Name": ""
        },
        {
            "Path": "net",
            "Name": ""
        },
        {
            "Path": "testing",
            "Name": ""
        },
        {
            "Path": "github.com/gb/agora/queue/mocks",
            "Name": "agoramocks"
        },
        {
            "Path": "github.com/gb/goutils/database/driver",
            "Name": ""
        },
        {
            "Path": "github.com/gb/goutils/featureflags/featureflagtest",
            "Name": ""
        },
        {
            "Path": "github.com/gb/identity/authorizer",
            "Name": ""
        },
        {
            "Path": "github.com/gb/identity/identity",
            "Name": ""
        },
        {
            "Path": "github.com/gb/identity/principal",
            "Name": ""
        },
        {
            "Path": "github.com/gb/roadie/database",
            "Name": ""
        },
        {
            "Path": "github.com/gb/roadie/database/mocks",
            "Name": ""
        },
        {
            "Path": "github.com/gb/roadie/mapping",
            "Name": ""
        },
        {
            "Path": "github.com/gb/roadie/models",
            "Name": ""
        },
        {
            "Path": "github.com/gb/roadie/presentation",
            "Name": ""
        },
        {
            "Path": "github.com/gb/roadie/presentation/presentationmock",
            "Name": ""
        },
        {
            "Path": "github.com/gb/roadie/roadiepb",
            "Name": "pb"
        },
        {
            "Path": "github.com/gb/roadie/testutil",
            "Name": ""
        },
        {
            "Path": "github.com/google/go-cmp/cmp/cmpopts",
            "Name": ""
        },
        {
            "Path": "github.com/volatiletech/null/v8",
            "Name": ""
        },
        {
            "Path": "google.golang.org/grpc/codes",
            "Name": ""
        },
        {
            "Path": "google.golang.org/grpc/status",
            "Name": ""
        },
        {
            "Path": "gotest.tools/v3/assert",
            "Name": ""
        }
    ],
    "PackageImports": [
        {
            "Path": "context"
        },
        {
            "Path": "crypto/rand"
        },
        {
            "Path": "database/sql"
        },
        {
            "Path": "errors"
        },
        {
            "Path": "fmt"
        },
        {
            "Path": "github.com/aws/aws-sdk-go/aws"
        },
        {
            "Path": "github.com/aws/aws-sdk-go/aws/awserr"
        },
        {
            "Path": "github.com/aws/aws-sdk-go/aws/request"
        },
        {
            "Path": "github.com/aws/aws-sdk-go/service/s3"
        },
        {
            "Path": "github.com/aws/aws-sdk-go/service/s3/s3iface"
        },
        {
            "Path": "github.com/bugsnag/bugsnag-go"
        },
        {
            "Path": "github.com/bugsnag/bugsnag-go/errors"
        },
        {
            "Path": "github.com/gb/agora/queue/event"
        },
        {
            "Path": "github.com/gb/agora/queue/mocks"
        },
        {
            "Path": "github.com/gb/campus/campuspb"
        },
        {
            "Path": "github.com/gb/clerk/clerkpb"
        },
        {
            "Path": "github.com/gb/go-grpc-middleware/middleware"
        },
        {
            "Path": "github.com/gb/goutils/bugsnagutils/bugsnagtest"
        },
        {
            "Path": "github.com/gb/goutils/database/driver"
        },
        {
            "Path": "github.com/gb/goutils/database/driver/mocks"
        },
        {
            "Path": "github.com/gb/goutils/featureflags"
        },
        {
            "Path": "github.com/gb/goutils/featureflags/featureflagtest"
        },
        {
            "Path": "github.com/gb/goutils/globalfinderpb"
        },
        {
            "Path": "github.com/gb/goutils/globalfinderpb/globalfindertestutil"
        },
        {
            "Path": "github.com/gb/goutils/log"
        },
        {
            "Path": "github.com/gb/goutils/testhelp"
        },
        {
            "Path": "github.com/gb/goutils/vault"
        },
        {
            "Path": "github.com/gb/goutils/vault/mocks"
        },
        {
            "Path": "github.com/gb/identity/authorization"
        },
        {
            "Path": "github.com/gb/identity/authorizer"
        },
        {
            "Path": "github.com/gb/identity/grpcauthz"
        },
        {
            "Path": "github.com/gb/identity/identity"
        },
        {
            "Path": "github.com/gb/identity/principal"
        },
        {
            "Path": "github.com/gb/roadie/database"
        },
        {
            "Path": "github.com/gb/roadie/database/dbmock"
        },
        {
            "Path": "github.com/gb/roadie/database/mocks"
        },
        {
            "Path": "github.com/gb/roadie/event"
        },
        {
            "Path": "github.com/gb/roadie/integrations"
        },
        {
            "Path": "github.com/gb/roadie/mapping"
        },
        {
            "Path": "github.com/gb/roadie/models"
        },
        {
            "Path": "github.com/gb/roadie/presentation"
        },
        {
            "Path": "github.com/gb/roadie/presentation/presentationmock"
        },
        {
            "Path": "github.com/gb/roadie/random"
        },
        {
            "Path": "github.com/gb/roadie/roadiepb"
        },
        {
            "Path": "github.com/gb/roadie/s3"
        },
        {
            "Path": "github.com/gb/roadie/testutil"
        },
        {
            "Path": "github.com/gb/tuner/tunerpb"
        },
        {
            "Path": "github.com/golang/protobuf/ptypes/empty"
        },
        {
            "Path": "github.com/google/go-cmp/cmp"
        },
        {
            "Path": "github.com/google/go-cmp/cmp/cmpopts"
        },
        {
            "Path": "github.com/google/uuid"
        },
        {
            "Path": "github.com/honeycombio/beeline-go"
        },
        {
            "Path": "github.com/volatiletech/null/v8"
        },
        {
            "Path": "github.com/volatiletech/sqlboiler/v4/boil"
        },
        {
            "Path": "github.com/volatiletech/sqlboiler/v4/queries/qm"
        },
        {
            "Path": "github.com/volatiletech/sqlboiler/v4/types"
        },
        {
            "Path": "google.golang.org/grpc"
        },
        {
            "Path": "google.golang.org/grpc/codes"
        },
        {
            "Path": "google.golang.org/grpc/metadata"
        },
        {
            "Path": "google.golang.org/grpc/status"
        },
        {
            "Path": "google.golang.org/protobuf/reflect/protoreflect"
        },
        {
            "Path": "google.golang.org/protobuf/testing/protocmp"
        },
        {
            "Path": "google.golang.org/protobuf/types/known/timestamppb"
        },
        {
            "Path": "gotest.tools/v3/assert"
        },
        {
            "Path": "gotest.tools/v3/assert/cmp"
        },
        {
            "Path": "io"
        },
        {
            "Path": "log"
        },
        {
            "Path": "math/rand"
        },
        {
            "Path": "net"
        },
        {
            "Path": "path"
        },
        {
            "Path": "slices"
        },
        {
            "Path": "sort"
        },
        {
            "Path": "strings"
        },
        {
            "Path": "testing"
        },
        {
            "Path": "time"
        }
    ]
}


[Trace - 15:02:32] Sending request 'codeAction/resolve - (352)'.
Params: {
    "title": "Browse arm64 assembly for Test_CreateParameterizedDashboard",
    "kind": "source.assembly",
    "command": {
        "title": "Browse arm64 assembly for Test_CreateParameterizedDashboard",
        "command": "gopls.assembly",
        "arguments": [
            "1",
            "github.com/gb/roadie/server [github.com/gb/roadie/server.test]",
            "github.com/gb/roadie/server.Test_CreateParameterizedDashboard"
        ]
    }
}


[Trace - 15:02:32] Sending request 'codeAction/resolve - (353)'.
Params: {
    "title": "Browse documentation for func Test_CreateParameterizedDashboard",
    "kind": "source.doc",
    "command": {
        "title": "Browse documentation for func Test_CreateParameterizedDashboard",
        "command": "gopls.doc",
        "arguments": [
            {
                "Location": {
                    "uri": "file:///Users/ian/src/roadie/server/create_parameterized_dashboard_test.go",
                    "range": {
                        "start": {
                            "line": 143,
                            "character": 3
                        },
                        "end": {
                            "line": 143,
                            "character": 3
                        }
                    }
                },
                "ShowDocument": true
            }
        ]
    }
}


[Trace - 15:02:32] Sending request 'codeAction/resolve - (354)'.
Params: {
    "title": "Split package \"server\"",
    "kind": "source.splitPackage",
    "command": {
        "title": "Split package \"server\"",
        "command": "gopls.split_package",
        "arguments": [
            "1",
            "github.com/gb/roadie/server [github.com/gb/roadie/server.test]"
        ]
    }
}


[Trace - 15:02:32] Sending request 'codeAction/resolve - (355)'.
Params: {
    "title": "Show compiler optimization details for \"server\"",
    "kind": "source.toggleCompilerOptDetails",
    "command": {
        "title": "Show compiler optimization details for \"server\"",
        "command": "gopls.gc_details",
        "arguments": [
            "file:///Users/ian/src/roadie/server/create_parameterized_dashboard_test.go"
        ]
    }
}


[Trace - 15:02:32] Sending request 'codeAction/resolve - (356)'.
Params: {
    "title": "Browse gopls feature documentation",
    "kind": "gopls.doc.features",
    "command": {
        "title": "Browse gopls feature documentation",
        "command": "gopls.client_open_url",
        "arguments": [
            "https://github.com/golang/tools/blob/master/gopls/doc/features/index.md"
        ]
    }
}


[Trace - 15:02:32] Received response 'codeAction/resolve - (351)' in 1ms. Request failed: no identifier found (0).
[Trace - 15:02:32] Received response 'codeAction/resolve - (352)' in 2ms.
Result: {
    "title": "Browse arm64 assembly for Test_CreateParameterizedDashboard",
    "kind": "source.assembly",
    "command": {
        "title": "Browse arm64 assembly for Test_CreateParameterizedDashboard",
        "command": "gopls.assembly",
        "arguments": [
            "1",
            "github.com/gb/roadie/server [github.com/gb/roadie/server.test]",
            "github.com/gb/roadie/server.Test_CreateParameterizedDashboard"
        ]
    }
}


[Trace - 15:02:32] Received response 'codeAction/resolve - (353)' in 2ms.
Result: {
    "title": "Browse documentation for func Test_CreateParameterizedDashboard",
    "kind": "source.doc",
    "command": {
        "title": "Browse documentation for func Test_CreateParameterizedDashboard",
        "command": "gopls.doc",
        "arguments": [
            {
                "Location": {
                    "uri": "file:///Users/ian/src/roadie/server/create_parameterized_dashboard_test.go",
                    "range": {
                        "start": {
                            "line": 143,
                            "character": 3
                        },
                        "end": {
                            "line": 143,
                            "character": 3
                        }
                    }
                },
                "ShowDocument": true
            }
        ]
    }
}


[Trace - 15:02:32] Received response 'codeAction/resolve - (354)' in 2ms.
Result: {
    "title": "Split package \"server\"",
    "kind": "source.splitPackage",
    "command": {
        "title": "Split package \"server\"",
        "command": "gopls.split_package",
        "arguments": [
            "1",
            "github.com/gb/roadie/server [github.com/gb/roadie/server.test]"
        ]
    }
}


[Trace - 15:02:32] Received response 'codeAction/resolve - (355)' in 2ms.
Result: {
    "title": "Show compiler optimization details for \"server\"",
    "kind": "source.toggleCompilerOptDetails",
    "command": {
        "title": "Show compiler optimization details for \"server\"",
        "command": "gopls.gc_details",
        "arguments": [
            "file:///Users/ian/src/roadie/server/create_parameterized_dashboard_test.go"
        ]
    }
}


[Trace - 15:02:32] Received response 'codeAction/resolve - (356)' in 2ms.
Result: {
    "title": "Browse gopls feature documentation",
    "kind": "gopls.doc.features",
    "command": {
        "title": "Browse gopls feature documentation",
        "command": "gopls.client_open_url",
        "arguments": [
            "https://github.com/golang/tools/blob/master/gopls/doc/features/index.md"
        ]
    }
}


[Trace - 15:02:32] Sending request 'textDocument/documentSymbol - (357)'.
Params: {
    "textDocument": {
        "uri": "file:///Users/ian/src/roadie/server/create_parameterized_dashboard_test.go"
    }
}


[Trace - 15:02:32] Sending request 'textDocument/documentSymbol - (358)'.
Params: {
    "textDocument": {
        "uri": "file:///Users/ian/src/roadie/server/create_parameterized_dashboard_test.go"
    }
}


[Trace - 15:02:32] Sending request 'textDocument/documentSymbol - (359)'.
Params: {
    "textDocument": {
        "uri": "file:///Users/ian/src/roadie/server/create_parameterized_dashboard_test.go"
    }
}


[Trace - 15:02:32] Sending request 'textDocument/codeLens - (360)'.
Params: {
    "textDocument": {
        "uri": "file:///Users/ian/src/roadie/server/create_parameterized_dashboard_test.go"
    }
}


[Trace - 15:02:32] Received response 'textDocument/documentSymbol - (357)' in 0ms.
Result: [
    {
        "name": "Test_CreateParameterizedDashboard",
        "detail": "func(t *testing.T)",
        "kind": 12,
        "range": {
            "start": {
                "line": 29,
                "character": 0
            },
            "end": {
                "line": 406,
                "character": 1
            }
        },
        "selectionRange": {
            "start": {
                "line": 29,
                "character": 5
            },
            "end": {
                "line": 29,
                "character": 38
            }
        }
    }
]


[Trace - 15:02:32] Received response 'textDocument/documentSymbol - (358)' in 0ms.
Result: [
    {
        "name": "Test_CreateParameterizedDashboard",
        "detail": "func(t *testing.T)",
        "kind": 12,
        "range": {
            "start": {
                "line": 29,
                "character": 0
            },
            "end": {
                "line": 406,
                "character": 1
            }
        },
        "selectionRange": {
            "start": {
                "line": 29,
                "character": 5
            },
            "end": {
                "line": 29,
                "character": 38
            }
        }
    }
]


[Trace - 15:02:32] Sending request 'workspace/executeCommand - (361)'.
Params: {
    "command": "gopls.list_imports",
    "arguments": [
        {
            "URI": "file:///Users/ian/src/roadie/server/create_parameterized_dashboard_test.go"
        }
    ]
}


[Trace - 15:02:32] Received response 'textDocument/documentSymbol - (359)' in 0ms.
Result: [
    {
        "name": "Test_CreateParameterizedDashboard",
        "detail": "func(t *testing.T)",
        "kind": 12,
        "range": {
            "start": {
                "line": 29,
                "character": 0
            },
            "end": {
                "line": 406,
                "character": 1
            }
        },
        "selectionRange": {
            "start": {
                "line": 29,
                "character": 5
            },
            "end": {
                "line": 29,
                "character": 38
            }
        }
    }
]


[Trace - 15:02:32] Received response 'textDocument/codeLens - (360)' in 1ms.
No result returned.


[Trace - 15:02:32] Received response 'workspace/executeCommand - (361)' in 1ms.
Result: {
    "Imports": [
        {
            "Path": "context",
            "Name": ""
        },
        {
            "Path": "errors",
            "Name": ""
        },
        {
            "Path": "net",
            "Name": ""
        },
        {
            "Path": "testing",
            "Name": ""
        },
        {
            "Path": "github.com/gb/agora/queue/mocks",
            "Name": "agoramocks"
        },
        {
            "Path": "github.com/gb/goutils/database/driver",
            "Name": ""
        },
        {
            "Path": "github.com/gb/goutils/featureflags/featureflagtest",
            "Name": ""
        },
        {
            "Path": "github.com/gb/identity/authorizer",
            "Name": ""
        },
        {
            "Path": "github.com/gb/identity/identity",
            "Name": ""
        },
        {
            "Path": "github.com/gb/identity/principal",
            "Name": ""
        },
        {
            "Path": "github.com/gb/roadie/database",
            "Name": ""
        },
        {
            "Path": "github.com/gb/roadie/database/mocks",
            "Name": ""
        },
        {
            "Path": "github.com/gb/roadie/mapping",
            "Name": ""
        },
        {
            "Path": "github.com/gb/roadie/models",
            "Name": ""
        },
        {
            "Path": "github.com/gb/roadie/presentation",
            "Name": ""
        },
        {
            "Path": "github.com/gb/roadie/presentation/presentationmock",
            "Name": ""
        },
        {
            "Path": "github.com/gb/roadie/roadiepb",
            "Name": "pb"
        },
        {
            "Path": "github.com/gb/roadie/testutil",
            "Name": ""
        },
        {
            "Path": "github.com/google/go-cmp/cmp/cmpopts",
            "Name": ""
        },
        {
            "Path": "github.com/volatiletech/null/v8",
            "Name": ""
        },
        {
            "Path": "google.golang.org/grpc/codes",
            "Name": ""
        },
        {
            "Path": "google.golang.org/grpc/status",
            "Name": ""
        },
        {
            "Path": "gotest.tools/v3/assert",
            "Name": ""
        }
    ],
    "PackageImports": [
        {
            "Path": "context"
        },
        {
            "Path": "crypto/rand"
        },
        {
            "Path": "database/sql"
        },
        {
            "Path": "errors"
        },
        {
            "Path": "fmt"
        },
        {
            "Path": "github.com/aws/aws-sdk-go/aws"
        },
        {
            "Path": "github.com/aws/aws-sdk-go/aws/awserr"
        },
        {
            "Path": "github.com/aws/aws-sdk-go/aws/request"
        },
        {
            "Path": "github.com/aws/aws-sdk-go/service/s3"
        },
        {
            "Path": "github.com/aws/aws-sdk-go/service/s3/s3iface"
        },
        {
            "Path": "github.com/bugsnag/bugsnag-go"
        },
        {
            "Path": "github.com/bugsnag/bugsnag-go/errors"
        },
        {
            "Path": "github.com/gb/agora/queue/event"
        },
        {
            "Path": "github.com/gb/agora/queue/mocks"
        },
        {
            "Path": "github.com/gb/campus/campuspb"
        },
        {
            "Path": "github.com/gb/clerk/clerkpb"
        },
        {
            "Path": "github.com/gb/go-grpc-middleware/middleware"
        },
        {
            "Path": "github.com/gb/goutils/bugsnagutils/bugsnagtest"
        },
        {
            "Path": "github.com/gb/goutils/database/driver"
        },
        {
            "Path": "github.com/gb/goutils/database/driver/mocks"
        },
        {
            "Path": "github.com/gb/goutils/featureflags"
        },
        {
            "Path": "github.com/gb/goutils/featureflags/featureflagtest"
        },
        {
            "Path": "github.com/gb/goutils/globalfinderpb"
        },
        {
            "Path": "github.com/gb/goutils/globalfinderpb/globalfindertestutil"
        },
        {
            "Path": "github.com/gb/goutils/log"
        },
        {
            "Path": "github.com/gb/goutils/testhelp"
        },
        {
            "Path": "github.com/gb/goutils/vault"
        },
        {
            "Path": "github.com/gb/goutils/vault/mocks"
        },
        {
            "Path": "github.com/gb/identity/authorization"
        },
        {
            "Path": "github.com/gb/identity/authorizer"
        },
        {
            "Path": "github.com/gb/identity/grpcauthz"
        },
        {
            "Path": "github.com/gb/identity/identity"
        },
        {
            "Path": "github.com/gb/identity/principal"
        },
        {
            "Path": "github.com/gb/roadie/database"
        },
        {
            "Path": "github.com/gb/roadie/database/dbmock"
        },
        {
            "Path": "github.com/gb/roadie/database/mocks"
        },
        {
            "Path": "github.com/gb/roadie/event"
        },
        {
            "Path": "github.com/gb/roadie/integrations"
        },
        {
            "Path": "github.com/gb/roadie/mapping"
        },
        {
            "Path": "github.com/gb/roadie/models"
        },
        {
            "Path": "github.com/gb/roadie/presentation"
        },
        {
            "Path": "github.com/gb/roadie/presentation/presentationmock"
        },
        {
            "Path": "github.com/gb/roadie/random"
        },
        {
            "Path": "github.com/gb/roadie/roadiepb"
        },
        {
            "Path": "github.com/gb/roadie/s3"
        },
        {
            "Path": "github.com/gb/roadie/testutil"
        },
        {
            "Path": "github.com/gb/tuner/tunerpb"
        },
        {
            "Path": "github.com/golang/protobuf/ptypes/empty"
        },
        {
            "Path": "github.com/google/go-cmp/cmp"
        },
        {
            "Path": "github.com/google/go-cmp/cmp/cmpopts"
        },
        {
            "Path": "github.com/google/uuid"
        },
        {
            "Path": "github.com/honeycombio/beeline-go"
        },
        {
            "Path": "github.com/volatiletech/null/v8"
        },
        {
            "Path": "github.com/volatiletech/sqlboiler/v4/boil"
        },
        {
            "Path": "github.com/volatiletech/sqlboiler/v4/queries/qm"
        },
        {
            "Path": "github.com/volatiletech/sqlboiler/v4/types"
        },
        {
            "Path": "google.golang.org/grpc"
        },
        {
            "Path": "google.golang.org/grpc/codes"
        },
        {
            "Path": "google.golang.org/grpc/metadata"
        },
        {
            "Path": "google.golang.org/grpc/status"
        },
        {
            "Path": "google.golang.org/protobuf/reflect/protoreflect"
        },
        {
            "Path": "google.golang.org/protobuf/testing/protocmp"
        },
        {
            "Path": "google.golang.org/protobuf/types/known/timestamppb"
        },
        {
            "Path": "gotest.tools/v3/assert"
        },
        {
            "Path": "gotest.tools/v3/assert/cmp"
        },
        {
            "Path": "io"
        },
        {
            "Path": "log"
        },
        {
            "Path": "math/rand"
        },
        {
            "Path": "net"
        },
        {
            "Path": "path"
        },
        {
            "Path": "slices"
        },
        {
            "Path": "sort"
        },
        {
            "Path": "strings"
        },
        {
            "Path": "testing"
        },
        {
            "Path": "time"
        }
    ]
}


[Trace - 15:02:32] Sending request 'textDocument/semanticTokens/full - (362)'.
Params: {
    "textDocument": {
        "uri": "file:///Users/ian/src/roadie/server/create_parameterized_dashboard_test.go"
    }
}


[Trace - 15:02:32] Received response 'textDocument/semanticTokens/full - (362)' in 0ms.
Result: {
    "data": []
}


[Trace - 15:02:32] Sending request 'textDocument/codeAction - (363)'.
Params: {
    "textDocument": {
        "uri": "file:///Users/ian/src/roadie/server/create_parameterized_dashboard_test.go"
    },
    "range": {
        "start": {
            "line": 126,
            "character": 10
        },
        "end": {
            "line": 126,
            "character": 10
        }
    },
    "context": {
        "diagnostics": [],
        "triggerKind": 2
    }
}


[Trace - 15:02:32] Received response 'textDocument/codeAction - (363)' in 1ms.
No result returned.


[Trace - 15:02:32] Sending request 'textDocument/documentSymbol - (364)'.
Params: {
    "textDocument": {
        "uri": "file:///Users/ian/src/roadie/server/create_parameterized_dashboard_test.go"
    }
}


[Trace - 15:02:32] Received response 'textDocument/documentSymbol - (364)' in 1ms.
Result: [
    {
        "name": "Test_CreateParameterizedDashboard",
        "detail": "func(t *testing.T)",
        "kind": 12,
        "range": {
            "start": {
                "line": 29,
                "character": 0
            },
            "end": {
                "line": 406,
                "character": 1
            }
        },
        "selectionRange": {
            "start": {
                "line": 29,
                "character": 5
            },
            "end": {
                "line": 29,
                "character": 38
            }
        }
    }
]


[Trace - 15:02:33] Sending request 'textDocument/inlayHint - (365)'.
Params: {
    "textDocument": {
        "uri": "file:///Users/ian/src/roadie/server/create_parameterized_dashboard_test.go"
    },
    "range": {
        "start": {
            "line": 72,
            "character": 0
        },
        "end": {
            "line": 175,
            "character": 0
        }
    }
}


[Trace - 15:02:33] Received response 'textDocument/inlayHint - (365)' in 1ms.
No result returned.


[Trace - 15:02:33] Sending request 'textDocument/documentLink - (366)'.
Params: {
    "textDocument": {
        "uri": "file:///Users/ian/src/roadie/server/create_parameterized_dashboard_test.go"
    }
}


[Trace - 15:02:33] Received response 'textDocument/documentLink - (366)' in 13ms.
Result: [
    {
        "range": {
            "start": {
                "line": 3,
                "character": 2
            },
            "end": {
                "line": 3,
                "character": 9
            }
        },
        "target": "https://pkg.go.dev/context"
    },
    {
        "range": {
            "start": {
                "line": 4,
                "character": 2
            },
            "end": {
                "line": 4,
                "character": 8
            }
        },
        "target": "https://pkg.go.dev/errors"
    },
    {
        "range": {
            "start": {
                "line": 5,
                "character": 2
            },
            "end": {
                "line": 5,
                "character": 5
            }
        },
        "target": "https://pkg.go.dev/net"
    },
    {
        "range": {
            "start": {
                "line": 6,
                "character": 2
            },
            "end": {
                "line": 6,
                "character": 9
            }
        },
        "target": "https://pkg.go.dev/testing"
    },
    {
        "range": {
            "start": {
                "line": 22,
                "character": 2
            },
            "end": {
                "line": 22,
                "character": 38
            }
        },
        "target": "https://pkg.go.dev/github.com/google/go-cmp@v0.6.0/cmp/cmpopts"
    },
    {
        "range": {
            "start": {
                "line": 23,
                "character": 2
            },
            "end": {
                "line": 23,
                "character": 33
            }
        },
        "target": "https://pkg.go.dev/github.com/volatiletech/null/v8@v8.1.2"
    },
    {
        "range": {
            "start": {
                "line": 24,
                "character": 2
            },
            "end": {
                "line": 24,
                "character": 30
            }
        },
        "target": "https://pkg.go.dev/google.golang.org/grpc@v1.62.1/codes"
    },
    {
        "range": {
            "start": {
                "line": 25,
                "character": 2
            },
            "end": {
                "line": 25,
                "character": 31
            }
        },
        "target": "https://pkg.go.dev/google.golang.org/grpc@v1.62.1/status"
    },
    {
        "range": {
            "start": {
                "line": 26,
                "character": 2
            },
            "end": {
                "line": 26,
                "character": 24
            }
        },
        "target": "https://pkg.go.dev/gotest.tools/v3@v3.5.1/assert"
    }
]


[Trace - 15:02:33] Sending request 'textDocument/documentLink - (367)'.
Params: {
    "textDocument": {
        "uri": "file:///Users/ian/src/roadie/server/create_parameterized_dashboard_test.go"
    }
}


[Trace - 15:02:33] Received response 'textDocument/documentLink - (367)' in 8ms.
Result: [
    {
        "range": {
            "start": {
                "line": 3,
                "character": 2
            },
            "end": {
                "line": 3,
                "character": 9
            }
        },
        "target": "https://pkg.go.dev/context"
    },
    {
        "range": {
            "start": {
                "line": 4,
                "character": 2
            },
            "end": {
                "line": 4,
                "character": 8
            }
        },
        "target": "https://pkg.go.dev/errors"
    },
    {
        "range": {
            "start": {
                "line": 5,
                "character": 2
            },
            "end": {
                "line": 5,
                "character": 5
            }
        },
        "target": "https://pkg.go.dev/net"
    },
    {
        "range": {
            "start": {
                "line": 6,
                "character": 2
            },
            "end": {
                "line": 6,
                "character": 9
            }
        },
        "target": "https://pkg.go.dev/testing"
    },
    {
        "range": {
            "start": {
                "line": 22,
                "character": 2
            },
            "end": {
                "line": 22,
                "character": 38
            }
        },
        "target": "https://pkg.go.dev/github.com/google/go-cmp@v0.6.0/cmp/cmpopts"
    },
    {
        "range": {
            "start": {
                "line": 23,
                "character": 2
            },
            "end": {
                "line": 23,
                "character": 33
            }
        },
        "target": "https://pkg.go.dev/github.com/volatiletech/null/v8@v8.1.2"
    },
    {
        "range": {
            "start": {
                "line": 24,
                "character": 2
            },
            "end": {
                "line": 24,
                "character": 30
            }
        },
        "target": "https://pkg.go.dev/google.golang.org/grpc@v1.62.1/codes"
    },
    {
        "range": {
            "start": {
                "line": 25,
                "character": 2
            },
            "end": {
                "line": 25,
                "character": 31
            }
        },
        "target": "https://pkg.go.dev/google.golang.org/grpc@v1.62.1/status"
    },
    {
        "range": {
            "start": {
                "line": 26,
                "character": 2
            },
            "end": {
                "line": 26,
                "character": 24
            }
        },
        "target": "https://pkg.go.dev/gotest.tools/v3@v3.5.1/assert"
    }
]

gopls (server)

[Info  - 14:56:28] 2025/09/18 14:56:28 Created View (#1)
    directory=/Users/ian/src/roadie
    view_type="GoMod"
    root_dir="file:///Users/ian/src/roadie"
    go_version="go version go1.23.12 darwin/arm64"
    build_flags=[]
    env={GOOS:darwin GOARCH:arm64 GOCACHE:/Users/ian/Library/Caches/go-build GOMODCACHE:/Users/ian/go/pkg/mod GOPATH:/Users/ian/go GOPRIVATE:github.com/gb GOFLAGS: GO111MODULE: GOTOOLCHAIN:auto GOROOT:/Users/ian/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.23.12.darwin-arm64 GoVersion:23 GoVersionOutput:go version go1.23.12 darwin/arm64
 ExplicitGOWORK: EffectiveGOPACKAGESDRIVER:}
    env_overlay=[]

[Info  - 14:56:28] 2025/09/18 14:56:28 go/packages.Load #1
    view_id="1"
    snapshot=0
    directory=/Users/ian/src/roadie
    query=[/Users/ian/src/roadie/... builtin]
    packages=65
    duration=492.470584ms

[Info  - 14:56:58] 2025/09/18 14:56:58 background imports cache refresh starting

[Info  - 14:56:58] 2025/09/18 14:56:58 background refresh finished after 64.110917ms

[Error - 14:57:12] Request codeAction/resolve failed.
  Message: no identifier found
  Code: 0 
[Error - 14:57:12] Request codeAction/resolve failed.
  Message: no identifier found
  Code: 0 
[Error - 14:57:18] Request codeAction/resolve failed.
  Message: no identifier found
  Code: 0 
[Error - 14:57:18] Request codeAction/resolve failed.
  Message: no identifier found
  Code: 0 
[Info  - 14:57:31] 2025/09/18 14:57:31 background imports cache refresh starting

[Info  - 14:57:31] 2025/09/18 14:57:31 background refresh finished after 45.582292ms