mirror of
https://github.com/golang/go.git
synced 2025-05-05 15:43:04 +00:00
This change adds an additional cache for type information, which here is just a *packages.Package for each package. The metadata cache maintains the import graph, which allows us to easily determine when a package X (and therefore any other package that imports X) should be invalidated. Additionally, rather than performing content changes as they happen, we queue up content changes and apply them the next time that any type information is requested. Updates golang/go#30309 Change-Id: Iaf569f641f84ce69b0c0d5bdabbaa85635eeb8bf Reviewed-on: https://go-review.googlesource.com/c/tools/+/165438 Run-TryBot: Rebecca Stambler <rstambler@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Ian Cottrell <iancottrell@google.com>
52 lines
1.6 KiB
Go
52 lines
1.6 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 (
|
|
"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) error
|
|
GetAnalysisCache() *AnalysisCache
|
|
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(ctx context.Context) *ast.File
|
|
GetFileSet(ctx context.Context) *token.FileSet
|
|
GetPackage(ctx context.Context) *packages.Package
|
|
GetToken(ctx context.Context) *token.File
|
|
GetContent(ctx context.Context) []byte
|
|
}
|
|
|
|
// 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
|
|
}
|