mirror of
https://github.com/golang/go
synced 2024-11-19 00:44:40 -07:00
55b11c713e
Diagnostics should be cleared for files which are (1) deleted on disk and not open in the editor, and (2) closed and only open in the editor. Enable the corresponding regression test, and fix a few issues raised by staticcheck. Fixes golang/go#37049 Change-Id: Iff736a7f6c3eaacda4237c2e4cf7926e9949dece Reviewed-on: https://go-review.googlesource.com/c/tools/+/220079 Run-TryBot: Rebecca Stambler <rstambler@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Heschi Kreinick <heschi@google.com>
105 lines
2.5 KiB
Go
105 lines
2.5 KiB
Go
// Copyright 2020 The Go Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style
|
|
// license that can be found in the LICENSE file.
|
|
|
|
package regtest
|
|
|
|
import (
|
|
"context"
|
|
"testing"
|
|
|
|
"golang.org/x/tools/internal/lsp/fake"
|
|
)
|
|
|
|
const exampleProgram = `
|
|
-- go.mod --
|
|
module mod
|
|
|
|
go 1.12
|
|
-- main.go --
|
|
package main
|
|
|
|
import "fmt"
|
|
|
|
func main() {
|
|
fmt.Println("Hello World.")
|
|
}`
|
|
|
|
func TestDiagnosticErrorInEditedFile(t *testing.T) {
|
|
t.Parallel()
|
|
runner.Run(t, exampleProgram, func(ctx context.Context, t *testing.T, env *Env) {
|
|
// Deleting the 'n' at the end of Println should generate a single error
|
|
// diagnostic.
|
|
edit := fake.NewEdit(5, 11, 5, 12, "")
|
|
env.OpenFile("main.go")
|
|
env.EditBuffer("main.go", edit)
|
|
env.Await(DiagnosticAt("main.go", 5, 5))
|
|
})
|
|
}
|
|
|
|
const brokenFile = `package main
|
|
|
|
const Foo = "abc
|
|
`
|
|
|
|
func TestDiagnosticErrorInNewFile(t *testing.T) {
|
|
t.Parallel()
|
|
runner.Run(t, brokenFile, func(ctx context.Context, t *testing.T, env *Env) {
|
|
env.CreateBuffer("broken.go", brokenFile)
|
|
env.Await(DiagnosticAt("broken.go", 2, 12))
|
|
})
|
|
}
|
|
|
|
// badPackage contains a duplicate definition of the 'a' const.
|
|
const badPackage = `
|
|
-- go.mod --
|
|
module mod
|
|
|
|
go 1.12
|
|
-- a.go --
|
|
package consts
|
|
|
|
const a = 1
|
|
-- b.go --
|
|
package consts
|
|
|
|
const a = 2
|
|
`
|
|
|
|
func TestDiagnosticClearingOnEdit(t *testing.T) {
|
|
t.Parallel()
|
|
runner.Run(t, badPackage, func(ctx context.Context, t *testing.T, env *Env) {
|
|
env.OpenFile("b.go")
|
|
env.Await(DiagnosticAt("a.go", 2, 6), DiagnosticAt("b.go", 2, 6))
|
|
|
|
// Fix the error by editing the const name in b.go to `b`.
|
|
edit := fake.NewEdit(2, 6, 2, 7, "b")
|
|
env.EditBuffer("b.go", edit)
|
|
env.Await(EmptyDiagnostics("a.go"), EmptyDiagnostics("b.go"))
|
|
})
|
|
}
|
|
|
|
func TestDiagnosticClearingOnDelete(t *testing.T) {
|
|
t.Parallel()
|
|
runner.Run(t, badPackage, func(ctx context.Context, t *testing.T, env *Env) {
|
|
env.OpenFile("a.go")
|
|
env.Await(DiagnosticAt("a.go", 2, 6), DiagnosticAt("b.go", 2, 6))
|
|
env.RemoveFileFromWorkspace("b.go")
|
|
|
|
env.Await(EmptyDiagnostics("a.go"), EmptyDiagnostics("b.go"))
|
|
})
|
|
}
|
|
|
|
func TestDiagnosticClearingOnClose(t *testing.T) {
|
|
t.Parallel()
|
|
runner.Run(t, badPackage, func(ctx context.Context, t *testing.T, env *Env) {
|
|
env.E.CreateBuffer(env.ctx, "c.go", `package consts
|
|
|
|
const a = 3`)
|
|
env.Await(DiagnosticAt("a.go", 2, 6), DiagnosticAt("b.go", 2, 6), DiagnosticAt("c.go", 2, 6))
|
|
env.E.CloseBuffer(env.ctx, "c.go")
|
|
|
|
env.Await(DiagnosticAt("a.go", 2, 6), DiagnosticAt("b.go", 2, 6), EmptyDiagnostics("c.go"))
|
|
})
|
|
}
|