// Copyright 2018 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 import ( "context" "go/ast" "go/token" "golang.org/x/tools/go/packages" ) // View abstracts the underlying architecture of the package using the source // package. The view provides access to files and their contents, so the source // package does not directly access the file system. type View interface { GetFile(ctx context.Context, uri URI) (File, error) SetContent(ctx context.Context, uri URI, content []byte) (View, error) FileSet() *token.FileSet } // File represents a Go source file that has been type-checked. It is the input // to most of the exported functions in this package, as it wraps up the // building blocks for most queries. Users of the source package can abstract // the loading of packages into their own caching systems. type File interface { GetAST() (*ast.File, error) GetFileSet() (*token.FileSet, error) GetPackage() (*packages.Package, error) GetToken() (*token.File, error) Read() ([]byte, error) } // Range represents a start and end position. // Because Range is based purely on two token.Pos entries, it is not self // contained. You need access to a token.FileSet to regain the file // information. type Range struct { Start token.Pos End token.Pos } // TextEdit represents a change to a section of a document. // The text within the specified range should be replaced by the supplied new text. type TextEdit struct { Range Range NewText string }