cache

package
v0.10.0-pre.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 13, 2022 License: BSD-3-Clause Imports: 60 Imported by: 0

Documentation

Overview

Package cache implements the caching layer for gopls.

Index

Constants

This section is empty.

Variables

View Source
var (
	KeyCreateSession   = NewSessionKey("create_session", "A new session was added")
	KeyUpdateSession   = NewSessionKey("update_session", "Updated information about a session")
	KeyShutdownSession = NewSessionKey("shutdown_session", "A session was shut down")
)

Functions

This section is empty.

Types

type Cache

type Cache struct {
	// contains filtered or unexported fields
}

func New

func New(fset *token.FileSet, store *memoize.Store, options func(*source.Options)) *Cache

New Creates a new cache for gopls operation results, using the given file set, shared store, and session options.

All of the fset, store and options may be nil, but if store is non-nil so must be fset (and they must always be used together), otherwise it may be possible to get cached data referencing token.Pos values not mapped by the FileSet.

func (*Cache) FileSet

func (c *Cache) FileSet() *token.FileSet

func (*Cache) GetFile

func (c *Cache) GetFile(ctx context.Context, uri span.URI) (source.FileHandle, error)

GetFile stats and (maybe) reads the file, updates the cache, and returns it.

func (*Cache) ID

func (c *Cache) ID() string

func (*Cache) MemStats

func (c *Cache) MemStats() map[reflect.Type]int

func (*Cache) NewSession

func (c *Cache) NewSession(ctx context.Context) *Session

func (*Cache) PackageStats

func (c *Cache) PackageStats(withNames bool) template.HTML

type KnownMetadata

type KnownMetadata struct {
	*Metadata

	// Valid is true if the given metadata is Valid.
	// Invalid metadata can still be used if a metadata reload fails.
	Valid bool
}

KnownMetadata is a wrapper around metadata that tracks its validity.

type Metadata

type Metadata struct {
	ID              PackageID
	PkgPath         PackagePath
	Name            PackageName
	GoFiles         []span.URI
	CompiledGoFiles []span.URI
	ForTest         PackagePath // package path under test, or ""
	TypesSizes      types.Sizes
	Errors          []packages.Error
	Deps            []PackageID // direct dependencies, in string order
	MissingDeps     map[PackagePath]struct{}
	Module          *packages.Module

	// Config is the *packages.Config associated with the loaded package.
	Config *packages.Config
	// contains filtered or unexported fields
}

Metadata holds package Metadata extracted from a call to packages.Load.

func (*Metadata) IsIntermediateTestVariant

func (m *Metadata) IsIntermediateTestVariant() bool

IsIntermediateTestVariant reports whether the given package is an intermediate test variant, e.g. "net/http net/url.test".

Such test variants arise when an x_test package (in this case net/url_test) imports a package (in this case net/http) that itself imports the the non-x_test package (in this case net/url).

This is done so that the forward transitive closure of net/url_test has only one package for the "net/url" import. The intermediate test variant exists to hold the test variant import:

net/url_test net/url.test

| "net/http" -> net/http [net/url.test]
| "net/url" -> net/url [net/url.test]
| ...

net/http net/url.test

| "net/url" -> net/url [net/url.test]
| ...

This restriction propagates throughout the import graph of net/http: for every package imported by net/http that imports net/url, there must be an intermediate test variant that instead imports "net/url net/url.test".

As one can see from the example of net/url and net/http, intermediate test variants can result in many additional packages that are essentially (but not quite) identical. For this reason, we filter these variants wherever possible.

func (*Metadata) ModuleInfo

func (m *Metadata) ModuleInfo() *packages.Module

ModuleInfo implements the source.Metadata interface.

func (*Metadata) PackageID

func (m *Metadata) PackageID() string

PackageID implements the source.Metadata interface.

func (*Metadata) PackageName

func (m *Metadata) PackageName() string

Name implements the source.Metadata interface.

func (*Metadata) PackagePath

func (m *Metadata) PackagePath() string

PkgPath implements the source.Metadata interface.

type PackageID

type PackageID string

Declare explicit types for package paths, names, and IDs to ensure that we never use an ID where a path belongs, and vice versa. If we confused these, it would result in confusing errors because package IDs often look like package paths.

type PackageName

type PackageName string

Declare explicit types for package paths, names, and IDs to ensure that we never use an ID where a path belongs, and vice versa. If we confused these, it would result in confusing errors because package IDs often look like package paths.

type PackagePath

type PackagePath string

Declare explicit types for package paths, names, and IDs to ensure that we never use an ID where a path belongs, and vice versa. If we confused these, it would result in confusing errors because package IDs often look like package paths.

type Session

type Session struct {
	// contains filtered or unexported fields
}

func (*Session) Cache

func (s *Session) Cache() *Cache

Cache returns the cache that created this session, for debugging only.

func (*Session) DidModifyFiles

func (s *Session) DidModifyFiles(ctx context.Context, changes []source.FileModification) (map[source.Snapshot][]span.URI, func(), error)

