Skip to content

Instantly share code, notes, and snippets.

@ollien
Last active July 7, 2019 23:33
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ollien/8fec77a55cd5e4c2a2e13d0d88bf4e2a to your computer and use it in GitHub Desktop.
Save ollien/8fec77a55cd5e4c2a2e13d0d88bf4e2a to your computer and use it in GitHub Desktop.
[Trace - 7:33:01 PM] Sending request 'initialize - (0)'.
Params: {"processId":30200,"rootPath":"/home/nick/Documents/code/xtrace","rootUri":"file:///home/nick/Documents/code/xtrace","capabilities":{"workspace":{"applyEdit":true,"workspaceEdit":{"documentChanges":true},"didChangeConfiguration":{"dynamicRegistration":true},"didChangeWatchedFiles":{"dynamicRegistration":true},"symbol":{"dynamicRegistration":true,"symbolKind":{"valueSet":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26]}},"executeCommand":{"dynamicRegistration":true},"configuration":true,"workspaceFolders":true},"textDocument":{"publishDiagnostics":{"relatedInformation":true},"synchronization":{"dynamicRegistration":true,"willSave":true,"willSaveWaitUntil":true,"didSave":true},"completion":{"dynamicRegistration":true,"contextSupport":true,"completionItem":{"snippetSupport":true,"commitCharactersSupport":true,"documentationFormat":["markdown","plaintext"],"deprecatedSupport":true,"preselectSupport":true},"completionItemKind":{"valueSet":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25]}},"hover":{"dynamicRegistration":true,"contentFormat":["markdown","plaintext"]},"signatureHelp":{"dynamicRegistration":true,"signatureInformation":{"documentationFormat":["markdown","plaintext"]}},"definition":{"dynamicRegistration":true},"references":{"dynamicRegistration":true},"documentHighlight":{"dynamicRegistration":true},"documentSymbol":{"dynamicRegistration":true,"symbolKind":{"valueSet":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26]},"hierarchicalDocumentSymbolSupport":true},"codeAction":{"dynamicRegistration":true,"codeActionLiteralSupport":{"codeActionKind":{"valueSet":["","quickfix","refactor","refactor.extract","refactor.inline","refactor.rewrite","source","source.organizeImports"]}}},"codeLens":{"dynamicRegistration":true},"formatting":{"dynamicRegistration":true},"rangeFormatting":{"dynamicRegistration":true},"onTypeFormatting":{"dynamicRegistration":true},"rename":{"dynamicRegistration":true},"documentLink":{"dynamicRegistration":true},"typeDefinition":{"dynamicRegistration":true},"implementation":{"dynamicRegistration":true},"colorProvider":{"dynamicRegistration":true},"foldingRange":{"dynamicRegistration":true,"rangeLimit":5000,"lineFoldingOnly":true}}},"initializationOptions":{"funcSnippetEnabled":false,"gocodeCompletionEnabled":true},"trace":"off","workspaceFolders":[{"uri":"file:///home/nick/Documents/code/xtrace","name":"xtrace"}]}
[Trace - 7:33:01 PM] Received response 'initialize - (0)' in 9ms.
Params: {"capabilities":{"textDocumentSync":{"openClose":true,"change":2,"save":{}},"hoverProvider":true,"completionProvider":{"triggerCharacters":["."]},"signatureHelpProvider":{"triggerCharacters":["(",","]},"definitionProvider":true,"referencesProvider":true,"documentHighlightProvider":true,"documentSymbolProvider":true,"codeActionProvider":true,"documentFormattingProvider":true,"renameProvider":true,"documentLinkProvider":{},"typeDefinitionProvider":true,"workspace":{"workspaceFolders":{"supported":true,"changeNotifications":"workspace/didChangeWorkspaceFolders"}}},"custom":null}
[Trace - 7:33:01 PM] Sending notification 'initialized'.
Params: {}
[Trace - 7:33:01 PM] Received request 'client/registerCapability - (1)'.
Params: {"registrations":[{"id":"workspace/didChangeConfiguration","method":"workspace/didChangeConfiguration"},{"id":"workspace/didChangeWorkspaceFolders","method":"workspace/didChangeWorkspaceFolders"}]}
[Trace - 7:33:01 PM] Sending response 'client/registerCapability - (1)' in 9ms.
Params: {}
[Trace - 7:33:01 PM] Received request 'workspace/configuration - (2)'.
Params: {"items":[{"scopeUri":"file:///home/nick/Documents/code/xtrace","section":"gopls"}]}
[Trace - 7:33:01 PM] Sending response 'workspace/configuration - (2)' in 35ms.
Params: [null]
[Trace - 7:33:01 PM] Received notification 'window/logMessage'.
Params: {"type":3,"message":"Build info\n----------\nversion v0.1.1-cmd.gopls, built in $GOPATH mode\n\nGo info\n-------\ngo version go1.11.11 linux/amd64\n\nGOARCH=\"amd64\"\nGOBIN=\"\"\nGOCACHE=\"/home/nick/.cache/go-build\"\nGOEXE=\"\"\nGOFLAGS=\"\"\nGOHOSTARCH=\"amd64\"\nGOHOSTOS=\"linux\"\nGOOS=\"linux\"\nGOPATH=\"/home/nick/Documents/code/golang\"\nGOPROXY=\"\"\nGORACE=\"\"\nGOROOT=\"/usr/lib64/go/1.11\"\nGOTMPDIR=\"\"\nGOTOOLDIR=\"/usr/lib64/go/1.11/pkg/tool/linux_amd64\"\nGCCGO=\"gccgo\"\nCC=\"gcc\"\nCXX=\"g++\"\nCGO_ENABLED=\"1\"\nGOMOD=\"/home/nick/Documents/code/xtrace/go.mod\"\nCGO_CFLAGS=\"-g -O2\"\nCGO_CPPFLAGS=\"\"\nCGO_CXXFLAGS=\"-g -O2\"\nCGO_FFLAGS=\"-g -O2\"\nCGO_LDFLAGS=\"-g -O2\"\nPKG_CONFIG=\"pkg-config\"\nGOGCCFLAGS=\"-fPIC -m64 -pthread -fmessage-length=0 -fdebug-prefix-map=/tmp/go-build600949253=/tmp/go-build -gno-record-gcc-switches\"\n"}
[Trace - 7:33:01 PM] Sending notification 'textDocument/didOpen'.
Params: {"textDocument":{"uri":"file:///home/nick/Documents/code/xtrace/format.go","languageId":"go","version":1,"text":"package xtrace\n\nimport (\n\t\"regexp\"\n\t\"strings\"\n)\n\n// TraceFormatter allows for the formatting of any message in the given trace\ntype TraceFormatter interface {\n\t// FormatTrace takes a message and will return a formatted message. Any previous message many be updated based on\n\t// the contents of the passed message\n\tFormatTrace(previousMessages []string, message string) string\n}\n\n// NilFormatter applies no formatting and returns the given message as xerrors sends them.\n// Note that the messages that xerrors sends aren't always the most intuitive (e.g. there are no newlines after error\n// messages), and the usage of this formatter is not strictly recommended. It is mainly provided for those that want\n// a simple shim.\ntype NilFormatter struct{}\n\n// FormatTrace applies no formatting and returns the given message as is\nfunc (formatter NilFormatter) FormatTrace(previousMessages []string, message string) string {\n\treturn message\n}\n\n// NestedMessageFormatter will leave the leading line with no indentation, but indents all lines following, stripping\n// whitespace from the both the left and right of each line and replacing it with a newline, unless it is the last\n// message. In this case, no newline is inserted, but whitespace is still stripped.\ntype NestedMessageFormatter struct {\n\tIndentation string\n}\n\n// FormatTrace formats the message as dictated by the contract for NestedMessageFormatter\nfunc (formatter NestedMessageFormatter) FormatTrace(previousMessages []string, message string) string {\n\tformattedMessage := strings.TrimSpace(message)\n\t// All messages except the first must begin with the given indentation, so if we have the first, we're done.\n\tif len(previousMessages) == 0 {\n\t\treturn formattedMessage\n\t}\n\n\tformattedMessage = formatter.Indentation + formattedMessage\n\tlastMessage := previousMessages[len(previousMessages)-1]\n\t// Make sure the previous message ends with a newline\n\tif lastMessage[len(lastMessage)-1] != '\\n' {\n\t\tlastMessage += \"\\n\"\n\t\tpreviousMessages[len(previousMessages)-1] = lastMessage\n\t}\n\n\treturn formattedMessage\n}\n\n// NewLineFormatter ensures that all messages except the last end in a newline after all error content.\ntype NewLineFormatter struct {\n\t// Naive, if set, will instruct the formatter to perform the naive version of this algorithm, which simply\n\t// adds/removes a newline from the end of each message. xerrors has a habit of sending indentation in the previous\n\t// line (i.e. \"<error>\\n \"), so the naive algorithm produces weird output. Nevertheless, this may be desirable\n\t// depending on the implementation of xerrors.Formatter, so it is left as an option.\n\tNaive bool\n\t// holds the last message with no newline stripped\n\tlastRawMessage string\n}\n\n// FormatTrace formats the message as dictated by the contract for NewLineFormatter\nfunc (formatter *NewLineFormatter) FormatTrace(previousMessages []string, message string) (formatted string) {\n\tlastMessage := formatter.lastRawMessage\n\tformatter.lastRawMessage = message\n\tformatted = formatter.stripNewlines(message)\n\tif len(previousMessages) == 0 {\n\t\treturn\n\t}\n\n\t// Add a newline back to the last message\n\tterminatedLastMessage := formatter.newLineTerminateMessage(lastMessage)\n\tpreviousMessages[len(previousMessages)-1] = terminatedLastMessage\n\n\treturn\n}\n\n// stripNewLines will strip new lines from the message using the given strategy\nfunc (formatter *NewLineFormatter) stripNewlines(message string) string {\n\tif formatter.Naive {\n\t\treturn strings.TrimRight(message, \"\\n\")\n\t}\n\n\t// Capture group will only match the trailing whitespace portion of the string\n\tpattern := regexp.MustCompile(`.*\\S(\\s*)`)\n\tmatchBoundaries := pattern.FindStringSubmatchIndex(message)\n\t// If we don't match, we don't need to strip anything\n\tif matchBoundaries == nil {\n\t\treturn message\n\t}\n\n\t// Remove all newlines from the whitespace portion\n\t// The capture group's boundaries will be stored at the 2nd and 3rd positions (zero-indexed)\n\terrorPortion, whitespacePortion := message[:matchBoundaries[2]], message[matchBoundaries[2]:matchBoundaries[3]]\n\tstrippedWhitespacePortion := strings.Replace(whitespacePortion, \"\\n\", \"\", -1)\n\n\treturn errorPortion + strippedWhitespacePortion\n}\n\n// newLineTerminateMessages will termiante the message with a newline, based on the given strategy\nfunc (formatter *NewLineFormatter) newLineTerminateMessage(message string) string {\n\tpattern := regexp.MustCompile(`\\s*\\n\\s*$`)\n\t// Make sure the previous message ends with a newline, or there is newline within a trailing whitespace region.\n\tif (formatter.Naive && message[len(message)-1] == '\\n') ||\n\t\t(!formatter.Naive && pattern.MatchString(message)) {\n\t\treturn message\n\t}\n\n\treturn message + \"\\n\"\n}\n"}}
[Trace - 7:33:01 PM] Sending notification 'textDocument/didOpen'.
Params: {"textDocument":{"uri":"file:///home/nick/Documents/code/xtrace/tracer_test.go","languageId":"go","version":1,"text":"package xtrace\n\nimport (\n\t\"bytes\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"strings\"\n\t\"testing\"\n\n\t\"github.com/stretchr/testify/assert\"\n\t\"golang.org/x/xerrors\"\n)\n\ntype test struct {\n\tname string\n\tsetup func(t *testing.T) Tracer\n\ttestFunc func(t *testing.T, tracer Tracer)\n}\n\nfunc runTestTable(t *testing.T, table []test) {\n\tfor _, tt := range table {\n\t\tt.Run(tt.name, func(t *testing.T) {\n\t\t\ttracer := tt.setup(t)\n\t\t\ttt.testFunc(t, tracer)\n\t\t})\n\t}\n}\n\nfunc handleSetupError(t *testing.T, tracer Tracer, err error) Tracer {\n\tif err != nil {\n\t\tt.Log(\"Could not setup test\", err)\n\t\tt.FailNow()\n\n\t\t// Won't ever happen after FailNow\n\t\treturn Tracer{}\n\t}\n\n\treturn tracer\n}\n\nfunc TestTracer_ReadNext(t *testing.T) {\n\ttests := []test{\n\t\ttest{\n\t\t\tname: \"two nested errors\",\n\t\t\tsetup: func(t *testing.T) Tracer {\n\t\t\t\terr := errors.New(\"things broke :(\")\n\t\t\t\terr2 := xerrors.Errorf(\"aw shucks: %w\", err)\n\t\t\t\terr3 := xerrors.Errorf(\"I tried very hard and failed: %w\", err2)\n\n\t\t\t\ttracer, constructErr := NewTracer(err3)\n\n\t\t\t\treturn handleSetupError(t, tracer, constructErr)\n\t\t\t},\n\t\t\ttestFunc: func(t *testing.T, tracer Tracer) {\n\t\t\t\tvar err error\n\t\t\t\texpectedErrors := []string{\n\t\t\t\t\t\"things broke :(\",\n\t\t\t\t\t\"aw shucks\",\n\t\t\t\t\t\"I tried very hard and failed\",\n\t\t\t\t}\n\t\t\t\tfor i := 0; err != io.EOF; i++ {\n\t\t\t\t\tif i >= len(expectedErrors)+1 {\n\t\t\t\t\t\tfmt.Printf(\"Ran more times than expected: (on attempt %d, only expected %d)\", i+1, len(expectedErrors))\n\t\t\t\t\t\tt.FailNow()\n\t\t\t\t\t}\n\n\t\t\t\t\tvar message string\n\t\t\t\t\tmessage, err = tracer.ReadNext()\n\t\t\t\t\tif err == nil {\n\t\t\t\t\t\t// Other details may be returned when we use a tracer, so we only want to assert that the expected message is there\n\t\t\t\t\t\tassert.Equal(t, 1, strings.Count(message, expectedErrors[i]))\n\t\t\t\t\t\t// Make sure that the next error is not contained in our current message\n\t\t\t\t\t\tif i != len(expectedErrors)-1 {\n\t\t\t\t\t\t\tassert.NotContains(t, message, expectedErrors[i+1])\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tassert.Equal(t, io.EOF, err)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t},\n\t\ttest{\n\t\t\tname: \"two nested errors, newest first ordering\",\n\t\t\tsetup: func(t *testing.T) Tracer {\n\t\t\t\terr := errors.New(\"things broke :(\")\n\t\t\t\terr2 := xerrors.Errorf(\"aw shucks: %w\", err)\n\t\t\t\terr3 := xerrors.Errorf(\"I tried very hard and failed: %w\", err2)\n\t\t\t\ttracer, constructErr := NewTracer(err3, Ordering(NewestFirstOrdering))\n\n\t\t\t\treturn handleSetupError(t, tracer, constructErr)\n\t\t\t},\n\t\t\ttestFunc: func(t *testing.T, tracer Tracer) {\n\t\t\t\tvar err error\n\t\t\t\texpectedErrors := []string{\n\t\t\t\t\t\"I tried very hard and failed\",\n\t\t\t\t\t\"aw shucks\",\n\t\t\t\t\t\"things broke :(\",\n\t\t\t\t}\n\t\t\t\tfor i := 0; err != io.EOF; i++ {\n\t\t\t\t\tif i >= len(expectedErrors)+1 {\n\t\t\t\t\t\tfmt.Printf(\"Ran more times than expected: (on attempt %d, only expected %d)\", i+1, len(expectedErrors))\n\t\t\t\t\t\tt.FailNow()\n\t\t\t\t\t}\n\n\t\t\t\t\tvar message string\n\t\t\t\t\tmessage, err = tracer.ReadNext()\n\t\t\t\t\tif err == nil {\n\t\t\t\t\t\t// Other details may be returned when we use a tracer, so we only want to assert that the expected message is there\n\t\t\t\t\t\tassert.Equal(t, 1, strings.Count(message, expectedErrors[i]))\n\t\t\t\t\t\t// Make sure that the next error is not contained in our current message\n\t\t\t\t\t\tif i != len(expectedErrors)-1 {\n\t\t\t\t\t\t\tassert.NotContains(t, message, expectedErrors[i+1])\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tassert.Equal(t, io.EOF, err)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t},\n\t\ttest{\n\t\t\tname: \"nil error\",\n\t\t\tsetup: func(t *testing.T) Tracer {\n\t\t\t\ttracer, constructErr := NewTracer(nil)\n\n\t\t\t\treturn handleSetupError(t, tracer, constructErr)\n\t\t\t},\n\t\t\ttestFunc: func(t *testing.T, tracer Tracer) {\n\t\t\t\t_, err := tracer.ReadNext()\n\t\t\t\tassert.Equal(t, io.EOF, err)\n\t\t\t},\n\t\t},\n\t\ttest{\n\t\t\tname: \"empty error\",\n\t\t\tsetup: func(t *testing.T) Tracer {\n\t\t\t\terr := errors.New(\"\")\n\t\t\t\ttracer, constructErr := NewTracer(err)\n\n\t\t\t\treturn handleSetupError(t, tracer, constructErr)\n\t\t\t},\n\t\t\ttestFunc: func(t *testing.T, tracer Tracer) {\n\t\t\t\tmessage, err := tracer.ReadNext()\n\t\t\t\tassert.Equal(t, message, emptyError)\n\t\t\t\tassert.Nil(t, err)\n\t\t\t},\n\t\t},\n\t\ttest{\n\t\t\tname: \"reset Read\",\n\t\t\tsetup: func(t *testing.T) Tracer {\n\t\t\t\terr := errors.New(\"things broke :(\")\n\t\t\t\terr2 := xerrors.Errorf(\"aw shucks: %w\", err)\n\t\t\t\terr3 := xerrors.Errorf(\"I tried very hard and failed: %w\", err2)\n\t\t\t\ttracer, constructErr := NewTracer(err3)\n\n\t\t\t\treturn handleSetupError(t, tracer, constructErr)\n\t\t\t},\n\t\t\ttestFunc: func(t *testing.T, tracer Tracer) {\n\t\t\t\tbuffer := make([]byte, 5)\n\t\t\t\tn, err := tracer.Read(buffer)\n\t\t\t\tassert.Nil(t, err)\n\t\t\t\tassert.Equal(t, 5, n)\n\t\t\t\tassert.Equal(t, \"thing\", string(buffer))\n\t\t\t\t// Make sure the next error we read is not \"things broke :(\"\n\t\t\t\tmessage, err := tracer.ReadNext()\n\t\t\t\tassert.Nil(t, err)\n\t\t\t\tassert.Equal(t, 1, strings.Count(message, \"aw shucks\"))\n\n\t\t\t\t// Make sure the next call to Read does not pick up where it left off\n\t\t\t\tn, err = tracer.Read(buffer)\n\t\t\t\tassert.Nil(t, err)\n\t\t\t\tassert.Equal(t, 5, n)\n\t\t\t\tassert.Equal(t, \"I tri\", string(buffer))\n\t\t\t},\n\t\t},\n\t}\n\n\trunTestTable(t, tests)\n}\n\nfunc TestTracer_Read(t *testing.T) {\n\ttests := []test{\n\t\ttest{\n\t\t\tname: \"no errors\",\n\t\t\tsetup: func(t *testing.T) Tracer {\n\t\t\t\ttracer, constructErr := NewTracer(nil)\n\n\t\t\t\treturn handleSetupError(t, tracer, constructErr)\n\t\t\t},\n\t\t\ttestFunc: func(t *testing.T, tracer Tracer) {\n\t\t\t\tbuffer := make([]byte, 15)\n\t\t\t\tn, err := tracer.Read(buffer)\n\t\t\t\tassert.Equal(t, 0, n)\n\t\t\t\tassert.Equal(t, err, io.EOF)\n\t\t\t\tassert.Equal(t, make([]byte, 15), buffer)\n\t\t\t},\n\t\t},\n\t\ttest{\n\t\t\tname: \"one error, full read\",\n\t\t\tsetup: func(t *testing.T) Tracer {\n\t\t\t\terr := errors.New(\"things broke :(\")\n\t\t\t\ttracer, constructErr := NewTracer(err)\n\n\t\t\t\treturn handleSetupError(t, tracer, constructErr)\n\t\t\t},\n\t\t\ttestFunc: func(t *testing.T, tracer Tracer) {\n\t\t\t\tbuffer := make([]byte, len(\"things broke :(\"))\n\t\t\t\tn, err := tracer.Read(buffer)\n\t\t\t\tassert.Equal(t, len(buffer), n)\n\t\t\t\tassert.Nil(t, err)\n\t\t\t\tassert.Equal(t, \"things broke :(\", string(buffer))\n\n\t\t\t\tn, err = tracer.Read(buffer)\n\t\t\t\tassert.Equal(t, 0, n)\n\t\t\t\tassert.Equal(t, err, io.EOF)\n\t\t\t\tassert.Equal(t, \"things broke :(\", string(buffer))\n\t\t\t},\n\t\t},\n\t\ttest{\n\t\t\tname: \"one error, many reads\",\n\t\t\tsetup: func(t *testing.T) Tracer {\n\t\t\t\terr := errors.New(\"things broke :(\")\n\t\t\t\ttracer, constructErr := NewTracer(err)\n\n\t\t\t\treturn handleSetupError(t, tracer, constructErr)\n\t\t\t},\n\t\t\ttestFunc: func(t *testing.T, tracer Tracer) {\n\t\t\t\tbuffer := make([]byte, 5)\n\t\t\t\tfullBuffer := make([]byte, 0)\n\t\t\t\ttotalN := 0\n\t\t\t\tn, err := 0, error(nil)\n\t\t\t\tfor {\n\t\t\t\t\tn, err = tracer.Read(buffer)\n\t\t\t\t\ttotalN += n\n\t\t\t\t\tif err == io.EOF {\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\n\t\t\t\t\tfullBuffer = append(fullBuffer, buffer...)\n\t\t\t\t\tassert.Nil(t, err)\n\t\t\t\t\tassert.True(t, func() bool {\n\t\t\t\t\t\treturn n <= len(buffer) && n > 0\n\t\t\t\t\t}())\n\t\t\t\t}\n\n\t\t\t\tassert.Equal(t, len(fullBuffer), totalN)\n\t\t\t\tassert.Equal(t, 0, n)\n\t\t\t\tassert.Equal(t, \"things broke :(\", string(fullBuffer))\n\n\t\t\t\tn, err = tracer.Read(buffer)\n\t\t\t\tassert.Equal(t, n, 0)\n\t\t\t\tassert.Equal(t, io.EOF, err)\n\t\t\t\tassert.Equal(t, \"things broke :(\", string(fullBuffer))\n\t\t\t},\n\t\t},\n\t\ttest{\n\t\t\tname: \"many errors, one read\",\n\t\t\tsetup: func(t *testing.T) Tracer {\n\t\t\t\terr := errors.New(\"things broke :(\")\n\t\t\t\terr2 := xerrors.Errorf(\"aw shucks: %w\", err)\n\t\t\t\terr3 := xerrors.Errorf(\"I tried very hard and failed: %w\", err2)\n\t\t\t\ttracer, constructErr := NewTracer(err3)\n\n\t\t\t\treturn handleSetupError(t, tracer, constructErr)\n\t\t\t},\n\t\t\ttestFunc: func(t *testing.T, tracer Tracer) {\n\t\t\t\tbuffer := make([]byte, len(\"things broke :(\")*2)\n\t\t\t\tn, err := tracer.Read(buffer)\n\t\t\t\tassert.Equal(t, len(buffer)/2, n)\n\t\t\t\tassert.Nil(t, err)\n\t\t\t\t// No matter our buffer size, we only want to get the first error back\n\t\t\t\t// Even though there are many errors, because we are only reading the first one, adn that one is just\n\t\t\t\t// a simple error, we don't have to worry about there being contents other than the error message.\n\t\t\t\texpectedBuffer := make([]byte, len(buffer))\n\t\t\t\tfor i, char := range \"things broke :(\" {\n\t\t\t\t\texpectedBuffer[i] = byte(char)\n\t\t\t\t}\n\t\t\t\tassert.Equal(t, string(expectedBuffer), string(buffer))\n\t\t\t},\n\t\t},\n\t\ttest{\n\t\t\tname: \"many errors, many reads\",\n\t\t\tsetup: func(t *testing.T) Tracer {\n\t\t\t\terr := errors.New(\"things broke :(\")\n\t\t\t\terr2 := xerrors.Errorf(\"aw shucks: %w\", err)\n\t\t\t\terr3 := xerrors.Errorf(\"I tried very hard and failed: %w\", err2)\n\t\t\t\ttracer, constructErr := NewTracer(err3)\n\n\t\t\t\treturn handleSetupError(t, tracer, constructErr)\n\t\t\t},\n\t\t\ttestFunc: func(t *testing.T, tracer Tracer) {\n\t\t\t\texpectedErrors := []string{\n\t\t\t\t\t\"things broke :(\",\n\t\t\t\t\t\"aw shucks\",\n\t\t\t\t\t\"I tried very hard and failed\",\n\t\t\t\t}\n\t\t\t\tbuffer := make([]byte, 5)\n\t\t\t\tfullBuffer := make([]byte, 0)\n\t\t\t\ttotalN := 0\n\t\t\t\tn, err := 0, error(nil)\n\t\t\t\tfor {\n\t\t\t\t\tn, err = tracer.Read(buffer)\n\t\t\t\t\ttotalN += n\n\t\t\t\t\tif err == io.EOF {\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\n\t\t\t\t\tfullBuffer = append(fullBuffer, buffer[:n]...)\n\t\t\t\t\tassert.Nil(t, err)\n\t\t\t\t\tassert.True(t, func() bool {\n\t\t\t\t\t\treturn n <= len(buffer) && n > 0\n\t\t\t\t\t}())\n\t\t\t\t}\n\n\t\t\t\tassert.Equal(t, len(fullBuffer), totalN)\n\t\t\t\tassert.Equal(t, 0, n)\n\t\t\t\tfor _, expectedError := range expectedErrors {\n\t\t\t\t\tassert.Equal(t, 1, bytes.Count(fullBuffer, []byte(expectedError)))\n\t\t\t\t}\n\n\t\t\t\tfullBufferClone := make([]byte, len(fullBuffer))\n\t\t\t\tcopy(fullBufferClone, fullBuffer)\n\t\t\t\tn, err = tracer.Read(buffer)\n\t\t\t\tassert.Equal(t, n, 0)\n\t\t\t\tassert.Equal(t, io.EOF, err)\n\t\t\t\tassert.Equal(t, string(fullBufferClone), string(fullBuffer))\n\t\t\t},\n\t\t},\n\t\ttest{\n\t\t\tname: \"many errors, test error boundary\",\n\t\t\tsetup: func(t *testing.T) Tracer {\n\t\t\t\terr := errors.New(\"things broke :(\")\n\t\t\t\terr2 := xerrors.Errorf(\"aw shucks: %w\", err)\n\t\t\t\ttracer, constructErr := NewTracer(err2)\n\n\t\t\t\treturn handleSetupError(t, tracer, constructErr)\n\t\t\t},\n\t\t\ttestFunc: func(t *testing.T, tracer Tracer) {\n\t\t\t\tbuffer := make([]byte, 6)\n\t\t\t\tfullBuffer := make([]byte, 0, 18)\n\t\t\t\t// Exhaust the buffer, and ensure we don't hit an io.EOF\n\t\t\t\tfor i := 0; i < 3; i++ {\n\t\t\t\t\tn, err := tracer.Read(buffer)\n\t\t\t\t\tassert.True(t, func() bool {\n\t\t\t\t\t\treturn n > 0\n\t\t\t\t\t}())\n\t\t\t\t\tassert.Nil(t, err)\n\t\t\t\t\tfor j := 0; j < n; j++ {\n\t\t\t\t\t\tfullBuffer = append(fullBuffer, buffer[j])\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// Ensure that we ONLY have the expected error\n\t\t\t\tassert.Equal(t, \"things broke :(\", string(bytes.TrimRight(fullBuffer, \"\\x00\")))\n\t\t\t},\n\t\t},\n\t\ttest{\n\t\t\tname: \"empty error\",\n\t\t\tsetup: func(t *testing.T) Tracer {\n\t\t\t\terr := errors.New(\"\")\n\t\t\t\ttracer, constructErr := NewTracer(err)\n\n\t\t\t\treturn handleSetupError(t, tracer, constructErr)\n\t\t\t},\n\t\t\ttestFunc: func(t *testing.T, tracer Tracer) {\n\t\t\t\tbuffer := make([]byte, len(emptyError))\n\t\t\t\tn, err := tracer.Read(buffer)\n\t\t\t\tassert.Equal(t, len(buffer), n)\n\t\t\t\tassert.Nil(t, err)\n\t\t\t\tassert.Equal(t, emptyError, string(buffer))\n\n\t\t\t\tn, err = tracer.Read(buffer)\n\t\t\t\tassert.Equal(t, 0, n)\n\t\t\t\tassert.Equal(t, err, io.EOF)\n\t\t\t\tassert.Equal(t, emptyError, string(buffer))\n\t\t\t},\n\t\t},\n\t}\n\n\trunTestTable(t, tests)\n}\n\ntype capsFormatter struct{}\n\nfunc (formatter capsFormatter) FormatTrace(previous []string, message string) string {\n\treturn strings.ToUpper(message)\n}\n\nfunc ExampleNewTracer() {\n\tbaseErr := errors.New(\"aw shucks, something broke\")\n\t// capsFormatter is a custom formatter that simply applies strings.ToUpper to all messages\n\ttracer, err := NewTracer(baseErr, Formatter(capsFormatter{}))\n\tif err != nil {\n\t\tpanic(\"can not make tracer\")\n\t}\n\toutput, err := tracer.ReadNext()\n\tif err != nil {\n\t\tpanic(\"can not read from tracer\")\n\t}\n\n\tfmt.Println(output)\n\t// Output: AW SHUCKS, SOMETHING BROKE\n}\n"}}
[Info - 7:33:01 PM] Build info
----------
version v0.1.1-cmd.gopls, built in $GOPATH mode
Go info
-------
go version go1.11.11 linux/amd64
GOARCH="amd64"
GOBIN=""
GOCACHE="/home/nick/.cache/go-build"
GOEXE=""
GOFLAGS=""
GOHOSTARCH="amd64"
GOHOSTOS="linux"
GOOS="linux"
GOPATH="/home/nick/Documents/code/golang"
GOPROXY=""
GORACE=""
GOROOT="/usr/lib64/go/1.11"
GOTMPDIR=""
GOTOOLDIR="/usr/lib64/go/1.11/pkg/tool/linux_amd64"
GCCGO="gccgo"
CC="gcc"
CXX="g++"
CGO_ENABLED="1"
GOMOD="/home/nick/Documents/code/xtrace/go.mod"
CGO_CFLAGS="-g -O2"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-g -O2"
CGO_FFLAGS="-g -O2"
CGO_LDFLAGS="-g -O2"
PKG_CONFIG="pkg-config"
GOGCCFLAGS="-fPIC -m64 -pthread -fmessage-length=0 -fdebug-prefix-map=/tmp/go-build600949253=/tmp/go-build -gno-record-gcc-switches"
[Trace - 7:33:02 PM] Sending request 'textDocument/documentSymbol - (1)'.
Params: {"textDocument":{"uri":"file:///home/nick/Documents/code/xtrace/format.go"}}
[Trace - 7:33:02 PM] Received response 'textDocument/documentSymbol - (1)' in 407ms.
Params: [{"name":"TraceFormatter","detail":"interface{...}","kind":11,"range":{"start":{"line":8,"character":5},"end":{"line":12,"character":1}},"selectionRange":{"start":{"line":8,"character":5},"end":{"line":8,"character":19}},"children":[{"name":"FormatTrace","kind":6,"range":{"start":{"line":11,"character":1},"end":{"line":11,"character":62}},"selectionRange":{"start":{"line":11,"character":1},"end":{"line":11,"character":12}}}]},{"name":"NilFormatter","detail":"struct{...}","kind":23,"range":{"start":{"line":18,"character":5},"end":{"line":18,"character":26}},"selectionRange":{"start":{"line":18,"character":5},"end":{"line":18,"character":17}},"children":[{"name":"FormatTrace","detail":"(previousMessages []string, message string)","kind":6,"range":{"start":{"line":21,"character":0},"end":{"line":23,"character":1}},"selectionRange":{"start":{"line":21,"character":30},"end":{"line":21,"character":41}}}]},{"name":"NestedMessageFormatter","detail":"struct{...}","kind":23,"range":{"start":{"line":28,"character":5},"end":{"line":30,"character":1}},"selectionRange":{"start":{"line":28,"character":5},"end":{"line":28,"character":27}},"children":[{"name":"Indentation","detail":"string","kind":8,"range":{"start":{"line":29,"character":1},"end":{"line":29,"character":19}},"selectionRange":{"start":{"line":29,"character":1},"end":{"line":29,"character":12}}},{"name":"FormatTrace","detail":"(previousMessages []string, message string)","kind":6,"range":{"start":{"line":33,"character":0},"end":{"line":49,"character":1}},"selectionRange":{"start":{"line":33,"character":40},"end":{"line":33,"character":51}}}]},{"name":"NewLineFormatter","detail":"struct{...}","kind":23,"range":{"start":{"line":52,"character":5},"end":{"line":60,"character":1}},"selectionRange":{"start":{"line":52,"character":5},"end":{"line":52,"character":21}},"children":[{"name":"Naive","detail":"bool","kind":8,"range":{"start":{"line":57,"character":1},"end":{"line":57,"character":11}},"selectionRange":{"start":{"line":57,"character":1},"end":{"line":57,"character":6}}},{"name":"lastRawMessage","detail":"string","kind":8,"range":{"start":{"line":59,"character":1},"end":{"line":59,"character":22}},"selectionRange":{"start":{"line":59,"character":1},"end":{"line":59,"character":15}}},{"name":"newLineTerminateMessage","detail":"(message string)","kind":6,"range":{"start":{"line":101,"character":0},"end":{"line":110,"character":1}},"selectionRange":{"start":{"line":101,"character":35},"end":{"line":101,"character":58}}},{"name":"FormatTrace","detail":"(previousMessages []string, message string)","kind":6,"range":{"start":{"line":63,"character":0},"end":{"line":76,"character":1}},"selectionRange":{"start":{"line":63,"character":35},"end":{"line":63,"character":46}}},{"name":"stripNewlines","detail":"(message string)","kind":6,"range":{"start":{"line":79,"character":0},"end":{"line":98,"character":1}},"selectionRange":{"start":{"line":79,"character":35},"end":{"line":79,"character":48}}}]}]
[Trace - 7:33:02 PM] Sending request 'textDocument/documentSymbol - (2)'.
Params: {"textDocument":{"uri":"file:///home/nick/Documents/code/xtrace/tracer_test.go"}}
[Trace - 7:33:02 PM] Received notification 'window/logMessage'.
Params: {"type":1,"message":"unable to check package for file:///home/nick/Documents/code/xtrace/tracer_test.go: no packages found for file:///home/nick/Documents/code/xtrace/tracer_test.go"}
[Trace - 7:33:02 PM] Received notification 'window/logMessage'.
Params: {"type":1,"message":"unable to check package for file:///home/nick/Documents/code/xtrace/tracer_test.go: no packages found for file:///home/nick/Documents/code/xtrace/tracer_test.go"}
[Error - 7:33:02 PM] send textDocument/documentSymbol#2 no AST for file:///home/nick/Documents/code/xtrace/tracer_test.go
[Trace - 7:33:02 PM] Sending request 'textDocument/codeAction - (3)'.
Params: {"textDocument":{"uri":"file:///home/nick/Documents/code/xtrace/tracer_test.go"},"range":{"start":{"line":2,"character":7},"end":{"line":2,"character":7}},"context":{"diagnostics":[]}}
[Error - 7:33:02 PM] unable to check package for file:///home/nick/Documents/code/xtrace/tracer_test.go: no packages found for file:///home/nick/Documents/code/xtrace/tracer_test.go
[Trace - 7:33:02 PM] Received notification 'window/logMessage'.
Params: {"type":1,"message":"unable to check package for file:///home/nick/Documents/code/xtrace/tracer_test.go: no packages found for file:///home/nick/Documents/code/xtrace/tracer_test.go"}
[Trace - 7:33:02 PM] Received notification 'window/logMessage'.
Params: {"type":1,"message":"unable to check package for file:///home/nick/Documents/code/xtrace/tracer_test.go: no packages found for file:///home/nick/Documents/code/xtrace/tracer_test.go"}
[Trace - 7:33:02 PM] Received notification 'window/logMessage'.
Params: {"type":1,"message":"unable to check package for file:///home/nick/Documents/code/xtrace/tracer_test.go: no packages found for file:///home/nick/Documents/code/xtrace/tracer_test.go"}
[Trace - 7:33:02 PM] Received notification 'window/logMessage'.
Params: {"type":1,"message":"unable to check package for file:///home/nick/Documents/code/xtrace/tracer_test.go: no packages found for file:///home/nick/Documents/code/xtrace/tracer_test.go"}
[Trace - 7:33:02 PM] Received notification 'textDocument/publishDiagnostics'.
Params: {"uri":"file:///home/nick/Documents/code/xtrace/tracer_test.go","diagnostics":[{"range":{"start":{"line":0,"character":0},"end":{"line":0,"character":0}},"severity":1,"source":"LSP","message":"file:///home/nick/Documents/code/xtrace/tracer_test.go is not part of a package"}]}
[Trace - 7:33:02 PM] Received notification 'textDocument/publishDiagnostics'.
Params: {"uri":"file:///home/nick/Documents/code/xtrace/error.go","diagnostics":[]}
[Trace - 7:33:02 PM] Received notification 'textDocument/publishDiagnostics'.
Params: {"uri":"file:///home/nick/Documents/code/xtrace/format.go","diagnostics":[]}
[Trace - 7:33:02 PM] Received notification 'textDocument/publishDiagnostics'.
Params: {"uri":"file:///home/nick/Documents/code/xtrace/tracer.go","diagnostics":[]}
[Trace - 7:33:02 PM] Received notification 'textDocument/publishDiagnostics'.
Params: {"uri":"file:///home/nick/Documents/code/xtrace/traceroptions.go","diagnostics":[]}
[Trace - 7:33:02 PM] Received notification 'window/logMessage'.
Params: {"type":1,"message":"unable to check package for file:///home/nick/Documents/code/xtrace/tracer_test.go: no packages found for file:///home/nick/Documents/code/xtrace/tracer_test.go"}
[Error - 7:33:02 PM] send textDocument/codeAction#3 no file information for file:///home/nick/Documents/code/xtrace/tracer_test.go
[Trace - 7:33:02 PM] Sending request 'textDocument/documentLink - (4)'.
Params: {"textDocument":{"uri":"file:///home/nick/Documents/code/xtrace/format.go"}}
[Trace - 7:33:02 PM] Received response 'textDocument/documentLink - (4)' in 550ms.
Params: [{"range":{"start":{"line":3,"character":1},"end":{"line":3,"character":9}},"target":"https://godoc.org/regexp"},{"range":{"start":{"line":4,"character":1},"end":{"line":4,"character":10}},"target":"https://godoc.org/strings"}]
[Trace - 7:33:02 PM] Sending request 'textDocument/documentLink - (5)'.
Params: {"textDocument":{"uri":"file:///home/nick/Documents/code/xtrace/tracer_test.go"}}
[Trace - 7:33:02 PM] Received notification 'window/logMessage'.
Params: {"type":1,"message":"unable to check package for file:///home/nick/Documents/code/xtrace/tracer_test.go: no packages found for file:///home/nick/Documents/code/xtrace/tracer_test.go"}
[Error - 7:33:02 PM] unable to check package for file:///home/nick/Documents/code/xtrace/tracer_test.go: no packages found for file:///home/nick/Documents/code/xtrace/tracer_test.go
[Trace - 7:33:02 PM] Received notification 'window/logMessage'.
Params: {"type":1,"message":"unable to check package for file:///home/nick/Documents/code/xtrace/tracer_test.go: no packages found for file:///home/nick/Documents/code/xtrace/tracer_test.go"}
[Error - 7:33:02 PM] send textDocument/documentLink#5 no AST for file:///home/nick/Documents/code/xtrace/tracer_test.go
[Trace - 7:33:02 PM] Sending notification '$/cancelRequest'.
Params: {"id":4}
[Trace - 7:33:02 PM] Sending request 'textDocument/documentLink - (6)'.
Params: {"textDocument":{"uri":"file:///home/nick/Documents/code/xtrace/format.go"}}
[Trace - 7:33:02 PM] Received response 'textDocument/documentLink - (6)' in 524ms.
Params: [{"range":{"start":{"line":3,"character":1},"end":{"line":3,"character":9}},"target":"https://godoc.org/regexp"},{"range":{"start":{"line":4,"character":1},"end":{"line":4,"character":10}},"target":"https://godoc.org/strings"}]
[Trace - 7:33:02 PM] Sending notification '$/cancelRequest'.
Params: {"id":5}
[Trace - 7:33:02 PM] Sending request 'textDocument/documentLink - (7)'.
Params: {"textDocument":{"uri":"file:///home/nick/Documents/code/xtrace/tracer_test.go"}}
[Trace - 7:33:02 PM] Received notification 'window/logMessage'.
Params: {"type":1,"message":"unable to check package for file:///home/nick/Documents/code/xtrace/tracer_test.go: no packages found for file:///home/nick/Documents/code/xtrace/tracer_test.go"}
[Trace - 7:33:02 PM] Received notification 'window/logMessage'.
Params: {"type":1,"message":"unable to check package for file:///home/nick/Documents/code/xtrace/tracer_test.go: no packages found for file:///home/nick/Documents/code/xtrace/tracer_test.go"}
[Error - 7:33:02 PM] send textDocument/documentLink#7 no AST for file:///home/nick/Documents/code/xtrace/tracer_test.go
[Error - 7:33:02 PM] Request textDocument/documentSymbol failed.
Message: no AST for file:///home/nick/Documents/code/xtrace/tracer_test.go
Code: 0
[Error - 7:33:02 PM] unable to check package for file:///home/nick/Documents/code/xtrace/tracer_test.go: no packages found for file:///home/nick/Documents/code/xtrace/tracer_test.go
[Error - 7:33:02 PM] unable to check package for file:///home/nick/Documents/code/xtrace/tracer_test.go: no packages found for file:///home/nick/Documents/code/xtrace/tracer_test.go
[Error - 7:33:02 PM] unable to check package for file:///home/nick/Documents/code/xtrace/tracer_test.go: no packages found for file:///home/nick/Documents/code/xtrace/tracer_test.go
[Error - 7:33:02 PM] unable to check package for file:///home/nick/Documents/code/xtrace/tracer_test.go: no packages found for file:///home/nick/Documents/code/xtrace/tracer_test.go
[Error - 7:33:02 PM] unable to check package for file:///home/nick/Documents/code/xtrace/tracer_test.go: no packages found for file:///home/nick/Documents/code/xtrace/tracer_test.go
[Error - 7:33:02 PM] Request textDocument/codeAction failed.
Message: no file information for file:///home/nick/Documents/code/xtrace/tracer_test.go
Code: 0
[Error - 7:33:02 PM] unable to check package for file:///home/nick/Documents/code/xtrace/tracer_test.go: no packages found for file:///home/nick/Documents/code/xtrace/tracer_test.go
[Error - 7:33:02 PM] unable to check package for file:///home/nick/Documents/code/xtrace/tracer_test.go: no packages found for file:///home/nick/Documents/code/xtrace/tracer_test.go
[Error - 7:33:02 PM] Request textDocument/documentLink failed.
Message: no AST for file:///home/nick/Documents/code/xtrace/tracer_test.go
Code: 0
[Error - 7:33:02 PM] unable to check package for file:///home/nick/Documents/code/xtrace/tracer_test.go: no packages found for file:///home/nick/Documents/code/xtrace/tracer_test.go
[Error - 7:33:02 PM] unable to check package for file:///home/nick/Documents/code/xtrace/tracer_test.go: no packages found for file:///home/nick/Documents/code/xtrace/tracer_test.go
[Error - 7:33:02 PM] Request textDocument/documentLink failed.
Message: no AST for file:///home/nick/Documents/code/xtrace/tracer_test.go
Code: 0
[Trace - 7:33:02 PM] Sending request 'textDocument/codeAction - (8)'.
Params: {"textDocument":{"uri":"file:///home/nick/Documents/code/xtrace/tracer_test.go"},"range":{"start":{"line":2,"character":7},"end":{"line":2,"character":7}},"context":{"diagnostics":[]}}
[Trace - 7:33:02 PM] Received notification 'window/logMessage'.
Params: {"type":1,"message":"unable to check package for file:///home/nick/Documents/code/xtrace/tracer_test.go: no packages found for file:///home/nick/Documents/code/xtrace/tracer_test.go"}
[Trace - 7:33:02 PM] Received notification 'window/logMessage'.
Params: {"type":1,"message":"unable to check package for file:///home/nick/Documents/code/xtrace/tracer_test.go: no packages found for file:///home/nick/Documents/code/xtrace/tracer_test.go"}
[Trace - 7:33:02 PM] Received notification 'window/logMessage'.
Params: {"type":1,"message":"unable to check package for file:///home/nick/Documents/code/xtrace/tracer_test.go: no packages found for file:///home/nick/Documents/code/xtrace/tracer_test.go"}
[Error - 7:33:02 PM] send textDocument/codeAction#8 no file information for file:///home/nick/Documents/code/xtrace/tracer_test.go
[Error - 7:33:02 PM] unable to check package for file:///home/nick/Documents/code/xtrace/tracer_test.go: no packages found for file:///home/nick/Documents/code/xtrace/tracer_test.go
[Error - 7:33:02 PM] unable to check package for file:///home/nick/Documents/code/xtrace/tracer_test.go: no packages found for file:///home/nick/Documents/code/xtrace/tracer_test.go
[Error - 7:33:02 PM] unable to check package for file:///home/nick/Documents/code/xtrace/tracer_test.go: no packages found for file:///home/nick/Documents/code/xtrace/tracer_test.go
[Error - 7:33:02 PM] Request textDocument/codeAction failed.
Message: no file information for file:///home/nick/Documents/code/xtrace/tracer_test.go
Code: 0
[Info - 7:24:16 PM] Build info
----------
version v0.1.1-cmd.gopls, built in $GOPATH mode
Go info
-------
go version go1.11.11 linux/amd64
GOARCH="amd64"
GOBIN=""
GOCACHE="/home/nick/.cache/go-build"
GOEXE=""
GOFLAGS=""
GOHOSTARCH="amd64"
GOHOSTOS="linux"
GOOS="linux"
GOPATH="/home/nick/Documents/code/golang"
GOPROXY=""
GORACE=""
GOROOT="/usr/lib64/go/1.11"
GOTMPDIR=""
GOTOOLDIR="/usr/lib64/go/1.11/pkg/tool/linux_amd64"
GCCGO="gccgo"
CC="gcc"
CXX="g++"
CGO_ENABLED="1"
GOMOD="/home/nick/Documents/code/xtrace/go.mod"
CGO_CFLAGS="-g -O2"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-g -O2"
CGO_FFLAGS="-g -O2"
CGO_LDFLAGS="-g -O2"
PKG_CONFIG="pkg-config"
GOGCCFLAGS="-fPIC -m64 -pthread -fmessage-length=0 -fdebug-prefix-map=/tmp/go-build440069642=/tmp/go-build -gno-record-gcc-switches"
[Error - 7:24:16 PM] unable to check package for file:///home/nick/Documents/code/xtrace/tracer_test.go: no packages found for file:///home/nick/Documents/code/xtrace/tracer_test.go
[Error - 7:24:16 PM] unable to check package for file:///home/nick/Documents/code/xtrace/tracer_test.go: no packages found for file:///home/nick/Documents/code/xtrace/tracer_test.go
[Error - 7:24:16 PM] unable to check package for file:///home/nick/Documents/code/xtrace/tracer_test.go: no packages found for file:///home/nick/Documents/code/xtrace/tracer_test.go
[Error - 7:24:16 PM] unable to check package for file:///home/nick/Documents/code/xtrace/tracer_test.go: no packages found for file:///home/nick/Documents/code/xtrace/tracer_test.go
[Error - 7:24:16 PM] Request textDocument/documentSymbol failed.
Message: no AST for file:///home/nick/Documents/code/xtrace/tracer_test.go
Code: 0
[Error - 7:24:16 PM] unable to check package for file:///home/nick/Documents/code/xtrace/tracer_test.go: no packages found for file:///home/nick/Documents/code/xtrace/tracer_test.go
[Error - 7:24:16 PM] unable to check package for file:///home/nick/Documents/code/xtrace/tracer_test.go: no packages found for file:///home/nick/Documents/code/xtrace/tracer_test.go
[Error - 7:24:16 PM] unable to check package for file:///home/nick/Documents/code/xtrace/tracer_test.go: no packages found for file:///home/nick/Documents/code/xtrace/tracer_test.go
[Error - 7:24:16 PM] Request textDocument/codeAction failed.
Message: no file information for file:///home/nick/Documents/code/xtrace/tracer_test.go
Code: 0
[Error - 7:24:16 PM] unable to check package for file:///home/nick/Documents/code/xtrace/tracer_test.go: no packages found for file:///home/nick/Documents/code/xtrace/tracer_test.go
[Error - 7:24:16 PM] unable to check package for file:///home/nick/Documents/code/xtrace/tracer_test.go: no packages found for file:///home/nick/Documents/code/xtrace/tracer_test.go
[Error - 7:24:16 PM] Request textDocument/documentLink failed.
Message: no AST for file:///home/nick/Documents/code/xtrace/tracer_test.go
Code: 0
[Error - 7:24:16 PM] unable to check package for file:///home/nick/Documents/code/xtrace/tracer_test.go: no packages found for file:///home/nick/Documents/code/xtrace/tracer_test.go
[Error - 7:24:16 PM] unable to check package for file:///home/nick/Documents/code/xtrace/tracer_test.go: no packages found for file:///home/nick/Documents/code/xtrace/tracer_test.go
[Error - 7:24:16 PM] Request textDocument/documentLink failed.
Message: no AST for file:///home/nick/Documents/code/xtrace/tracer_test.go
Code: 0
[Error - 7:24:16 PM] unable to check package for file:///home/nick/Documents/code/xtrace/tracer_test.go: no packages found for file:///home/nick/Documents/code/xtrace/tracer_test.go
[Error - 7:24:16 PM] unable to check package for file:///home/nick/Documents/code/xtrace/tracer_test.go: no packages found for file:///home/nick/Documents/code/xtrace/tracer_test.go
[Error - 7:24:16 PM] unable to check package for file:///home/nick/Documents/code/xtrace/tracer_test.go: no packages found for file:///home/nick/Documents/code/xtrace/tracer_test.go
[Error - 7:24:16 PM] Request textDocument/codeAction failed.
Message: no file information for file:///home/nick/Documents/code/xtrace/tracer_test.go
Code: 0
[Error - 7:24:18 PM] unable to check package for file:///home/nick/Documents/code/xtrace/tracer_test.go: no packages found for file:///home/nick/Documents/code/xtrace/tracer_test.go
[Error - 7:24:18 PM] unable to check package for file:///home/nick/Documents/code/xtrace/tracer_test.go: no packages found for file:///home/nick/Documents/code/xtrace/tracer_test.go
[Error - 7:24:18 PM] unable to check package for file:///home/nick/Documents/code/xtrace/tracer_test.go: no packages found for file:///home/nick/Documents/code/xtrace/tracer_test.go
[Error - 7:24:18 PM] Request textDocument/codeAction failed.
Message: no file information for file:///home/nick/Documents/code/xtrace/tracer_test.go
Code: 0
[Error - 7:24:18 PM] unable to check package for file:///home/nick/Documents/code/xtrace/tracer_test.go: no packages found for file:///home/nick/Documents/code/xtrace/tracer_test.go
[Error - 7:24:18 PM] unable to check package for file:///home/nick/Documents/code/xtrace/tracer_test.go: no packages found for file:///home/nick/Documents/code/xtrace/tracer_test.go
[Error - 7:24:18 PM] Request textDocument/hover failed.
Message: no AST for file:///home/nick/Documents/code/xtrace/tracer_test.go
Code: 0
[Error - 7:24:43 PM] unable to check package for file:///home/nick/Documents/code/xtrace/tracer_test.go: no packages found for file:///home/nick/Documents/code/xtrace/tracer_test.go
[Error - 7:24:43 PM] unable to check package for file:///home/nick/Documents/code/xtrace/tracer_test.go: no packages found for file:///home/nick/Documents/code/xtrace/tracer_test.go
[Error - 7:24:43 PM] unable to check package for file:///home/nick/Documents/code/xtrace/tracer_test.go: no packages found for file:///home/nick/Documents/code/xtrace/tracer_test.go
[Error - 7:24:43 PM] Request textDocument/codeAction failed.
Message: no package for file file:///home/nick/Documents/code/xtrace/tracer_test.go
Code: 0
[Error - 7:25:19 PM] Request textDocument/hover failed.
Message: no identifier found
Code: 0
[Error - 7:25:20 PM] unable to check package for file:///home/nick/Documents/code/xtrace/tracer_test.go: no packages found for file:///home/nick/Documents/code/xtrace/tracer_test.go
[Error - 7:25:20 PM] unable to check package for file:///home/nick/Documents/code/xtrace/tracer_test.go: no packages found for file:///home/nick/Documents/code/xtrace/tracer_test.go
[Error - 7:25:20 PM] unable to check package for file:///home/nick/Documents/code/xtrace/tracer_test.go: no packages found for file:///home/nick/Documents/code/xtrace/tracer_test.go
[Error - 7:25:20 PM] Request textDocument/codeAction failed.
Message: no package for file file:///home/nick/Documents/code/xtrace/tracer_test.go
Code: 0
[Error - 7:25:20 PM] unable to check package for file:///home/nick/Documents/code/xtrace/tracer_test.go: no packages found for file:///home/nick/Documents/code/xtrace/tracer_test.go
[Error - 7:25:20 PM] unable to check package for file:///home/nick/Documents/code/xtrace/tracer_test.go: no packages found for file:///home/nick/Documents/code/xtrace/tracer_test.go
[Error - 7:25:20 PM] unable to check package for file:///home/nick/Documents/code/xtrace/tracer_test.go: no packages found for file:///home/nick/Documents/code/xtrace/tracer_test.go
[Error - 7:25:20 PM] Request textDocument/codeAction failed.
Message: no file information for file:///home/nick/Documents/code/xtrace/tracer_test.go
Code: 0
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment