mirror of
https://github.com/golang/go
synced 2024-11-18 21:05:02 -07:00
1081e67f6b
This changes adds basic support for running `go mod tidy` as a code action when a user opens a go.mod file. When we have a command available like `go mod tidy -check`, we will be able to return edits as part of the codeAction. For now, we execute the command directly. This change also required a few modifications to our handling of file kinds so that we could distinguish between a Go file and a go.mod file. Change-Id: I343079b8886724b67f90a314e45639545a34f21e Reviewed-on: https://go-review.googlesource.com/c/tools/+/196322 Run-TryBot: Rebecca Stambler <rstambler@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Ian Cottrell <iancottrell@google.com>
70 lines
1.4 KiB
Go
70 lines
1.4 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 cache
|
|
|
|
import (
|
|
"context"
|
|
"go/token"
|
|
"path/filepath"
|
|
"strings"
|
|
"sync"
|
|
|
|
"golang.org/x/tools/internal/lsp/source"
|
|
"golang.org/x/tools/internal/span"
|
|
)
|
|
|
|
// viewFile extends source.File with helper methods for the view package.
|
|
type viewFile interface {
|
|
source.File
|
|
|
|
filename() string
|
|
addURI(uri span.URI) int
|
|
}
|
|
|
|
// fileBase holds the common functionality for all files.
|
|
// It is intended to be embedded in the file implementations
|
|
type fileBase struct {
|
|
uris []span.URI
|
|
fname string
|
|
kind source.FileKind
|
|
|
|
view *view
|
|
|
|
handleMu sync.Mutex
|
|
handle source.FileHandle
|
|
}
|
|
|
|
func basename(filename string) string {
|
|
return strings.ToLower(filepath.Base(filename))
|
|
}
|
|
|
|
func (f *fileBase) URI() span.URI {
|
|
return f.uris[0]
|
|
}
|
|
|
|
func (f *fileBase) filename() string {
|
|
return f.fname
|
|
}
|
|
|
|
// View returns the view associated with the file.
|
|
func (f *fileBase) View() source.View {
|
|
return f.view
|
|
}
|
|
|
|
// Content returns a handle for the contents of the file.
|
|
func (f *fileBase) Handle(ctx context.Context) source.FileHandle {
|
|
f.handleMu.Lock()
|
|
defer f.handleMu.Unlock()
|
|
|
|
if f.handle == nil {
|
|
f.handle = f.view.session.GetFile(f.URI(), f.kind)
|
|
}
|
|
return f.handle
|
|
}
|
|
|
|
func (f *fileBase) FileSet() *token.FileSet {
|
|
return f.view.Session().Cache().FileSet()
|
|
}
|