DidModifyFiles reports a file modification to the session. It returns the new snapshots after the modifications have been applied, paired with the affected file URIs for those snapshots. On success, it returns a release function that must be called when the snapshots are no longer needed.

func (*Session) ExpandModificationsToDirectories

func (s *Session) ExpandModificationsToDirectories(ctx context.Context, changes []source.FileModification) []source.FileModification

ExpandModificationsToDirectories returns the set of changes with the directory changes removed and expanded to include all of the files in the directory.

func (*Session) FileWatchingGlobPatterns

func (s *Session) FileWatchingGlobPatterns(ctx context.Context) map[string]struct{}

FileWatchingGlobPatterns returns glob patterns to watch every directory known by the view. For views within a module, this is the module root, any directory in the module root, and any replace targets.

func (*Session) GetFile

func (s *Session) GetFile(ctx context.Context, uri span.URI) (source.FileHandle, error)

GetFile returns a handle for the specified file.

func (*Session) ID

func (s *Session) ID() string

ID returns the unique identifier for this session on this server.

func (*Session) ModifyFiles

func (s *Session) ModifyFiles(ctx context.Context, changes []source.FileModification) error

func (*Session) NewView

func (s *Session) NewView(ctx context.Context, name string, folder span.URI, options *source.Options) (source.View, source.Snapshot, func(), error)

NewView creates a new View, returning it and its first snapshot. If a non-empty tempWorkspace directory is provided, the View will record a copy of its gopls workspace module in that directory, so that client tooling can execute in the same main module. On success it also returns a release function that must be called when the Snapshot is no longer needed.

func (*Session) Options

func (s *Session) Options() *source.Options

Options returns a copy of the SessionOptions for this session.

func (*Session) Overlays

func (s *Session) Overlays() []source.Overlay

Overlays returns a slice of file overlays for the session.

func (*Session) SetOptions

func (s *Session) SetOptions(options *source.Options)

SetOptions sets the options of this session to new values.

func (*Session) SetProgressTracker

func (s *Session) SetProgressTracker(tracker *progress.Tracker)

SetProgressTracker sets the progress tracker for the session.

func (*Session) Shutdown

func (s *Session) Shutdown(ctx context.Context)

Shutdown the session and all views it has created.

func (*Session) String

func (s *Session) String() string

func (*Session) View

func (s *Session) View(name string) source.View

View returns a view with a matching name, if the session has one.

func (*Session) ViewOf

func (s *Session) ViewOf(uri span.URI) (source.View, error)

ViewOf returns a view corresponding to the given URI. If the file is not already associated with a view, pick one using some heuristics.

func (*Session) Views

func (s *Session) Views() []source.View

type SessionKey

type SessionKey struct {
	// contains filtered or unexported fields
}

SessionKey represents an event label key that has a *Session value.

func NewSessionKey

func NewSessionKey(name, description string) *SessionKey

NewSessionKey creates a new Key for *Session values.

func (*SessionKey) Description

func (k *SessionKey) Description() string

func (*SessionKey) Format

func (k *SessionKey) Format(w io.Writer, buf []byte, l label.Label)

func (*SessionKey) From

func (k *SessionKey) From(t label.Label) *Session

From can be used to get the session value from a Label.

func (*SessionKey) Get

func (k *SessionKey) Get(lm label.Map) *Session

Get can be used to get the session for the key from a label.Map.

func (*SessionKey) Name

func (k *SessionKey) Name() string

func (*SessionKey) Of

func (k *SessionKey) Of(v *Session) label.Label

Of creates a new Label with this key and the supplied session.

type View

type View struct {
	// contains filtered or unexported fields
}

func (*View) ClearModuleUpgrades

func (v *View) ClearModuleUpgrades(modfile span.URI)

func (*View) FileKind

func (v *View) FileKind(fh source.FileHandle) source.FileKind

func (*View) Folder

func (v *View) Folder() span.URI

Folder returns the folder at the base of this view.

func (*View) GoVersion

func (v *View) GoVersion() int

func (*View) ID

func (v *View) ID() string

func (*View) IsGoPrivatePath

func (v *View) IsGoPrivatePath(target string) bool

func (*View) ModuleUpgrades

func (v *View) ModuleUpgrades(modfile span.URI) map[string]string

func (*View) Name

func (v *View) Name() string

Name returns the user visible name of this view.

func (*View) Options

func (v *View) Options() *source.Options

func (*View) RegisterModuleUpgrades

func (v *View) RegisterModuleUpgrades(modfile span.URI, upgrades map[string]string)

func (*View) Session

func (v *View) Session() *Session

func (*View) SetOptions

func (v *View) SetOptions(ctx context.Context, options *source.Options) (source.View, error)

func (*View) SetVulnerabilities

func (v *View) SetVulnerabilities(modfile span.URI, vulns []govulncheck.Vuln)

func (*View) Shutdown

func (v *View) Shutdown(ctx context.Context)

func (*View) Snapshot

func (v *View) Snapshot(ctx context.Context) (source.Snapshot, func())

func (*View) Vulnerabilities

func (v *View) Vulnerabilities(modfile span.URI) []govulncheck.Vuln

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL