diff options
Diffstat (limited to 'internal/lsp/source/offset_test.go')
-rw-r--r-- | internal/lsp/source/offset_test.go | 71 |
1 files changed, 0 insertions, 71 deletions
diff --git a/internal/lsp/source/offset_test.go b/internal/lsp/source/offset_test.go deleted file mode 100644 index 10076773a..000000000 --- a/internal/lsp/source/offset_test.go +++ /dev/null @@ -1,71 +0,0 @@ -// Copyright 2021 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 source_test - -import ( - "go/token" - "go/types" - "testing" - - "golang.org/x/tools/go/packages" -) - -// This test reports any unexpected uses of (*go/token.File).Offset within -// the gopls codebase to ensure that we don't check in more code that is prone -// to panicking. All calls to (*go/token.File).Offset should be replaced with -// calls to source.Offset. -func TestTokenOffset(t *testing.T) { - fset := token.NewFileSet() - pkgs, err := packages.Load(&packages.Config{ - Fset: fset, - Mode: packages.NeedName | packages.NeedModule | packages.NeedCompiledGoFiles | packages.NeedTypes | packages.NeedTypesInfo | packages.NeedSyntax | packages.NeedImports | packages.NeedDeps, - }, "go/token", "golang.org/x/tools/internal/lsp/...", "golang.org/x/tools/gopls/...") - if err != nil { - t.Fatal(err) - } - var tokPkg *packages.Package - for _, pkg := range pkgs { - if pkg.PkgPath == "go/token" { - tokPkg = pkg - break - } - } - typname, ok := tokPkg.Types.Scope().Lookup("File").(*types.TypeName) - if !ok { - t.Fatal("expected go/token.File typename, got none") - } - named, ok := typname.Type().(*types.Named) - if !ok { - t.Fatalf("expected named type, got %T", typname.Type) - } - var offset *types.Func - for i := 0; i < named.NumMethods(); i++ { - meth := named.Method(i) - if meth.Name() == "Offset" { - offset = meth - break - } - } - for _, pkg := range pkgs { - for ident, obj := range pkg.TypesInfo.Uses { - if ident.Name != "Offset" { - continue - } - if pkg.PkgPath == "go/token" { - continue - } - if !types.Identical(offset.Type(), obj.Type()) { - continue - } - // The only permitted use is in golang.org/x/tools/internal/lsp/source.Offset, - // so check the enclosing function. - sourceOffset := pkg.Types.Scope().Lookup("Offset").(*types.Func) - if sourceOffset.Pos() <= ident.Pos() && ident.Pos() <= sourceOffset.Scope().End() { - continue // accepted usage - } - t.Errorf(`%s: Unexpected use of (*go/token.File).Offset. Please use golang.org/x/tools/internal/lsp/source.Offset instead.`, fset.Position(ident.Pos())) - } - } -} |