mirror of
https://github.com/golang/go
synced 2024-11-18 23:05:06 -07:00
f344c7530c
Added a View interface to the source package, which allows for reading of other files (in the same package or in other packages). We were already reading files in jump to definition (to handle the lack of column information in export data), but now we can also read files in diagnostics, which allows us to determine the end of an identifier so that we can report ranges in diagnostic messages. Updates golang/go#29150 Change-Id: I7958d860dea8f41f2df88a467b5e2946bba4d1c5 Reviewed-on: https://go-review.googlesource.com/c/154742 Reviewed-by: Ian Cottrell <iancottrell@google.com>
49 lines
1.5 KiB
Go
49 lines
1.5 KiB
Go
// 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 (
|
|
"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 {
|
|
// Consider adding an error to this method, if users require it.
|
|
GetFile(uri URI) File
|
|
}
|
|
|
|
// 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
|
|
}
|